пятница, 5 сентября 2008 г.

Первый свет. Пайплайн рендера

Освещение

Освещение – очень важная деталь в современном рендинге. Думаю гдето 30% визуальной привлекательности картинки – хороший свет и тени. Оно придаёт объём и делает картинку более выразительной.

В проекте будем использовать попиксельное освещение, для теней – шадоумапы, простейший бамп, спекуляр, возможно SSAO.

В игре будут следующие типы источников:

Глобальное освещение. Глобальное освещение представлено виде одного направленного источника плюс небольшой амбиент. Резмер теневой карты – 1280x1280 пикселей. Возможно будет также реализовано SSAO.

Подсветка участков уровня. Предположительно только конусные источники (Фонари, прожекторы). Освещают существенную часть уровня (до 2/3 игрового экрана) Размер теневых карт (в зависимости от размера источника) – 512, 256, 128. Также сюда входят споты и с анимированным прожектором – это крутящиеся винты вентиляции и т.п.

Мелкие и совсем мелкие источники. Предположительно только точечные источники. Это всплохи света при стрельбе персонажей, маленькие лампочки, горящие детали и т.д. Для них не предполагается использовать тени. Однако если удастся удачно сделать тени для точечного источника с помощью всего двух рендер-таргетов (трапезоид) то возможно и их оборудуем тенями. Покрайней мере для всплохов освещения при стрельбе.

 

Пайплайн рендера

Пайплайн рендера на данный момент таков:

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

Пока реализованы в движке тени для направленного источника, без размытия теневого буфера. Вот что имеем на данный момент:

 

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