?

Log in

[icon] Старкрафт 2. Рендер роликов. - Роман Марченко
View:Свежие записи.
View:Архив.
View:Друзья.
View:Личная информация.

Security:
Subject:Старкрафт 2. Рендер роликов.
Time:05:10 pm
Продолжаем ковыряться в рендере старкрафта.

Рендер роликов концептуально очень похож на рендер игры, но есть и отличия.
Как и в игровом рендере, если есть глобальные источники освещения, то создается шадоумапа от них. Затем идет отрисовка всех объектов в 4 рендер таргета формата argb16f:
1. Основной буфер, куда ведется рендер цвета с освещением от глобальных источников. Альфа канал не используется.

2. Нормали в пространстве камеры. В альфа канале глубина сцены.

3. Диффузный цвет, который используется для некоторых пост процесс эффектов в дальнейшем. В альфа канал идет предрасчитанный статический (из текстур) АО фактор.


4. Спекуляр фактор в RGB, альфа канал не используется.


После того как заполнили буфера нужными данными идет рендер локальных источников освещения. Алгоритм абсолютно аналогичен описанному в первой части. Помечаем область влияния источника с помощью стенсил буфера и геометрического футпринта, а затем рендерится опять этот же футпринт с шейдером освещения. Deferred shading в чистом виде. Для источников, которые должны отбрасывать тень сначала рендерится шадоумапа с его позиции (для спот и направленных источников; omnidirectional shadowmaps замечены небыли) затем рендерится деферред источник с этой картой тени. Пару примерчиков шадоумап:




Для примера, в этой сцене что на всех скриншотах, 24 deferred источника освещения, которые не отбрасывают тень, и еще 7, которые отбрасывают.
Вот как получилось после применения источников освещения:


После идут все полупрозрачные объекты. Для крупных объектов прямо на месте применяется пост процесс эффект для искажения изображения находящегося за полупрозрачным объектом. Для этого используется текстура с диффузным цветом в рендер таргете 3.
В рендере старкрафта 2 присутствуют также волуметрик эффекты, как то volumetric light и volumetric fog.
Реализуется данный эффект в 5 проходов:
1. Рендерим бэкфейсы объема очерчивающего границы влияния volumetric эффекта. Тест глубины включен. Записываем глубину в рендер таргет.


2. Включаем альфаблендинг в режим сложения цветов (Blend source: D3DBLEND_ONE, Blend destination: D3DBLEND_ONE, Blend operation: D3DBLENDOP_ADD) и рисуем фронтфейсы объема, выводя отрицательную глубину пикселя. При блендинге пикселей происходит операция: глубина дальней стенки – глубина ближней стенки, что есть толщина объема в пространстве камеры.


3. Толщину объема мы получили, и можем варьировать прозрачность в зависимости от этого числа, но нам надо еще учитывать объекты внутри объема. Для этого мы опять рендерим бекфейсы объема, но с инвертированным тестом глубины (D3DCMP_GREATER). Режим блендинга остался таким же как и в предыдущем шаге.


4. Так как на предыдущем шаге мы учитывали все объекты перед задней стенкой объема, даже те, что перед передней стенкой, мы должны исправить этот момент. Рисуем фронтфейсы с режимами как в шаге 3, только выводим минус глубину. Т.о. мы отнимаем глубину всех неверно учтенных пикселей, что находятся перед объемом volumetric эффекта.


5. Используя текстуру глубины полученную на шагах 1-4, рисуем объем еще раз, но уже в главный рендер таргет цвета изменяя прозрачность в зависимости от глубин пикселей.
Скриншот только эффекта:


Результат с остальной картинкой:


Далее идет Depth-of-Field. Эффект реализован достаточно интересно и в точности повторяет описание в презентации от разработчиков которую я упомянул в первой части. Я не буду повторяться тут, скажу лишь, что основная борьба велась за корректность отображения эффекта (правильность блендинга объектов перед, в и позади фокуса).
После DoF идет Bloom. И на этом рендеринг заканчивается.

Отдельно хочется отметить 2 момента:
Очень качественный рендеринг кожи человека, даже без применения хитрых техник, таких как texture space diffusion и subsurface scattering. Качественная настройка материалов и используемых текстур опять зарулило.

