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

в 19:20, , рубрики: game development, обработка изображений, освещение, метки:

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

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

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

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

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

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

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

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

Автор: AlexXsWx

Поделиться

* - обязательные к заполнению поля