16 июля 2013 г.

Пиксельный свет

Примерно год назад у меня оформилось видение изометрического спрайтового движка с динамическим освещением. Тогда я баловался XNA и вникал в работу графического процессора, но каких-то видимых успехов не достиг. Однако с тех пор многое изменилось: поддержка XNA Microsoft'ом прекращена, Unity развился до того, что может конкурировать с Unreal Engine, а мои руки наконец дошли до реализации старых теорий.


Идея здесь простая — использовать вариацию parallax mapping'а, используемого в любом крутом 3D-движке, для придания формы рисованным объектам. Все спрайты лежат на плоскости, и камера смотрит на них под углом 30 градусов. А в процессе рендеринга пиксельный шейдер выдвигает пиксели в направлении наблюдателя таким образом, что при расчете освещения они занимают нужные координаты в мировом пространстве.


Каждая текстура имеет области цвета и геометрии. В области геометрии красный и зеленый каналы описывают нормаль поверхности относительно камеры, а синий канал содержит высоту точки над плоскостью спрайта (значение 255 делает пиксель прозрачным).


Такая вот нехитрая система.

К сожалению, реализовать динамические тени в бесплатной версии Unity невозможно, но все еще впереди.

Комментариев нет:

Отправить комментарий