Архив блога: Сентябрь 2008
Автор: Олег Антипов
Первый свет. Пайплайн рендера
Освещение – очень важная деталь в современном рендинге. Думаю гдето 30% визуальной привлекательности картинки – хороший свет и тени. Оно придаёт объём и делает картинку более выразительной.
В проекте будем использовать попиксельное освещение, для теней – шадоумапы, простейший бамп, спекуляр, возможно SSAO.
В игре будут следующие типы источников:
Глобальное освещение. Глобальное освещение представлено виде одного направленного источника плюс небольшой амбиент. Резмер теневой карты – 1280x1280 пикселей. Возможно будет также реализовано SSAO.
Подсветка участков уровня. Предположительно только конусные источники (Фонари, прожекторы). Освещают существенную часть уровня (до 2/3 игрового экрана) Размер теневых карт (в зависимости от размера источника) – 512, 256, 128. Также сюда входят споты и с анимированным прожектором – это крутящиеся винты вентиляции и т.п.
Мелкие и совсем мелкие источники. Предположительно только точечные источники. Это всплохи света при стрельбе персонажей, маленькие лампочки, горящие детали и т.д. Для них не предполагается использовать тени. Однако если удастся удачно сделать тени для точечного источника с помощью всего двух рендер-таргетов (трапезоид) то возможно и их оборудуем тенями. Покрайней мере для всплохов освещения при стрельбе.
Пайплайн рендера на данный момент таков:
1) Z-проход. Заполняем Z-буфер. Получаем Z-текстуру. Если используется SSAO – рендерим буферы нормалей и позиции.
2) Рендер теней в буфер теней. Для каждого источника рендим Z-текстуру и после переключаем камеру и рендим наши тени для этого источника в буфер теней. Повторяем операцию для всех лампочек, имеющих тени. На этом этапе НЕ ИСПОЛЬЗУЕМ вообще никакого сглаживания. Даже ПЦФ.
3) Размываем двумя проходами гаусс-фильтра наш буфер теней. Подтёки теней устраняем при помощи Z-Текстуры (которую получили в пункте 1).
4)Далее рендим освещение от каждой из лампочек в буфер цвета. Используем простой бамп (это всё пока без диффузной составляющей)
5)Вот теперь рендим диффузную составляющую.
6)Ну и наконец COMBINE! Всё собираем и выводим на экран.
Пока реализованы в движке тени для направленного источника, без размытия теневого буфера. Вот что имеем на данный момент: