- PVSM.RU - https://www.pvsm.ru -

Модель освещения для двумерных хоррор-игр

image
Самым нетерпеливым: лагающая демка [1], написанная под хром. На моей машине загружается секунд 20.

Эта идея пришла ко мне года 2 назад. Я обратил внимание на то, что, в условиях недостаточного освещения, я воспринимаю видимые объекты преимущественно в синеватых тонах и с небольшой потерей резкости. Возможно это чисто психологическое восприятие, но мы сейчас не об этом. Мне стало любопытно, как выглядела бы 2D игра с такими особенностями освещения. С целью выяснить это, я, так и не разобравшись с шейдерами, набросал демку на самом удобном для меня языке — javascript. Поскольку эффект применяется к слабоосвещенным участкам, он не самый заметный из происходящего на экране, но вполне ощутимый шарм он добавляет.

Результат получается из трех буферов:
На первом буфере формируется картинка, к которой будет применяться пост-эффект;
Второй буфер используется для motion-blur'а карты света. По смыслу, он реализует «память» — после того, как участок засветился, его еще будет видно какое-то время, даже если никакой источник света на него уже не направлен.
На третьем рисуется сама карта света — освещение с геометрическими тенями для текущего кадра.

Каждый кадр второй буфер затеняется и размывается, поверх него высветвляется третий буфер. Результат используется как информация для пост-эффекта: при относительно высоких значениях освещенности пиксель затеняется по стандартному алгоритму, а при низких — уже начинается слабенькое размытие и постепенное затухание красного и зеленых каналов.

В моей реализации размытие из пост-эффекта просчитывается для 255 радиусов еще перед запуском, и на это уходит секунд 20-30.

Старую версию, более шуструю, без геометрических теней и с обилием быдлокода можно потыкать здесь [2].
Свежую, с тенями — здесь [1].
Обе версии писались под хром. Мой Firefox вроде тоже пытается все рисовать, но координаты мышки воспринимает некорректно (буду благодарен, если кто-нибудь подскажет как это исправить), да и FPS пониже будет (наверное, просто старая версия). Оперы же у меня нет.

Управление в свежей версии:
ЛКМ — создавать выпуклые объекты, от которых будет отбрасываться тень. Направление создания (по или против часовой стрелки) имеет разницу.
ПКМ — отмена создания / удалить объект под мышкой.
СКМ — включить / выключить второй источник света.

За основу размытия был взят алгоритм отсюда [3].
Фоновая картина из недавно вышедшей игры They bleed pixels [4].

Автор: AlexXsWx


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/obrabotka-izobrazhenij/15145

Ссылки в тексте:

[1] лагающая демка: https://dl.dropbox.com/u/10932081/shadows/stencil/shadows2.html

[2] здесь: https://dl.dropbox.com/u/10932081/shadows/shadows.html

[3] отсюда: http://www.quasimondo.com/StackBlurForCanvas/StackBlurDemo.html

[4] They bleed pixels: http://www.theybleedpixels.com/