Lumen
Lumen (он же Люмен, он же Глобальное освещение и отражения в реальном времени на основе воксельной трассировки лучей и аппроксимации диффузного освещения при помощи сферических гармоник , он же То, что заставляет твою 4090 потеть в 4К) — технология глобального освещения и отражений (GI), разработанная Epic Games и впервые представленная в Unreal Engine 5. По сути, это попытка достижения фотореалистичного освещения без полного path tracing, но с таким количеством аппроксимаций и эвристик, что порой трассировка лучей кажется более простым решением.
Суть[править]
Представь себе, что ты — разработчик игр, просветленный адепт physically based rendering (PBR) и мечтаешь о полной консистентности освещения. Ты хочешь, чтобы в твоей игре каждый фотон вел себя как в жизни, но рейтрейсинг — это дорогое удовольствие, доступное только илите и владельцам кремниевых монстров от Nvidia. И тут нисходит сам Тим Суини в сиянии HDR и говорит: «Держите, смертные, Lumen!».
Lumen работает по гибридному принципу, комбинируя Screen Space Global Illumination (SSGI) с воксельной трассировкой лучей и многоуровневой системой кэширования. То есть он смотрит, что у тебя на экране, строит воксельное представление сцены и пытается симулировать распространение света. Но если SSGI — это наивный алгоритм, который использует только данные G-Buffer, то Lumen — это уже серьезный зверь, способный на многое.
Lumen использует несколько техник, чтобы достичь своей цели:
- Software Ray Tracing with Hardware Acceleration — да-да, тот самый рейтрейсинг, но с некоторыми допущениями. Lumen трассирует лучи в воксельном представлении сцены, что позволяет получить грубые, но быстрые результаты. Трассировка производится на compute shaders, но может использовать аппаратное ускорение RTX для пересечения лучей с вокселями. Это все еще не path tracing, но уже что-то.
- Hierarchical Scene Representation — Lumen строит иерархическое представление сцены, используя воксели разного уровня детализации (LOD). Это позволяет оптимизировать трассировку лучей, сосредотачивая вычисления на ближайших объектах и используя грубые аппроксимации для удаленных.
- Surface Cache — Lumen кэширует информацию об освещении на поверхностях, чтобы не тратить время на повторные вычисления. Этот кэш используется как для диффузного, так и для спекулярного освещения, что позволяет значительно ускорить работу алгоритма. Однако, этот кэш может приводить к артефактам, особенно при быстрых изменениях освещения или геометрии.
- Mesh Distance Fields — Lumen использует signed distance fields (SDF) для определения расстояния до ближайших поверхностей. Это позволяет ему более точно рассчитывать затенение и глобальное освещение, особенно в сложных сценах. SDF генерируются заранее и хранятся в виде текстур, что ускоряет доступ к ним.
- Final Gather with Temporal Anti-Aliasing — на последнем этапе Lumen собирает всю информацию, которую он получил, и генерирует финальное изображение. При этом он использует технику, похожую на final gathering, но с дополнительной фильтрацией и темпоральным сглаживанием. Это позволяет уменьшить шум и артефакты, но может приводить к размытию изображения и ghosting эффектам.
- Radiance Probes for Indirect Lighting — для аппроксимации непрямого освещения от статичных объектов Lumen использует массив radiance probes, расположенных в сцене. Эти probes захватывают информацию об освещении в окружающем пространстве и используют ее для освещения динамических объектов. Это позволяет достичь более реалистичного освещения, но требует предварительного просчета radiance probes.