Войти
Вячеслав ЕгоровСтатьи

Освещение в Valve’s Source Engine (перевод) (4 стр)

Автор:

5 Рендеринг в Расширенном Динамическом Диапазоне света (HDR)

  После выпуска Half-Life 2 в движок Source был добавлен рендеринг в Расширенном Динамическом Диапазоне cвета (HDR), используя метод, который работает на видеокартах с SM2.0 и RGBA16F текстурами. Эта технология была использована при создании демо-уровня Lost Coast и во всех последующих играх, выпущенных Valve.
  Много различных методов для создания HDR рендера было рассмотрено, прежде чем найти подход, больше всего подходящих для текущих графических ускорителей. Выбранный метод в основном использует RGBA8 текстуры и RGBA16F карты освещения и окружения, а также несколько RGBA16F текстур для неба, облаков и солнца, созданных вручную.

Изображение

Таблица 12. Сцена из уровня Lost Coast с различными уровнями экспозиции.

  Так как все шейдеры в DX9 рендере движка Source однопроходные, есть возможность произвести операции HDR освещения и Tone mapping'a во время нормальной отрисовки. Для этого требовалось добавить под-функции Tone mapping'a во все пиксельные шейдеры, но позволило рисовать в обычные RGBA8 рендер таргеты. Из-за использования RGBA8 рендер таргетов вместо RGBA16F, этот метод отрисовки слабо отличается от отрисовки в низком динамическом диапазоне (LDR) по скорости и занимаемой памяти, и, что самое главное – имеется возможность использовать анти-алайзинг (AA). Это позволило избежать затратного копирования и конвертации результата отрисовки в финальный формат для отображения.
  Когда промежуточные рендеры используются для последующий графических операций, динамический диапазон этих промежуточных результатов аккуратно управляется чтобы предоставить высококачественный вывод для RGBA8 данных. Например, рендеринг производимый для динамических отражений в воде использует значение экспозиции, которое изменено в соответствии с коэффициентом отражения, чтобы в результате получались правильные блики от солнца.
  Когда требуется результат в полном расширенном диапазоне (к примеру, когда рисуются кубические карты для отражений), движок используется для отрисовки серии кадров с различными параметрами экспозиции, которые затем объединяются для производства одного floating-point HDR изображения.
  Автоматическое вычисление экспозиции нужное для Tone mapping'a производится уникальным методом в движке Source. К финальному изображению применяется пиксельный шейдер, для того чтобы определить, какие пиксели выходят за пределы установленного диапазона яркостей, и записывает флаг в буфер трафарета, который указывает на прохождение теста каждым пикселем. Асинхронная проверка перекрытия (Occlusion Query) используется для подсчёта количества пикселей, не вошедших в заданный диапазон яркости. Когда результат OQ готов, он используется для обновления гистограммы яркостей. За кадр проверяется один диапазон яркости, 'размывая' стоимость генерации полной гистограммы на множество кадров. Также производиться сглаживание результата в зависимости от прошедшего времени для смягчения резких изменений гистограммы яркостей. Эта техника имеет ряд преимуществ перед другими методами, как например то, что она считает полную гистограмму, а не только среднюю яркость всего кадра, а также, она доступна для процессора без прерывания ([[GPUStall|GPU Stall]]) рендеринга или чтения текстур из памяти GPU. В дополнение к гистограмме, другие параметры авто-экспозиции и bloom фильтра могут контролироваться левел-дизайнерами и могут меняться в разных местах уровня или в ответ на  игровые события. В дополнение к настройке Tone mapping фильтров с использованием гистограммы яркостей, применяется image-space bloom для того чтобы увеличить восприятие яркости для очень больших значений направленного и отраженного света.
  В мире off-line рендера (не реального времени) такой bloom фильтр типично применяется в HDR пространстве до Tone mapping’a, но мы считаем, что Tone mapping перед bloom’ом не сильно портит результирующую картинку, но зато обеспечивает возможность видеть результат HDR отрисовки большему количеству пользователей.
  Для тех, кого интересуют детали реализации, исходный код для автоматического расчёта экспозиции представлен в Source SDK.

Страницы: 1 2 3 4 5 Следующая »

#HDR, #shading, #tone mapping, #Valve

2 декабря 2008 (Обновление: 20 дек 2008)

Комментарии [3]