Lumen全局光照和反射

介绍Lumen的动态全局光照和反射功能。

Choose your operating system:

Windows

macOS

Linux

Lumen是虚幻引擎5的全动态全局光照和反射系统,专门针对下一代主机进行设计,是默认的全局光照和反射系统。Lumen能够在拥有大量细节的宏大场景中渲染间接漫反射,并确保无限次数的反弹以及间接高光度反射效果;无论是毫米级别的场景细节,还是数以千米的宏大场景,它都能应对得游刃有余。

Lumen入门

新创建的项目默认启用Lumen全局光照和反射,及其依赖功能,例如生成网格体距离场

项目从虚幻引擎4升级到虚幻引擎5时, 不会(not) 自动启用Lumen功能。这能防止破坏或更改这些项目中的光照路线。

Lumen可以在项目设置下的 渲染(Rendering) > 动态全局光照(Dynamic Global Illumination)反射(Reflections) 类别中启用。

projectsettings_gettingstarted.png

全局光照和反射可以单独设置。在每个类别中,设置以下功能以启用Lumen:

  • 动态全局光照 Lumen

  • 反射方法: Lumen

    启用之后,将会启用 生成网格体距离场(Generate Mesh Distance Fields) 属性(如果尚未启用)。此属性是Lumen的软件光线追踪模式所必需的。需要重新启用引擎。

Lumen的全局光照取代了屏幕空间全局光照(SSGI)距离场环境光遮蔽(DFAO)。Lumen的反射取代了屏幕空间反射。

为项目启用Lumen之后,将会禁用预先计算的静态光照补充,并隐藏所有光照贴图。

Lumen光照功能

Lumen为虚幻引擎带来了稳定的动态全局光照,并与虚幻引擎5中的其他支持系统充分集成,例如Nanite、世界分区和虚拟阴影贴图。

虚幻引擎4功能,例如屏幕空间全局光照光线追踪全局光照 (RTGI),对于依赖实时提供充足数量的项目而言不太可靠或者性能不足。此外,这些功能未与其他重要系统完全集成,无法广泛支持引擎的大部分功能。

Lumen全局光照

Lumen全局光照解决了间接漫反射光照问题。例如,在表面上散乱弹射的光线将使用表面的颜色,并将带有颜色的光线反射到其他附近的表面,从而造成颜色溢出效果。场景中的网格体还会拦截间接光照,这也会造成间接阴影。

LumenTechDemo_2.png

Lumen支持无限散乱弹射,这在具有明亮漫反射材质的场景中非常重要,例如下面的公寓白色绘画。

LumenGI_Apartment.png

虚幻引擎5的Nanite虚拟化几何体允许几何体具有比以往更多的细节。Lumen实现了全分辨率阴影,同时还可以用低得多的分辨率来计算间接光照,从而实现较高的实时性能。

LumenTechDemo_3.png

带有天空光照的Lumen

天空光照在Lumen的 最终采集(Final Gather) 过程中解决。此过程还解决天空阴影问题,让室内空间可以比室外光照环境暗得多,实现更加自然的效果。

LumenTechDemo_1.png

Lumen还为光照半透明体积雾提供更低质量的全局光照。

shadowedfogvolume.png

Lumen和自发光材质

自发光材质通过Lumen的最终采集过程来传播光线,不会对性能造成任何影响。但是,小型而明亮的自发光区域将会受到限制,以避免出现噪点瑕疵。这种解决方式会受到内在限制,比手动放置光源困难得多。

Lumen_Emissive.png

Lumen反射

Lumen为所有材质粗糙度数值解决了间接高光度或反射问题。

LumenReflections.png

所有反射中都可以看到全局光照漫反射和带阴影的天空光照。Lumen反射还支持透明涂层材质,例如下面示例中的汽车。

Lumen_SkyLight.png

Lumen为半透明材质提供有光泽的反射,例如下面示例中的汽车窗户。

目前不支持镜面反射。

lumen-glossy-reflections.jpg

支持的光源类型和其他功能

在更高的层级上,Lumen支持以下功能:

  • 支持所有光源类型,其中包括方向、天空、点、斑和矩形光源。

  • 只有定向光源支持光源函数

  • 不支持将移动性设置为 静态(Static) 的光源,因为静态光源完全存储在光照贴图中,其作用在启用Lumen之后被禁用。

Lumen设置

可以在两个地方找到Lumen的设置: 项目设置(Project Settings)后期处理体积(Post Process Volumes)

Lumen项目设置

适用于或能够影响Lumen的所有项目设置都可以在 引擎(Engine)> 渲染(Rendering) 部分中找到。项目设置中包含Lumen可以用于项目的所有默认设置。

ProjectSettings_Lumen.png

以下是Lumen需要或能够影响Lumen的所有设置的列表。

属性名称

说明

全局光照

动态全局光照方法(Dynamic Global Illumination Method)

选择要在项目中使用的动态全局光照的类型。

反射

反射方法(Reflection Method)

选择要在项目中使用的动态反射的类型。

Lumen

在可用时使用硬件光线追踪(Use Hardware Ray Tracing when available)

当视频卡、RHI和操作系统支持时,使用适用于Lumen的硬件光线追踪功能。否则,Lumen将重新使用软件光线追踪。对于具有超过100,000个实例的场景,硬件光线追踪将产生显著的场景更新成本。如需了解信息,请参阅光线追踪性能指南

光线照射模式(Ray Lighting Mode)

