Решил узнать какого качества игру можно сделать на quad. Для того, чтобы не замахиваться на что-то огромное, было решено накидать пакмана. Да не простого — а золотого!
Идея:
Классический пакман, но в темноте. Пакман — солнышко, которое подзаряжается точечками и светит ярче. Солнышко освещает всё вокруг, но свет не проходит сквозь стены.
Реализация:
Сложности реализации дали о себе знать с первых минут разработки. Если с полом всё понятно — там normalmapping, то со светом всё сложнее на порядок. Как делался свет. Итак, для затенения мы накладываем через умножение (multiply) карту освещенности. В карту освещенности должны попасть светящиеся точки (они слегка мерцают), небольшая область в пару пикселей вокруг точек (эффект свечения) и, собственно, свет от солнышка. Свет от солнышка заслуживает отдельной большой статьи. Обмолвлюсь лишь, что рендеринг в данном случае 17-ти проходный. Да, да! Однако результат превосходит ожидания. Свет не проходит сквозь препятствия, угасает с дальностью и более того — рассеивается с дальностью.
После окончания разработки света было решено оформить его дополнительным модулем и поставлять с движком, чтобы не было у простых смертных проблем с реализацией подобного эффекта. Чик и готово. Чуть больше прогресса покажу позже, пока только один скриншот.
> Обмолвлюсь лишь, что рендеринг в данном случае 17-ти проходный.
ОтветитьУдалитьОй.. а не проще было бы volume-методом отрендерить в stencil тень от стен, и потом отрисовать освещение со stencil-тестом?
Поподробнее бы про метод... может линк есть почитать?
ОтветитьУдалитьПро стенсильные тени тут
ОтветитьУдалитьhttp://www.gamedev.ru/code/articles/?id=4201
http://steps3d.narod.ru/tutorials/shadow-volumes-tutorial.html
Метод не очень любят в 3д-графике, потому что много вычислений для теневого объёма и трудно сделать мягкие тени.
В случае с 2д вычислений теневого объёма должно быть значительно меньше. Это, наверно, можно сделать за один рендер — рисуем в стенсил все стенки с шейдером вытягивания их от источника света. Но я дилетант и тут всё может быть не так просто :)
Стенсильные тени дают слишком жесткий силуэт, не угасают с дальностью и т.п. Кроме того в 2д реализация будет другая всеравно :)
ОтветитьУдалить