Архив блога: Октябрь 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.
Теперь займусь наверно общей архитектурой игры – иерархия объектов, отсечения и всё такое.