[Перевод] Анализ кадра Mortal Kombat 11

Mortal Kombat 11 — одна из самых впечатляющих внешне игр, вышедших в 2019 год: потрясающие лицевые анимации, тени, освещение и эффекты постобработки. И это ещё не учитывая того, что игра на самом деле увлекательна, имеет сложные бои и захватывающий сюжет.

Я просто обязан был изучить рендерер Mortal Kombat 11, чтобы понять, как же достигается такая удивительная графика, а теперь поделюсь своими открытиями с вами.

Проход вычисления теней


Каждый кадр начинается с прохода теней (shadow pass).
Каждая карта теней составляется из четырёх стенсил-карт глубин теней с суперсэмплированием (SSAA), которые затем преобразуются в четырёхканальную моментальную карту теней (Moment Shadow Map, MSM)[Peters et al. 2016]. В каждом из каналов хранятся $z$, $z^2$, $z^3$ и $z^4$.

96b83b4633fab9c9230364a1fe03d966.jpg


Позже эта карта используется в проходе получения теней (shadow resolve pass) до наложения освещения. В результате получается наилучшее качество теней, которого можно достичь растровыми методами затенения.

В массиве текстур закодировано три отбрасывающих тень источника освещения, которые присутствуют в этой сцене.

G-Pass


Общий проход (General Pass, G-Pass) в Mortal Kombat 11 выглядит довольно странно. Есть четыре буфера элементов, в которых хранятся такие сжатые данные, как яркость, нормали видового пространства по оси X, линейная глубина (из которой можно сделать вывод, что в качестве единиц измерения в Mortal Kombat используются метры (м)), а также странные данные, например, ambient occlusion с дизерингом и идентификаторы материалов.

Почти каждый входной материал в G-Pass хранится в формате сжатия блоков.

Ambient Occlusion


До прохода ambient occlusion из своих сжатых буферов геометрии (G-Buffers) воссоздаются нормали видового пространства и глубина, а также вычисляется иерархический z-буфер [Greene et al. 1993]. Затем на основании этих буферов в сочетании с массивом текстуры белого шума 32x32 размера 8 вычисляется ambient occlusion.

Зеркальное освещение


ee386314e276f4ff95d7b03a7eea010e.jpg


Зеркальное освещение использует IBL из кубической карты 512x512, а также источники освещения в сцене, и вычисляется при помощи вычислительного шейдера по фрагментам.

Рассеянное освещение


7a665b75e0d393923972e4b06f6d6816.jpg


В проходе рассеянного освещения (diffuse lighting) тоже используется вычислительный шейдер и оно вычисляется по фрагментам.

Объёмное освещение


39a5563e422ce0337a1cf1a159fc0f14.gif


Объёмное освещение выполняется при помощи линейной глубины, а также текстуры рассеяния и пропускания света.

Временно́е сглаживание


8f7646a91671edeacaf87009c27a34b8.jpg


Стандартно для временно́го сглаживания (temporal anti-aliasing) используется буфер скоростей для репроецирования предыдущих сэмплов и получения готового сглаженного результата.

Проход UI


e416328b118d07a70c045bc69bc3317e.png


Весь интерфейс в Mortal Kombat рендерится в отдельный render target, а затем накладывается поверх готового результата с тональной коррекцией.

071fd7abe5b7d93d7e79b0be46462472.jpg


Mortal Kombat — одна из самых красивых игр в поколении проектов с рендерингом на основе растеризации.

© Habrahabr.ru