当Lumen使用硬件光线追踪时,控制Lumen反射光线如何发光。默认情况下,Lumen使用 表面缓存(Surface Cache) 来获得最佳性能,但如果要获得更高的质量,可以设置为 反射的击中照射(Hit Lighting for Reflections)

软件光线追踪模式(Software Ray Tracing Mode)

当对场景进行光线追踪时,控制Lumen使用哪种追踪方法。细节追踪(Detail Tracing) 追踪单个网格体的距离场,以获得最高质量。全局追踪(Global Tracing) 追踪不太精细的全局距离场,以获得最快的追踪速度。

硬件光线追踪

支持硬件光线追踪(Support Hardware Ray Tracing)

从支持该功能的操作系统、RHI和视频卡启用光线追踪,以获得更高的质量效果。

软件光线追踪

生成网格体距离场(Generate Mesh Distance Fields)

是否构建静态网格体的距离场。对于Lumen的软件光线追踪,以及在定向光源上实施可移动天空光照阴影和光线追踪距离场阴影的距离场环境光遮蔽,此功能是必需的。启用此功能将会增加静态网格体的构建时间、内存使用和磁盘大小。

距离场体素密度(Distance Field Voxel Density)

确定网格体的默认刻度如何转换成距离场体素密度维度。更改此值将导致重新构建所有距离场。值越大,占用内存的速度越快。

后期处理设置

后期处理体积包含Lumen的重载和由美术师控制的属性。这些设置可以在 全局光照(Global Illumination)反射(Reflections) 类别中找到。

PostProcessVolumeOverrides.png

以下是可以在后期处理体积中找到的Lumen的所有设置:

属性名称

说明

全局光照

Lumen场景光照质量(Lumen Scene Lighting Quality)

刻度越大,计算Lumen场景所使用的保真度越高,这种变化可以在反射中看到,但产生的GPU成本也越高。

Lumen场景细节(Lumen Scene Detail)

控制Lumen场景中可以呈现的实例大小。值越大,越能确保呈现效小的object,但会增加GPU成本。

Lumen场景视野距离(Lumen Scene View Distance)

设置Lumen为光线追踪所保持的场景最大视野距离。值越大,天空阴影和全局光照的有效范围越大,但GPU成本也更高。

最终采集质量(Final Gather Quality)

提高Lumen全局光照的质量,减少所渲染的噪点,但会增加渲染时的GPU成本。

最大跟踪距离(Max Trace Distance)

在解决光照时,控制Lumen应该跟踪的最大距离。值太小将会导致光照泄漏到较大的范围,例如洞穴。较大的值将会增加渲染场景时的GPU成本。

Lumen场景光照更新速度(Lumen Scene Lighting Update Speed)

控制Lumen场景可以缓存多少光照结果,以提高性能。刻度越大,光照变化的传播速度越快,但会增加GPU成本。

最终采集光照更新速度(Final Gather Lighting Update Speed)

控制Lumen最终采集可以缓存多少光照结果,以提高性能。刻度越大,光照变化的传播速度越快,但会增加GPU成本。

质量( Quality)

提高表面的Lumen反射的质量,减少所渲染的噪点,但会增加渲染时的GPU成本。

光线光照模式(Ray Lighting Mode)

在使用Lumen的硬件光线追踪时,此设置控制反射是重新使用表面缓存来实现更便宜的光照,还是计算击中点上的光照来实现更高的质量。

附加说明

以下是在项目中使用Lumen功能时需要注意的一些额外事项。

Lumen光照更新速度

Lumen使用大量缓存来实现实时性能。局部照射的变化可以快速传播,但全局照射变化(例如禁用太阳)可能需要几秒钟才能完成传播。项目可以使用 Lumen场景光照更新速度(Lumen Scene Lighting Update Speed)最终采集光照更新速度(Final Gather Lighting Update Speed) 后期处理体积中的控制点来绕过这种延迟,但需要更高的GPU成本。

为项目禁用静态光照

启用Lumen之后,将会从静态光照中移除预先计算的光照。可以为项目完全禁用预先计算的光照,方法是在项目设置中的 引擎(Engine)> 渲染(Rendering) 部分下禁用 允许静态光照(Allow Static Lighting)

禁用静态光照还可以在着色器排列方面节约一些静态光照开支。它还允许材质环境光遮蔽使用Lumen全局光照。

已经使用了静态光照的项目将会把自身的光照贴图加载到内存和磁盘中,直到在已经加载的关卡的 世界设置(World Settings) 中启用 强制无预计算光照(Force No Precomputed Lighting) 。然后,需要重新构建光照和保存关卡,以移除光照贴图数据。

材质环境光遮蔽

Lumen全局光照支持材质环境光遮蔽,这样可以在骨骼网格体上提供可靠的自遮挡。

要在Lumen中使用材质环境光遮蔽,请进行以下设置:

  • 在项目设置中禁用 允许静态光照(Allow Static Lighting) 。这会在GBuffer中腾出空间。

  • 将材质设置为输出到 环境光遮蔽(Ambient Occlusion)

Lumen Material Ambient Occlusion

左侧:骨骼网格体上启用了Lumen全局光照,并且仅启用了屏幕追踪(软件光追);右侧:材质环境遮蔽。

Lumen全局光照支持材质的环境法线贴图。但是,相对于材质环境遮蔽,这两种方法所导致的渲染成本高得多,但视觉提升非常有限。

要在Lumen中使用环境法线贴图,请进行以下设置:

  • DefaultEngine.ini 配置文件的 [SystemSettings] 部分中,就设置 r.GBufferDiffuseSampleOcclusion=1

  • 将材质设置为输出至 BentNormal 自定义输出节点。