[Перевод] Анализ кадра Mortal Kombat 11
Mortal Kombat 11 — одна из самых впечатляющих внешне игр, вышедших в 2019 год: потрясающие лицевые анимации, тени, освещение и эффекты постобработки. И это ещё не учитывая того, что игра на самом деле увлекательна, имеет сложные бои и захватывающий сюжет.
Я просто обязан был изучить рендерер Mortal Kombat 11, чтобы понять, как же достигается такая удивительная графика, а теперь поделюсь своими открытиями с вами.
Проход вычисления теней
Каждый кадр начинается с прохода теней (shadow pass).
Каждая карта теней составляется из четырёх стенсил-карт глубин теней с суперсэмплированием (SSAA), которые затем преобразуются в четырёхканальную моментальную карту теней (Moment Shadow Map, MSM)[Peters et al. 2016]. В каждом из каналов хранятся , , и .
Позже эта карта используется в проходе получения теней (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.
Зеркальное освещение
Зеркальное освещение использует IBL из кубической карты 512x512
, а также источники освещения в сцене, и вычисляется при помощи вычислительного шейдера по фрагментам.
Рассеянное освещение
В проходе рассеянного освещения (diffuse lighting) тоже используется вычислительный шейдер и оно вычисляется по фрагментам.
Объёмное освещение
Объёмное освещение выполняется при помощи линейной глубины, а также текстуры рассеяния и пропускания света.
Временно́е сглаживание
Стандартно для временно́го сглаживания (temporal anti-aliasing) используется буфер скоростей для репроецирования предыдущих сэмплов и получения готового сглаженного результата.
Проход UI
Весь интерфейс в Mortal Kombat рендерится в отдельный render target, а затем накладывается поверх готового результата с тональной коррекцией.
Mortal Kombat — одна из самых красивых игр в поколении проектов с рендерингом на основе растеризации.