воскресенье, 5 октября 2008 г.

Рендер: освещение (переделан пайплайн)

А вот не всё так радостно оказалось, как планировалось :) 
Т.к. нам при наложении теней (и освещения собсна тоже) от нескольких источников надо различать какая тень от какого источника рендится. Ибо сложение освещения идёт по формуле:

Light1*Shadow1+Light2*Shadow2+...+LightN*ShadowN

А по технике складывания в один буфер получается что

Light1*(Shadow1*Shadow2*...*ShadowN) + Light2*(Shadow1*Shadow2*...*ShadowN) +... + LightN*(Shadow1*Shadow2*...*ShadowN)

Короче нифига неправильно затенялось :(  (http://www.gamedev.ru/code/forum/?id=85226)

Вообщем переколдовал я рендер и решил проблему через MRT. При освещении в RT1 рендится бамп и освещение, в RT2 – только тени с освещением. Потом RT2 фильтруется и накладывается на RT1. Таким образом получаем чёткий бамп с наложенным на него освещением и подразмытыми тенями. Проверка на растекание тени через края объектов также присутствует. Реализованы все виды освещения Directional, Omni, Spot.

Теперь займусь наверно общей архитектурой игры – иерархия объектов, отсечения и всё такое.


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