- PVSM.RU - https://www.pvsm.ru -

Все результаты получены на довольно старой машине (i7 3770+GTX 770), игра запускалась в DirectX 11 со средним качеством. Для анализа использовались RenderDoc и Nsight.
Игра работает на движке Re Engine, ставшем наследником MT Framework — движка предыдущего поколения Capcom R&D. Кроме RE2 он используется в DMC5 и RE7:Biohazard.
Мне не удалось найти в Интернете материалов о RE Engine, поэтому всё в статье основано на догадках (надеюсь, обоснованных). Я рассмотрел примерно 90% структуры кадра и привёл общее описание алгоритмов. Дальнейшее исследование требует большего опыта и времени на реверс-инжиниринг шейдеров.
Среди прочего в игре генерируются текстуры волн (пример взят из другого кадра).


Волны используются для рендеринга воды, которой в анализируемом кадре нет.
Некоторые результаты копируются в staging buffer, и это предполагает, что результаты могут использоваться в ЦП.
Этот проход генерирует список видимых источников света, проверяя расположение конусов освещения относительно пирамиды видимости. Его результатом является список видимых источников освещения и некая 3D-таблица, сопоставляющая позиции в пространстве обзора с соответствующими источниками света.
Также вычисляются списки видимых экземпляров для каждого источника освещения, которые позже используются при обновлении карты теней.
Этот проход строит гистограмму яркости на основании предыдущего HDR-изображения и таблицы измерения. Затем на основании этих данных он определяет точку белого.


Ограничивающие параллелепипеды перекрывающих объектов проверяются на пересечение с пирамидой видимости в вычислительном шейдере и заполняется буфер косвенных аргументов.
Перекрывающие объекты рендерятся в буфер глубин низкого разрешения, а затем ограничивающие параллелепипеды проверяются на попадание в этот буфер глубин.

Сэмплы 0-3
Использованный буфер глубин мультисэмплируется в четыре раза. Вероятно, для того, чтобы компенсировать низкое разрешение.

Похоже на ограничивающие параллелепипеды, ориентированные относительно взгляда.

Пример теста перекрытой геометрии (из другого кадра). Прошедшие тест пиксели (зелёные) записывают флаг (например 1) в буфер видимости для каждого экземпляра.
store_raw RWDrawIndirectArguments.x, v1.x, l(1)
Почти каждый объект геометрии в мировом пространстве рендерится при помощи косвенного вызова отрисовки. Профилировщик Nsight показывает вызовы NvAPI_D3D11_MultiDrawIndexedInstancedIndirect. Информацию об его использовании см. в [1 [1]] и [2 [2]]. RenderDoc блокирует расширение MultiDraw, поэтому в EventBrowser они разворачиваются во множество DrawIndexedInstancedIndirect и некоторые из них оказываются пустыми.
Задача этого прохода заключается в сборе масок видимости из предыдущего прохода и генерации буфера аргументов.
Ничего необычного. Подмножество сцены с основной перекрывающей геометрией.


Выходные данные:

В отрендеренных моделях используется запечённое ambient occlusion из моделей высокого разрешения.

Многопроходный вычислительный шейдер определяет каждый уровень иерархии глубин.
SSAO или HBAO + обработка в зависимости от выбранных игроком параметров. В моём случае SSAO.
AO вычисляется на основании HiZ из предыдущего прохода.

При помощи некоего нетривиального алгоритма зонды освещения, кубические карты и AO комбинируются в глобальные карты diffuse и specular.


Примеры кубических карт из сцены.

Компонент diffuse глобального освещения.

Компонент specular глобального освещения.
Создаваемые для каждого источника освещения карты теней обновляются для тех источников, на которые влияют динамические объекты. Каждая карта теней размещается в большом массиве текстур.

Затем вычисляется вклад каждого источника освещения в компоненты specular и diffuse.

Diffuse+SSS. Влияния SSS в этом кадре не видно.

Компонент Specular.

Компоненты Specular/Diffuse для светимости/локального освещения интегрируются с albedo.

После добавления всех источников освещения рендерится прозрачное стекло.

По сути, это просто куча спрайтов.

Этот проход вычисляет размытое изображение, чтобы улучшить освещение тумана.

Если заменить исходную маску тумана на шахматный паттерн.

Результат этого прохода.

TTA — это просто магия.

На основании карты скоростей вычисляется вспомогательная карта размытия.


Этот проход сначала вычисляет изображение в уменьшенном масштабе

А затем применяет фильтр bloom, тональную коррекцию, искажение и хроматическую аберрацию.
В движке активно применяются вычислительные шейдеры+косвенная отрисовка. Все меши и текстуры имеют высокое качество.
Игра использует отложенный рендеринг с TAA/FXAA и стеклом как постобработкой. Подробнее о трюках с отложенным рендерингом можно прочитать здесь [3] [пост [4] по мотивам статьи на Хабре]. Многие текстуры сжаты BC7. В целом использованные техники похожи на описываемые в [4 [5]].

Пришлось хорошенько поискать подходящий кадр, чтобы показать влияние SSS.

Монстр разбит на множество частей.

В игре есть много кровавых текстур для различных деталей.
Mip-уровни для текстур не просто отфильтрованы линейно. При каждом уровне повышается чёткость. Кроме того, на некоторых текстурах уже есть засветы specular (не очень понятно, как это влияет на их конечный вид).

Геометрия имеет хорошую топологию.

HBAO обеспечивает гораздо лучшее качество, чем SSAO.

Дым учитывает конусные источники освещения.

Для рендеринга дыма используются настоящие плоскости.
[1] Kostas Anagnostou: Experiments in GPU-based occlusion culling [1]
[2] Daniel Rákos: Multi-Draw-Indirect is here [2]
[3] Блог Адриана Корреже [6]
[4] Alien: Isolation [5]
Автор: PatientZero
Источник [7]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/shejdery/327181
Ссылки в тексте:
[1] 1: https://interplayoflight.wordpress.com/2018/01/15/experiments-in-gpu-based-occlusion-culling-part-2-multidrawindirect-and-mesh-lodding/
[2] 2: http://rastergrid.com/blog/2011/06/multi-draw-indirect-is-here/
[3] здесь: http://www.adriancourreges.com/blog/2015/03/10/deus-ex-human-revolution-graphics-study/
[4] пост: https://habr.com/ru/post/377689/
[5] 4: https://community.amd.com/community/gaming/blog/2015/05/12/high-tech-fear--alien-isolation
[6] Блог Адриана Корреже: http://www.adriancourreges.com/blog/
[7] Источник: https://habr.com/ru/post/462443/?utm_campaign=462443&utm_source=habrahabr&utm_medium=rss
Нажмите здесь для печати.