Почему The Finals на UE5 работает лучше чем большинство игр на технологии от Эпик и при чем здесь NVIDIA? То что я нашел вас сильно удивит

В прошлом посте многие приводили высокую производительность в The Finals как контр-аргумент в пользу того что Fortnite не единственная игра на UE5 которая одновременно выглядит отлично и работает сносно на актуальном железе поколения PS5/XSX/RTX 3060, при этом имея разрушаемое окружение.

Вот прошлый пост которых многих забайтил:

Лично меня The Finals никогда особо не впечатляла в техническом плане. Признаюсь, я не так много играл в эту игру, поэтому, возможно, не разглядел всю красоту местных многоэтажек. Тем не менее, я решил разобраться, почему с производительностью в The Finals всё обстоит лучше, чем в среднем по рынку UE5.

То, что я обнаружил, вас удивит.

UE5 сам по себе — это всего лишь инструмент, и очевидно, что в умелых руках любой инструмент может выдавать отличный результат. Однако мне было интересно углубиться в детали и понять, как именно The Finals справляется с вопросом производительности.

За динамическое освещение в игре отвечает RTXGI основанный на пробах.
За динамическое освещение в игре отвечает RTXGI основанный на пробах.

TLDR: ответ оказался прост – The Finals использует ветку движка от NVIDIA в которой ключевые технологии от Epic либо не используются, либо заменены на аналоги от NVIDIA. Но давайте о всем по порядку.

Для начала, в чем ключевые отличия UE5 в The Finals от ванильного-UE5?

  • В игре не используется Nanite – технология отрисовки геометрии высокого разрешения, в том числе и на консолях. От слова совсем.
  • Как результат, в игре также не используются и Virtual Shadow Maps – технология расчета прямого освещения.
  • Вместо Lumen используется менее точный, но более производительный RTXGI для расчета отраженного света.

Как видим, основные инновации UE5 в The Finals по просту не задействованы. Давайте теперь разберемся с каждым пунктом отдельно и сравним как они работают и какие у них есть альтернативы за пределами UE5.

Что такое Nanite и Virtual Shadow Maps

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

Nanite — это технология от Epic, предназначенная для так называемой виртуальной геометрии. Условно говоря, Nanite можно представить как ЛОДы «на стероидах». Эта технология позволяет разработчикам использовать модели с очень высоким геометрическим разрешением, а движок автоматически выбирает подходящий уровень детализации для каждой части модели. Цель — добиться примерно одного треугольника на пиксель в финальном изображении. Большее количество треугольников на пиксель не имеет смысла, но даже с таким подходом современные GPU могут испытывать трудности.

Пример трещин при разных уровнях LOD в соседних кластерах геометрии которые умеет находить и исправлять Nanite используя одинаковый уровень LOD для соседей. Думаю внимательные читатели уже поняли где здесь применяется теорема о покраске графов.
Пример трещин при разных уровнях LOD в соседних кластерах геометрии которые умеет находить и исправлять Nanite используя одинаковый уровень LOD для соседей. Думаю внимательные читатели уже поняли где здесь применяется теорема о покраске графов.

Одна из ключевых инноваций Nanite заключается в том, что он автоматически разбивает модель на части (кластеры, субдивизионы) и генерирует "ЛОДы" для каждой части отдельно, при этом избегая появления "трещин" (cracks). Ранее это была сложная задача, и ЛОДы приходилось создавать для всей модели сразу, но в Nanite эту проблему удалось решить. Epic Games потратили несколько лет на исследование этого метода. Если вам интересно, как он работает, рекомендую посмотреть видео от разработчиков технологии. Примечательно, что подход основан на теореме о раскраске графов.

Видео с GDC где на пальцах рассказывают как работает Nanite. Похожую задачу можно также решить с помощью концепций мешлетов и используя геометрические шейдеры.

Nanite также использует программный растеризатор, реализованный через собственный compute-shader, вместо аппаратного. Программный растеризатор — это, по сути, compute-shader, который обрабатывает данные сцены и вычисляет цвет для каждого пикселя, обходя стандартный графический конвейер (ROPs) и заменяя его на compute-конвейер.

Справа стадии графического конвеера, справа стадии компьют конвеера. Как видим, компьют как правило гораздо более гибкий, но не всегда более производительный.
Справа стадии графического конвеера, справа стадии компьют конвеера. Как видим, компьют как правило гораздо более гибкий, но не всегда более производительный.

