В статье разбирают появление в Unity собственной системы real-time глобального освещения, аналогичной решениям конкурентов. В Unreal Engine это Lumen, а в Godot — SDFGI (Signed Distance Field Global Illumination). До сих пор Unity не имела полноценного real-time GI, но в версии 6.7 (пока в альфе) это меняется.
Surface Cache Global Illumination (SCGI)
Unity 6.7 добавляет Surface Cache Global Illumination (SCGI) как новую функцию Universal Render Pipeline (URP). Это система для расчёта непрямого диффузного освещения в реальном времени, ориентированная на:
- работу на широком спектре устройств;
- ускорение авторинга сцен за счёт отказа от долгого запекания;
- поддержку динамического света и геометрии (разрушение/строительство на лету, процедурный контент, смена времени суток и т.п.).
Как работает SCGI
Вместо запекания lightmap’ов или использования probe’ов, SCGI считает диффузное GI в реальном времени. Основные идеи:
- 5D-пространство позиций (3D) и направлений (2D) дискретизируется в конечное число «патчей»;
- каждая пара «позиция поверхности + нормаль» внутри объёма сцены сопоставляется уникальному индексу патча;
- размер патчей зависит от расстояния до камеры: ближе — больше детализации (больше патчей), дальше — меньше;
- во время рендеринга система определяет, какие патчи нужны текущему кадру, и выделяет их;
- для каждого активного патча рассчитывается среднее входящее полушаровое освещение путём трассировки лучей в сцену;
- если доступен аппаратный ray tracing, SCGI его использует; иначе применяется программный backend на compute-шейдерах;
- на финальном этапе по данным патчей восстанавливается покадровое (per-pixel) освещение, с фильтрацией, учитывающей нормали пикселей, чтобы сохранить детали normal map’ов.
Unity позиционирует Surface Cache GI как систему, которая «просто работает» и избавляет от сложных пайплайнов и долгих bake-процессов. При этом автор статьи отмечает, что настройка SCGI сейчас довольно сложна, но есть обучающее видео. Важно, что функция пока в альфе и имеет ряд ограничений.
Выводы
- Unity 6.7 (альфа) впервые получает собственное real-time глобальное освещение — Surface Cache GI.
- SCGI — фича URP, считающая непрямое диффузное освещение без запекания lightmap’ов и probe’ов.
- Система дискретизирует пространство в патчи, использует ray tracing (HW или compute) и восстанавливает per-pixel освещение.
- Решение ориентировано на динамический контент и избавление от долгих bake-процессов, но пока сложно в настройке и находится в альфе.