26 мая 2021 года компания Epic Games на презентации State of Unreal показала новую версию своего игрового движка – Unreal Engine 5 [1, c. 2], в котором произошли крупные изменения по сравнению с прошлой версией. Одними из таких изменений стали две новые технологии – Lumen и Nanite. Они привлекли к себе большое внимание за счёт того, что значительно упрощают и улучшают процесс работы с графикой и с освещением при разработке игр, производстве синематиков, графических фильмов. Всё больше игровых компаний при разработке реалистичных и гиперреалистичных игр прибегают к использованию данных технологий, конкурентов которым пока нет.
Nanite – технология виртуализированой геометрии, которая в режиме реального времени позволяет увеличивать на несколько порядков количество треугольников из которых состоит сетка объекта [2]. Также она в автоматическом режиме, в зависимости от расстояния между камерой в игре и объектом, оптимизирует детализацию, т. е. меняет количество полигонов. Это полностью заменяет ручную работу с level of details (LOD) отдельных сеток, суть которой заключалась в том, чтобы самостоятельно создать несколько версий модели с разным уровнем детализации, настраивать отображение которой приходилось вручную [3]. Nanite позволяет вывести уровень детализации в играх на новый уровень, что уже видно на примерах гиперреалистичных игр и фильмов, избавиться от запекания деталей в обычные текстуры карты, причём без проблем с наложением текстур и материалов, увеличения объёма данных.
Ниже представлено сравнение сеток с поддержкой Nanite с фасетированными (левая часть) и сглаженными (правая часть) нормалями (рис. 1).
Рис. 1. Сетки с поддержкой Nanite с фасетированными (слева) и сглаженными (справа) нормалями
Далее обратим внимание на визуализацию треугольников Nanite для сеток, активированных с помощью Nanite, с фасетированными (слева) и сглаженными (справа) нормалями (рис. 2).
Рис. 2. Визуализация треугольников Nanite для сеток, активированных с помощью Nanite, с фасетированными (слева) и сглаженными (справа) нормалями
Работу алгоритмов Nanite можно разбить на этапы:
- Кластеризация;
- Передача данных;
- Рендеринг – отсечение, растеризация, экспорт атрибутов материалов, затененение.
Nanite организует статическую сетку в соответствии со следующей иерархией [4]:
- каждая сетка генерирует разные LOD;
- каждый LOD указывает на разные группы;
- каждая группа представляет собой набор из нескольких кластеров;
- кластер может находиться только в одном LOD;
- каждый кластер разбивается на множество подкластеров.
Технология Nanite использует микрополигоны для рендеринга высокодетализированных сцен без необходимости создания и использования LOD моделей. Уровни детализации (LOD) представляют собой несколько версий одного и того же объекта или сцены с разными уровнями детализации. При рендеринге используется тот LOD, который соответствует расстоянию от камеры до объекта.
Создание LOD моделей требует дополнительной работы от художников и разработчиков, поскольку каждая версия модели должна быть создана вручную. Технология Nanite упрощает процесс создания контента, так как не требует создания и управления LOD моделями. Художники могут создавать высокодетализированные модели без необходимости дополнительных шагов для создания LOD версий.
Nanite-сетка создается так: сначала формируется кластер из исходных треугольных полигонов, если их больше 1, то кластеры группируются с отсечением общей границы, треугольники из группы объединяются в общий список, упрощается 50% треугольников, этот упрощённый список треугольников разбивается на кластеры по 128 треугольников [4]. Тонкости работы алгоритмов отсутствуют в свободном доступе и являются собственностью компании Epic Games.
Другая технология – Lumen, объединяет Lumen Global Illumination, Lumen Reflections и Lumen with Sky Lighting, отвечающие, соответственно, за реалистичное освещение и оптические эффекты, отражения и освещение неба, пространств внутри и вне помещений [5]. С появлением Lumen Unreal Engine 5 стал поддерживать растекание света, обеспечивающее реалистичное изменение цвета объектов при отражении света, мягкие непрямые тени, множественное отражение при непрямом освещении, свечение материалов, учёт света от далёких объектов.
Lumen работает за счёт карт Signed Distance Fields и трассировки лучей Screen Space. Традиционные методы рассчитывают освещение сцены приближёнными методами вычислений, которые опираются на реальную физику отражения и падения световых лучей, но это слишком ресурсозатратная задача, из-за чего ранее не удавалось воссоздать такие правильные тени и вторичные отражения [6]. Lumen для решения этой проблемы использует следующий подход:
- Создание проекции меша с разных углов обзора, содержание данные о параметрах поверхностей на сцене;
- Рендер триангулированных мешей;
- Объединение информации о поверхности и глубине объекта в сцене;
- Совместный рендер освещения и отражений.
Для расчёта освещения Lumen Surface Cache параметризует объект на сцене, по умолчанию, двенадцатью картами сетки. На данном этапе обработке становиться важным то, используется ли в данной сцене Nanite, так как он значительно повышает эффективность расчёта прямых и непрямых отражений от сетки. Lumen Ray Tracing практически реализуется двумя способами – аппаратным, который лучше вычисляет высококачественные зеркальные отражения, и программным, который показывает себя отлично при расчётах в сценах с большим количеством объектов, перекрывающих друг друга на сцене относительно направления камеры.
Такой подход позволил вычислить освещение поверхностей, которые не видны в объектив камеры, и учесть дальнейшее переотражение света в сложных сценах [7]. Основная цель Lumen – обеспечить более 60 кадров в секунду в играх с большим открытым миром с передовой графикой на консолях поколения PlayStation 5 и Xbox Series X/S, на персональных компьютерах с мощными видеокартами и другими комплектующими эти показатели должны быть больше при хорошей оптимизации игр со стороны разработчиков. В закрытых помещениях Lumen должен обеспечивать около 30 кадров в секунду, это объясняется тем, что в них большую часть вычислительной мощности забирает на себя расчёт множественных (или бесконечных) диффузных переотражений для создания реалистичной картинки.
У Lumen есть ограничения, связанные с отражением от сеток тонких поверхностей, чаще всего проявляющийся, например, в отражении от листвы деревьев и похожих объектов. Также некоторые сложной формы прозрачные или тонкие поверхности вызывают, так называемую, «утечку света».
Ниже показана разница в обновленном Lumen в Unreal Engine 5.4 (рис. 3). Освещение стало гораздо лучше, особенно в сложных местах.
Рис. 3. Сравнение технологии lumen 5.3 и 5.4
Эти две технологии значительно изменяют процесс работы в движке и создания сцен. Благодаря им теперь нет нужды тратить большое количество времени на ручную заготовку LOD для объектов, отлаживать освещение (так как оно теперь в режиме реального времени доступно прямо из рабочего окна сцены). Также уменьшились требования к аппаратному обеспечению, необходимому для работы с трассировкой лучей (RTX).
Но несмотря на все эти преимущества, разработка игр с поддержкой этих технологий столкнулась с некоторыми проблемами. В первую очередь, это проблемы оптимизации – так как новая версия движка только недавно вошла в активную стадию пользования, то многие разработчики AAA-игр не справляются с достаточной оптимизацией, исправлением некорректных отображений, совмещением старых приёмов и методов разработки с новыми. Также стало тяжелее портировать игры или полностью переносить их на новые версии игрового движка без возникновения множества проблем – они возникают из-за конфликтов Lumen и Nanite с другими методами статического освещения и отражения. Из-за этого некоторые игры сильно ухудшаются в качестве графики и скорости работы, запуска, увеличивается количество лагов, зависаний и т. п.
По анонсам и дорожным картам для Unreal Engine 5.4 и будущих версий, заметно, что разработчики делают упор на развитии этих технологий. Например, улучшение производительности рендеринга для пользователей с 60 Гц, Nanite получит улучшения для рендеринга трещин, неровностей, сколов и т. п. Хоть Unreal Engine 5 уступает Unity и Godot в количестве выпускаемых игр за год (по данным с 2023 по 2024), стоит учесть, что он предназначен в первую очередь не для разработок инди-игра, а для игр уровня AAA, доля которых в мировом рынке не может быть больше доли игр от маленьких студий [8]. Помимо игр, Unreal Engine 5 теперь выступает косвенным конкурентом для программ, предназначенных для работы с визуальными эффектами и графикой для фильмов и мультсериалов, его можно использовать для работы с интерьером и архитектурным проектированием.