Это делается для минимизации влияния overdraw (количество перерисовок пикселей), поскольку традиционно GPU растеризуют треугольники не попиксельно, а блоками по 2x2 или 4x4 фрагмента. Такой подход к растеризации блоками не очень эффективен при использовании одного треугольника на пиксель, поскольку каждый такой треугольник размером с пиксель требует отрисовки как минимум четырёх фрагментов вместо одного.

Картинка из старой статьи про оптимизацию рендеринга с помощью софтверного растеризатора в Dragon Age: Inquision. https://ubm-twvideo01.s3.amazonaws.com/o1/vault/gdc2016/Presentations/Wihlidal_Graham_OptimizingTheGraphics.pdf
Картинка из старой статьи про оптимизацию рендеринга с помощью софтверного растеризатора в Dragon Age: Inquision. https://ubm-twvideo01.s3.amazonaws.com/o1/vault/gdc2016/Presentations/Wihlidal_Graham_OptimizingTheGraphics.pdf

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

Виртуальные карты теней (Virtual Shadow Maps) - это технология расчета прямого света и теней, позволяющая эффективно обрабатывать сложные сцены с высокополигональными моделями. Эта технология требует поддержки Nanite для своей работы. Мы не будем подробно останавливаться на ней, но отметим, что альтернативных методов расчета прямого освещения существует великое множество.

Схожим с Nanite принципом VSM может выбирать уровень детализации теней в зависимости от дальности окклюдера к повехности иммитируя эффект пенумбры.
Схожим с Nanite принципом VSM может выбирать уровень детализации теней в зависимости от дальности окклюдера к повехности иммитируя эффект пенумбры.

Что такое Lumen и в чем отличие Lumen от RTXGI?

По сути, обе технологии решают задачу вычисления вторичного (отраженного) света с использованием проб и трассировки лучей, но их подходы различаются. Проблему расчета непрямого освещения можно объяснить на простом примере: представьте сцену с одним источником света. Чтобы определить его влияние на конкретную точку поверхности сцены, достаточно учитывать только этот единственный источник. Однако, если добавить расчет непрямого света, каждая точка на поверхности сцены превращается в источник света, поскольку она может отражать свет от основного источника. Это значительно усложняет задачу. Настолько, что между играми, где рассчитывался только прямой свет, и играми с расчетом непрямого света, прошло 20 лет прогресса в технологиях GPU и рендеринга.

Прямой (белый) и непрямой – синий или оранжевый свет в зависимости от цвета поверхности от которой он отразился. 
Прямой (белый) и непрямой – синий или оранжевый свет в зависимости от цвета поверхности от которой он отразился. 

Пробы — это небольшие невидимые сферы, которые размещаются по всей сцене особым образом для сбора информации о свете. Такой подход в современных играх позволяет избежать трассировки лучей для каждой точки поверхности, что значительно снижает вычислительную нагрузку на GPU. Этот метод используется для расчета глобального освещения от крупных источников света (например, солнца или неба), где обычно не требуется высокая точность.

Пробы и падающий на них свет.
Пробы и падающий на них свет.

В Lumen используется упрощённый двухуровневый подход, основанный на экранных и мировых пробах, которые накапливают свечение между кадрами. Мировые пробы предназначены для более эффективного сбора света от крупных источников, которые не требуют частого обновления. В свою очередь, экранные пробы помогают повысить точность расчётов для небольших источников света, таких как лампы, костры или факелы, которые можно обновлять чаще.

После обновления проб и репроекции экранных значений из предыдущих кадров, UE5 интерполирует эти данные, рассчитывая итоговые значения для каждого пикселя на каждой поверхности в кадре.

Конечное значение для поверхности вычисляется из ближайших до нее проб с учетом перекрытий. Но это не точно, из-за чего возникают "протекания".
Конечное значение для поверхности вычисляется из ближайших до нее проб с учетом перекрытий. Но это не точно, из-за чего возникают "протекания".

Пробы хранятся в виде атласов в текстурах GPU, что может занимать значительное количество памяти и пропускной способности (bandwidth). Из-за использования Lumen экранных проб, которые накапливают свет между кадрами, в играх на UE5 часто наблюдается эффект "гостинга" — артефакты, возникающие из-за неточных вычислений. Проблема мировых проб заключается в том, что свет иногда "протекает" из-за недостаточной плотности проб или их неудачного расположения.

