Lumen — новая система глобального освещения и отражений в Unreal Engine 5. Она создаёт полностью динамическое непрямое освещение, учитывая параметры геометрии, материалов и света на сцене.
Обычно глобальное освещение требует много вычислений, особенно в реальном времени, но Lumen делает это проще. Авторы движка рассказали у себя на канале, как работает новая технология, а мы перевели.
Растекание света на бетонной колонне на первых двух гифках, и исчезание цвета на колонне, когда розовый скелетал меш пропадает из кадра
Растекание цвета (Colour Bleeding). Оптический эффект, при котором окраска ближайших поверхностей изменяется при отражении света от окружающих объектов. Он почти незаметен, но с ним сцена выглядит реалистичней. Функция работает, только когда объект, от которого отскакивает свет, находится в видимости камеры. Если объект исчезает из зоны видимости, отсвечивание пропадает
Мягкие непрямые тени от колонны и под лавочкой
Мягкие непрямые тени (Soft Indirect Shadows). Технология создаёт размытые тени в местах без направленного света. Lumen полностью заменяет SSAO (Screen Space Ambient Occlusion) в Unreal Engine и создаёт точные и реалистичные мягкие тени
Непрямое освещение с несколькими отражениями. Почти неуловимый эффект, как в этой сцене с включенным и выключенным излучением — Radiosity.
Непрямое освещение с несколькими отражениями (Multi-bounce Indirect Illumination). При расчёте текущего кадра технология учитывает и использует освещение предыдущих кадров, свет меняется плавно. Эффект почти незаметен в большинстве сцен, но необходим для правильного моделирования отражения солнечного света от нескольких поверхностей
Эмиссионные материалы и поверхности.
Эмиссионные материалы (Emissive Materials). Unreal Engine 4 позволяет добавить свечение на материал, то есть сделать его эмиссионным, — но это не влияет на сцену без лайтмэпов. А в Unreal Engine 5 свет от эмиссионных материалов и поверхностей добавляет непрямое освещение в сцену. Эффект может исчезнуть, если небольшие эмиссионные объекты скрыты другими мешами, а если эмиссионная поверхность слишком маленькая или яркая — может увеличиться шум на соседних освещенных поверхностях
Поддержка Sky Light
Lumen поддерживает Sky Light. Он учитывает цвет отдаленных частей уровня и добавляет непрямой свет на объекты. Например, когда в игре изменится время суток, отражения на других объектах уровня тоже изменятся. Если вы использовали Sky Atmosphere и Sky Light в UE4, их настройки можно перенести в новую версию.
Для работы с глобальным освещением Lumen использует гибридный метод: трассировку лучей screen space и карты Signed Distance Fields — упрощённую версию сцены.
Обычная трассировка лучей генерирует освещение по падающим и отталкивающимся лучам света, которые учитывают геометрию объектов и сцены. Для расчёта глобального освещения требуется много лучей, чтобы создать правильные диффузные мягкие тени и вторичные отражения света. Но такая трассировка нагружает систему, а в играх её можно использовать только с видеокартами RTX.
Screen space трассировка работает только с поверхностями в обзоре камеры и требует меньше вычислительной мощности. Но на сцене всегда присутствуют поверхности, которые не видны камере, а от них свет UE рассчитывать не может.
На первом изображении проблем нет, на втором есть, так как часть сцены не попадает в объектив камеры, а значит лучи не трассируются
Чтобы решить эту проблему, Lumen использует карты SDF. Их можно представить, как буфер объёма или аппроксимацию исходного треангулированного меша.
SDF в UE4 и UE5
Lumen не собирает информацию из каждого триса, потому что это затратно. Даже с картами SDF полигонов остаётся много, но чтобы отразить свет правильно, нужно проанализировать информацию о поверхности на сцене.
Чтобы собрать необходимую информацию о поверхности и глубине, Lumen создаёт проекции меша с разных углов обзора, которые содержат данные о параметрах поверхности — cards (карты). Используя их, Lumen рендерит треангулированные меши, чтобы зафиксировать свойства материала с нескольких углов обзора.
Информация о поверхностях и глубине хранится раздельно в памяти GPU, но в Lumen она объединена в функцию в Lumen Scene.
Lumen Scene отображает информацию об объектах, которая учитывается для трассировки лучей. Эту информацию Lumen использует для генерации глобального освещения, теней, света, и отражений на сцене.
Если вам кажется, что освещение выстроено неправильно, проверьте его в Lumen Scene — его можно использовать как отладчик.
Раньше освещение и отражения были отдельными системами в играх, а Lumen объединяет их: глобальное освещение и отражения в UE5 рассчитываются вместе.
При расчёте отражений движок использует данные трассировки. Это позволяет Lumen создавать геометрически точные и мягкие отражения, а диффузному глобальному освещению и теням от Skylight появляться в отражениях.
В Unreal Engine 5 в новых проектах Lumen подключён по умолчанию. Если вы переносите проект из UE4, нужно поменять некоторые настройки, чтобы подключить Lumen.
Откройте настройки проекта, введите в поиск «dynamic global illumination method» и установите его на Lumen
После этого поменяются две настройки: отражения и генерация Mesh Distance Field — карт Distance Field ближайших к камере мешей. Их изменения можно проверить в настройках проекта.
Перезапустите Unreal Editor, чтобы применить настройки и сгенерировать Mesh Distance Field
Чтобы протестировать Lumen, создайте сцену:
Создайте простую комнату на пустом уровне с предметом посередине и с окном, чтобы внутрь проходил свет
Добавьте Directional Light
В настройках света поставьте галочку напротив Atmosphere SunLight, чтобы потом он учитывался в Sky Atmosphere и свет проходил через окно и освещал всю комнату
Добавьте на уровень Sky Atmosphere
Добавьте Sky Light и поставьте галочку напротив Real Time Capture
Когда вы вращаете Directional Light, Sky Atmosphere обновляется мгновенно, чтобы соответствовать времени суток.
Чтобы посмотреть, как освещение работает с разными поверхностями, нанесите разные материалы на комнату. Lumen поменяет освещение сцены мгновенно
Циклы дня и ночи. Поворачивая Directional Light по оси Y, вы поменяете время суток. Sky Atmosphere отвечает за цвет неба и цвет света в зависимости от времени суток. Вы можете настроить автоматическую смену света — он будет обновляться каждый кадр. Частоту обновлений можно настроить в зависимости от потребностей. Чтобы назначить клавишу для смены дня и ночи и включения ламп, воспользуйтесь Blueprints.
Lumen работает с масштабными уровнями и дополнительными источниками света. Например, вы можете добавить на сцену другой Directional Light для света луны или эмиссионные поверхности.
Эмиссионные поверхности не могут полностью заменить источники света. Убедитесь, что они большие и не слишком яркие. Например, как плоский экран телевизора. Маленькие и яркие меши добавляют много шума на уровень. В таких случаях добавьте источник света рядом с маленькой эмиссионной поверхностью и приглушите интенсивность свечения материала.
По умолчанию текстуры и материалы могут выглядеть немного размытыми в отражённых поверхностях. Чтобы это исправить, подключите аппаратное ускорение в настройках Lumen и повысьте качества отражений. По умолчанию параметр качества отражения установлен на 1. В этом режиме Lumen берет информацию о материале и освещении из кэша поверхности, и отражения выглядят как в Lumen Scene.
Подключение аппаратного ускорения
Во втором режиме Lumen берёт информацию о материале из шейдера, но также использует информацию из кэша поверхности. Четвёртый режим — наивысшее качество. Lumen берёт информацию из шейдера и Direct Light, а информацию о непрямом освещении — из кэша поверхности
Режим 1, 2 и 4
Если после переноса меша в сцену он не отображается в режиме визуализации SDF, измените показатель Distance Field Resolution Scale. Меш появится и Lumen начнёт его учитывать.
Появление вешалки после увеличения значения Distance Field Resolution Scale
Если в сцене есть окна или дверные проёмы, можете частично заблокировать их, тогда отражение света от препятствия осветит интерьер.
Если вам нужно снизить шум в сцене, воспользуйтесь настройкой Final Gather Quality в Post Process Volume. Она улучшит качество глобального освещения и снизит шум, но нагрузка на GPU увеличится. В Post Process Volume откройте раздел Global Illumination и попробуйте поменять настройку Final Gather Quality. Подберите значение, которое подойдёт для вашей сцены.
Лучи для ближайших мешей рассчитываются с помощью Mesh Distance Field, а для дальних — Global Distance Field. Сцену можно усложнять, это никак не повлияет на трассировку. Если в сцене есть много мелких скомпонованных вместе объектов, лучше запечь их в один меш или установить Software Ray Tracing Mode на Global Tracing. Это может снизить качество, но повысит производительность
В Unreal Engine 4 динамическое освещение всегда выполнялось с помощью прямого освещения, которое требует большого количества вычислений. Все типы непрямого освещения опирались на грубую аппроксимацию, иллюзии и отрендеренные лайтмэпы глобального освещения. Lumen позволяет использовать глобальное освещение без особой нагрузки на систему и делает его более реалистичным.
Lumen — это результат многих лет работы команды Epic, которая стремилась привнести глобальное освещение в риал тайм в Unreal Engine. Технология пока находится в раннем доступе и будет меняться и улучшаться до выпуска Unreal Engine 5 в следующем году.
Подробная документация о Lumen на официальном сайте.
Lumen — не единственная новая технология в Unreal Engine 5. Разработчики добавили не менее впечатляющую технологию Nanite, которая позволяет рендерить сцены быстрее обычного меш рендеринга и меняет процесс создания модели. О ней мы рассказывали в этой статье.