Отсутствие SSAO. Да-да. То о чем писали разработчики в своем докладе, почему-то не используется. Хотя шейдеры присутствуют. Я перепроверил настройки рендера когда обнаружил, что АО канал заполняется во время основного прохода рендера в 4 РТ. Видимо предрасчитанное АО устроило арт отдел. Вот красивая текстура лица Джима Рейнора с АО:


Вот собственно и все. Пишите комментарии, задавайте вопросы.
comments: Оставить комментарий Previous Entry Поделиться Next Entry


rageous
Link:(Link)
Time:2010-11-10 05:17 pm
а можно картинки на habreffect перенести?
(Ответить) (Thread)


__vortex__
Link:(Link)
Time:2010-11-10 06:02 pm
Можно конечно, но зачем? Тогда не будет уменьшенных копий, и в статье будут здоровые изображения. Как по мне это ухудшит восприятие материала. Проверил, вроде имаджешак работает нормально сейчас.
(Ответить) (Parent) (Thread)


murkt
Link:(Link)
Time:2010-11-10 06:09 pm
Ну, у меня на второй картинке висит 403 Forbidden сейчас
(Ответить) (Parent) (Thread)


_winnie
Link:(Link)
Time:2010-11-10 06:23 pm
(Ответить) (Parent) (Thread)


__vortex__
Link:(Link)
Time:2010-11-10 07:28 pm
Глюки какие-то. Спасибо за информацию. Исправил
(Ответить) (Parent) (Thread)


rageous
Link:(Link)
Time:2010-11-10 06:31 pm
403 на второй картинке и открываются очень медленно и долго. превьюшки можно сделать руками и залить на тот же хабрэффект, например... просто реально неудобно, сорри за назойливость. материал отличный - но картинки очень тяжело смотреть.
(Ответить) (Parent) (Thread)


anjimo
Link:(Link)
Time:2010-11-10 06:24 pm
Вопрос вот такой: какая-нибудь финальная цветокоррекция получившегося изображения присутствует в рендеринге? Или все достигается путем манипулирования со светом?
(Ответить) (Thread)


__vortex__
Link:(Link)
Time:2010-12-03 12:49 am
В тех кадрах, что я анализировал цветокорекции нет. Возможно она используется где-то в других роликах (их же много).
(Ответить) (Parent) (Thread)


ayaromenok
Subject:уря! ты этим
Link:(Link)
Time:2010-11-13 10:46 am
снова занялся :)
(Ответить) (Thread)


Владимир Киселев
Subject:Нормали в пространстве камеры
Link:(Link)
Time:2010-11-13 06:01 pm
Здравствуй, Рома :)
Спасибо за интересный материал, прочел с удовольствием.
Обратил внимание, что камераспейс нормалмап (вторая картинка сверху) рендерится не в D3D системе координат. Это как-то обусловлено особенностями рендера и они где-то экономят на последующих стадиях или отпечаток кроссплатформенности?
//voland
(Ответить) (Thread)


__vortex__
Subject:Re: Нормали в пространстве камеры
Link:(Link)
Time:2010-12-03 01:05 am
Привет, Вов :) Рад, что тебе понравилось. На счет твоего вопроса, то скорее всего это сделано в угоду мультиплатформенности. Я покопался в шейдерах старика на предмет упаковки и хранения нормалей, и ничего такого экстраординарного в коде не нашел.
(Ответить) (Parent) (Thread)


Владимир Киселев
Subject:Re: Нормали в пространстве камеры
Link:(Link)
Time:2010-12-03 01:52 am
Ром, спасибо за ответ :)
Буду ждать следующего реверса. Кстати, если у тебя есть акаунт в FB - зафренди меня :) У нас тут весело.
(Ответить) (Parent) (Thread)

(Anonymous)
Subject:!!!!!!!!!!!!!!!!
Link:(Link)
Time:2010-11-30 04:09 pm
Привет!
Отличные реверсы!
Как на счёт СТАЛКЕРА?
Как там сделан рендер?

Заранее благодарен. ;D
(Ответить) (Thread)

alexpolt10
Link:(Link)
Time:2010-12-08 07:50 pm
да, это круто
сколько знаний надо иметь!! респект и поклон

почему автор еще не где-нибудь заграницей в крутейшей конторе?

(Ответить) (Thread)

[icon] Старкрафт 2. Рендер роликов. - Роман Марченко
View:Свежие записи.
View:Архив.
View:Друзья.
View:Личная информация.