Слева сверху пример атласа проб который хранит накопленный свет для каждого из направлений. Снизу – значения нормалей из G-Buffer нужное чтобы взять свечение в сторону камеры от поверхности сцены.
Слева сверху пример атласа проб который хранит накопленный свет для каждого из направлений. Снизу – значения нормалей из G-Buffer нужное чтобы взять свечение в сторону камеры от поверхности сцены.

Lumen позволяет использовать либо функции расстояний со знаком (SDF), либо иерархию объёмов (BVH) для трассировки лучей. Первый вариант применяется, когда целевая платформа не поддерживает аппаратное ускорение, например, на PS5 и XSX.

Видео с GDC где на пальцах рассказывают как работает Lumen

SDF использовался в графике очень давно, особенно в VFX еще до трассировки лучей для расчета освещения. SDF позволяет делать очень крутые трюки без полигонов.

В этой сцене нет ни одного полигона, только функции расстояний от камеры до сцены.
В этой сцене нет ни одного полигона, только функции расстояний от камеры до сцены.

В RTXGI также используются пробы, но только на уровне мира, что требует меньше вычислительных ресурсов и памяти, но одновременно снижает точность метода. Лумен и RTXGI различаются также во многих деталях реализации, но для более глубокого понимания лучше обратиться к соответствующим статьям и материалам с GDC.

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

RTXGI работает исключительно со структурой иерархии объемов для трассировки лучей и требует на практике аппаратной поддержки. Одним из ключевых отличий RTXGI от Lumen является то, что RTXGI в первую очередь ориентирован на расчет освещения, а не отражений. В качестве примера, в игре The Finals для расчета отражений используются обычные экранные отражения (SSR), а не RTXGI.

Видео с GDC где на пальцах рассказывают как работает DDGI (RTXGI это его коммерциализированный вариант).

Где можно найти больше подробностей о технологиях в The Finals?

1. Блог самой Nvidia которая судя по всему сильно помогла с оптимизациями версии The Finals для PC. Например здесь и здесь.

2. Видео от Digital Foundry:

Это все здорово, но что это все значит?

А суть поста в том что при всей своей инновационности у технологий UE5 есть альтернативы которые могут быть более оправданны для игр текущего поколения или игр где есть специфические требования или ситуации. The Finals как раз доказывает что с этим можно экспериментировать и всех технологий UE5 есть альтернативы которые лучше или хуже подходят для других ситуаций, вот лишь несколько примеров из того что сейчас актуально.

Глобальное освещение:

1) GI-1.0 – технология от AMD основанная на похожих с Lumen принципах двух-уровего кеша вычисляемого между кадрами.

Почему The Finals на UE5 работает лучше чем большинство игр на технологии от Эпик и при чем здесь NVIDIA? То что я нашел вас сильно удивит

2) Radiance Cascades – уже кидал пример. Этот метод используется в PoE2 и не требует интерполяции между кадрами.

3) Метод основанный на Surfels – похож на Lumen, но вместо проб используются сурфели – небольшие участки поверностей для накопления света. Используется в играх от EA.

4) Метод используемый в Tiny Glade. Подробностей к сожалению не знаю, но это тоже кастомный вариант подходов из Lumen который позволяет вычислять динамическое глобальное освещение даже на GTX 1060

5) SSGI – метод основанный только на экранных пробах.

Почему The Finals на UE5 работает лучше чем большинство игр на технологии от Эпик и при чем здесь NVIDIA? То что я нашел вас сильно удивит

Виртуальная геометрия:

Мешлеты и меш-шейдеры - используются во многих движках, например в Bevy.

Почему The Finals на UE5 работает лучше чем большинство игр на технологии от Эпик и при чем здесь NVIDIA? То что я нашел вас сильно удивит

Мешлеты в Alan Wake 2:

Почему The Finals на UE5 работает лучше чем большинство игр на технологии от Эпик и при чем здесь NVIDIA? То что я нашел вас сильно удивит

Если нашли ошибку – дайте знать в комментариях.

979979
5454
1717
1212
44
11
11
11
11
11
11
323 комментария

Вот такого бы больше здесь 😍👍,

а не всяких бомжей типо:
"поддержите/задонатьте, принимайте в семью"

344
3
1
1
1

поддержи, задонать, принимай в семью

53
14
2
1

А ещё над насрать про технологии древних и показать скрин зеркала 20 летней давности, типа ты дохуя прохавал

25
6

Не нужно поддерживать/не надо донатить/выгоните из семьи

5

Ну так, а ты что не пишешь такого?

2

Привет, я кокосик, скинь деняг

1