Lumen的目标是,能够在主机上分别以8毫秒和4毫秒的帧预算实现30和60FPS,并为不透明和半透明材质以及体积雾实现全局光照和反射效果。 引擎采用了一系列预先配置好的"可扩展/弹性(Scalability)"设置让Lumen应对不同的目标帧率需求。 超高(Epic)可扩展性级别的目标帧率为30FPS。 高(High)可扩展性级别的目标是在当前世代主机上达到60 fps,Nintendo's Switch 2除外。 中等全局光照可扩展性级别适合用于Switch 2和低端PC。
Lumen依赖于时间上采样,以及虚幻引擎5的时间超级分辨率(TSR)实现4K输出。 Lumen和其他功能使用较低的内部分辨率(1080p),未经TSR采样。 相比于以4k分辨率原生运行Lumen但使用显著更低的质量设置,这种方式能获得更好的最终图像质量。
伸缩性设置
Lumen的质量可通过全局光照和反射质量组进行设置: 每降低一个级别,成本大约是上一级别的一半,同时在该成本下提供尽可能最佳的质量。
你可以在关卡编辑器中,通过与视口相关的设置(Settings) > 视口可扩展性设置(Engine Scalability Settings)找到可扩展性设置。 在游戏中,请使用GameUserSettings和图形设置菜单来控制可扩展性设置(参见示例:Lyra项目)。 或者,使用控制台变量sg.GlobalIlluminationQuality和sg.ReflectionQuality。
过场动画(Cinematic)可扩展性级别适合用于影片渲染队列。
超高(Epic)可扩展性级别的性能目标是在主机上实现30FPS。
高(High)可扩展性级别的性能目标是在主机上实现60 FPS。
中(Medium)可扩展性级别的目标是在Switch 2和中等配置的PC上实现60 fps。
低(Low)可扩展性级别将禁用Lumen功能。
默认情况下,虚幻引擎在主机上的性能目标是30 FPS。 如果以60 fps为目标,请在控制台设备描述中将全局光照和反射质量组设置为高(High)。 相关配置描述位于[你的项目名称]\Platforms[Console]\Config\文件夹。 例如[你的项目名称]\Platforms\PS5\Config\PS5DeviceProfiles.ini。
例如,以60 FPS为目标的PlayStation 5的设备描述如下所示:
[PS5 DeviceProfile]
; Set Lumen GI and reflection quality to High, targeting 60 fps
+CVars=sg.GlobalIlluminationQuality=2
+CVars=sg.ReflectionQuality=2Lumen Lite
在中等质量反射(sg.ReflectionQuality 1)下,禁用Lumen反射,取而代之的是在光滑表面上使用屏幕空间反射(SSR),同时使用Lumen全局光照的粗糙镜面反射。
Lumen在中等全局光照质量(sg.GlobalIlluminationQuality 1)下使用一种名为辐照度最终采集(Irradiance Final Gather)的特殊最终采集方式,通过设置r.Lumen.FinalGatherMethod 0启用。
辐照度域采集会在像素周围放置世界空间辐射缓存探针,预先计算它们的辐射度,并插值到支持探针遮蔽的像素。 它能提供速度更快但质量较低的全局光照,适用于低端PC和Switch 2,目标帧率为60 fps(包括掌机模式)。
其他质量级别(不启用Lumen)
全局光照和反射的默认质量组位于\Engine\Config\BaseScalability.ini中。 这些设置会试图让间接光照的品质在不同质量级别下保持相似。 这么做的额外好处是,你无需在不同平台上重新设置你的光照参数,同时还能缩减Lumen的开销。
中质量级别
Lumen辐照场适用于在支持全局光照的平台上实现全局光照,否则:
对于小规模环境光遮蔽,如果是在后期处理体积中设置,可使用屏幕空间环境光遮蔽(Screen Space Ambient Occlusion)。
对于大规模环境光遮蔽,距离场环境光遮蔽(Distance Field Ambient Occlusion)将取代Lumen全局光照。
低质量级别
仅使用无阴影的天空光照。
降低天空光照强度(
r.SkylightIntensityMultiplier=0.7),以近似模拟中(Medium)质量级别的效果,因为此时没有天空光照阴影。
软件光线追踪
软件光线追踪是Lumen中速度最快的追踪方法,我们建议将其用于无法负担硬件光线追踪的游戏,或作为不支持硬件光线追踪的GPU的备用方法。
在该配置下,Lumen追踪一个合并后的全局距离场。 追踪全局距离场会使追踪不受实例的数量及其与其他实例的重叠的影响。 它还非常适合用于具有大量重叠实例的内容。
全局距离场的更新性能仍然取决于实例的数量,但由于大量使用缓存,降低了更新开销。
全局距离场分别缓存可移动对象和静态对象。 正确设置组件的移动性非常重要,因为移动静态Actor会导致静态缓存失效,从而产生很大的开销。 r.GlobalDistanceField.Debug.LogModifiedPrimitives可用于调试运行时移动了哪些静态Actor。
在组件中禁用影响距离场光照(Affects Distance Field Lighting),或在静态网格体编辑器中将距离场分辨率缩放(Distance Field Resolution Scale)设为0,即可从距离场场景渲染中移除单个距离场实例。 移除对全局光照或反射没有重大影响的次要实例,有助于优化全局距离场的更新性能。
硬件光线追踪
硬件光线追踪能提升Lumen的品质。我们推荐将它作为主机上30 fps和60 fps游戏的默认选项。 它的开销比软件光线追踪要高得多,需要对场景进行细致优化,因为它对大量重叠示例十分敏感。
硬件光线追踪要求逐帧重建顶层加速结构(Top Level Acceleration Structure)(TLAS)。 此开销与该加速结构中的实例数量成正比。 在当前世代主机上实现良好的性能通常意味着,在剔除阶段后,光线追踪场景中的实例数量少于10万个。 在微软的Windows平台上,实例数量可能会有所差异。
使用Stat SceneRendering检查光线追踪场景中可见的实例数量。 具体可见光线追踪激活实例(Ray tracing active instances)统计数据。
光追场景剔除设置是用来控制场景内光追实例数量的最有用的工具。 光线追踪剔除功能默认启用,这可以简化其设置过程,但也可以在[你的项目名称]\Config\文件夹下的DefaultEngine.ini配置文件中进一步修改。
[SystemSettings]
r.RayTracing.Culling=3
r.RayTracing.Culling.Radius=15000
r.RayTracing.Culling.Angle=0.5在关卡中的Actor上禁用在光线追踪中可见(Visible In Ray Tracing),可从光线追踪场景中移除单个实例。
如需详细了解硬件光线追踪性能,包括性能计数器和调试视图,请参阅光线追踪性能指南。
远场(Far Field)可以在不损失全局光照和反射距离的情况下,提供激进式的剔除。 超出光追场景半径之后,所有光线都使用远场追踪,以较低开销扩展全局光照和反射的范围。 Lumen技术细节提供了有关如何设置远场的信息。
将增加光线追踪场景剔除与远场配合使用,可帮助你优化和缩减Lumen硬件光线追踪性能。
硬件光追性能取决于场景中网格体的重叠程度。 例如天空盒等会与整个场景重叠的大型网格体会造成一些性能问题。 这些网格体应禁用在光线追踪中可见(Visible In Ray Tracing)选项。 草地网格,以及一些相互穿插、彼此重叠的网格体,也适合禁用硬件光追来节省性能。
如需在使用硬件光线追踪时保持场景的高性能,你必须将重叠网格体的数量保持在合理的水平。
反射命中光照(Hit Lighting for Reflections)能够提高反射质量。 这种算法会在光线每次击中对象时,对材质和光照求值,但对游戏来说,这类开销较大。 除非材质非常简单并且使用光线追踪质量切换(Ray Tracing Quality Switch)节点进行优化,否则我们不建议将其用于游戏。 在主机平台上,你可以通过r.Lumen.HardwareRayTracing.MaxIterations限制BVH遍历迭代的次数,提前终止耗时且开销较高的光线。 被终止的光线被视为完全遮挡,产生零辐射(zero radiance),导致过度遮挡。 此设置适用于微调性能,以及避免场景中因大量重叠几何体导致性能问题。
小提示
Lumen反射的性能开销取决于屏幕中平滑或低粗糙度材质的数量。 这类材质需要专门的反射光线。 默认情况下,所有粗糙度低于0.4的像素都将追踪反射光线。 高于0.4的像素则会根据Lumen的全局光照,获得"免费"的反射近似效果。。
Lumen反射粗糙度阈值
你可以使用后期处理体积(Post Process Volume)中的要追踪的最大粗糙度(Max Roughness To Trace)设置来控制粗糙度阈值。 还可以通过r.Lumen.Reflections.MaxRoughnessToTraceClamp的可扩展性设置进一步限制该阈值。 粗糙度低于该阈值的像素将追踪专门的Lumen反射光线,而粗糙度高于该阈值的像素会回退到无粗糙镜面反射近似值。
植被采用独立的粗糙度阈值。 所有使用双面植被(Two Sided Foliage)或次表面(Subsurface)着色模型的材质像素都会被视为植被类型。 你可以使用r.Lumen.Reflections.MaxRoughnessToTraceForFoliage控制植被粗糙度。 需要专门反射光线的像素可以通过性能概览(Performance Overview)视图模式查看,该模式位于视图模式(View Modes)菜单下的关卡视口中。
植被上的反射往往难以看到。 将植被最大粗糙度阈值设置为0,可以在不影响质量的情况下实现一些显著的性能提升。
Lumen反射下采样系数
Lumen反射下采样系数通过r.Lumen.Reflections.DownsampleFactor设置。 可将其设置为1或2,以在质量和性能之间进行权衡。 当控制台变量设置为2时,只追踪四边形中一个像素的一条光线。 减少光线追踪数量可以提高性能,但需要从低分辨率的追踪结果重建全分辨率光照,这会导致反射更加模糊且更不稳定。
下采样棋盘格还有一个折中选项,可通过r.Lumen.Reflections.DownsampleCheckerboard启用。 在该模式下,不是每四个像素追踪一条光线,而是每两个像素追踪一条光线。 质量和性能将介于全分辨率追踪和四分之一分辨率追踪之间。
用屏幕空间反射取代Lumen反射
用屏幕空间反射(SSR)取代Lumen反射可以更显著地降低反射开销。 只需设置r.Lumen.Reflections.Allow=0。 例如,你可以将以下内容添加到XSXDeviceProfiles.ini文件中,从而在Xbox Series S上节约1毫秒。
[XSX_Lockhart DeviceProfile]
; Use SSR in lieu of Lumen reflections for perf
+CVars=r.Lumen.Reflections.Allow=0下例演示了即使在禁用了Lumen反射的情况下,Lumen全局光照仍能提供粗糙镜面反射。
通过复用那些用于漫反射全局光照的追踪光线,可以让Lumen反射获得一些性能提升。 这一实验性方法带来的性能加速只适用于像素粗糙度集中在0.2–0.4范围的场景。 该功能可通过r.Lumen.Reflections.RadianceCache=1启用。
Lumen场景光照
Lumen场景光照(Lumen Scene Lighting)会更新表面缓存的直接光照和间接光照,用于全局光照和反射的光线命中。 性能开销取决于每帧更新的表面缓存的比例。 要想加快直接光照和间接光照的更新速度,可通过以下方式分别设置:直接光照使用r.LumenScene.DirectLighting.UpdateFactor,间接光照使用r.LumenScene.DirectLighting.MaxLightsPerTile和r.LumenScene.Radiosity.UpdateFactor。
"Lumen场景光照(Lumen Scene Lighting)"在每个表面缓存图块上只选择一小部分最重要的光源,这使其性能不太容易受到场景中光源总数的影响。 每个图块的光源数量可通过r.LumenScene.DirectLighting.MaxLightsPerTile控制。
Lumen世界空间辐射缓存
Lumen使用世界空间辐射缓存存储远距离光照。
单个探针的分辨率可通过r.Lumen.ScreenProbeGather.RadianceCache.ProbeResolution和r.Lumen.TranslucencyVolume.RadianceCache.ProbeResolution来控制。 数值越高,间接光照的质量越高,但更新开销也更高。
第二个主要性能控制是每帧要更新的探针数量。 这可以通过r.Lumen.ScreenProbeGather.RadianceCache.NumProbesToTraceBudget和r.Lumen.TranslucencyVolume.RadianceCache.NumProbesToTraceBudget来设置。 数值越高,光照响应越快,但开销也越大。 将该值设置得太低,可能会导致在快速移动摄像机时出现光照闪烁,因为Lumen需要缓慢追赶。因此有时,为了进一步降低性能开销,必须使用r.Lumen.ScreenProbeGather.RadianceCache.GridResolution和r.Lumen.TranslucencyVolume.GridPixelSize降低探针网格的分辨率。
Lumen屏幕探头采集
屏幕探头采集(Screen Probe Gather)负责通过从像素追踪光线并整合入射光照来完成最终采集。
涉及的主要性能控制是探针间距(r.Lumen.ScreenProbeGather.DownsampleFactor)和屏幕空间探针分辨率(r.Lumen.ScreenProbeGather.TracingOctahedronResolution)。 增加探针间距会降低间接阴影的质量,并产生模糊的间接光照。 降低屏幕探针分辨率会降低间接光照的方向性和粗糙反射的质量。
间接光照集成可通过r.Lumen.ScreenProbeGather.IntegrateDownsampleFactor 2,选择以半分辨率运行。 这将大幅提升集成速度,但会带来额外的噪点和软化法线,因此任何默认的可扩展性或设备预设均未默认启用此项。
Lumen性能分析
Lumen可分解成三个通道(pass):
Lumen场景光照(Lumen Scene Lighting),用于对表面缓存光照求值。
Lumen屏幕探头采集(Lumen Screen Probe Gather),用于对漫反射全局光照、粗糙反射和半透明全局光照求值。
Lumen反射(Lumen Reflections),用于对光滑表面上的专用反射光线求值。
Stat GPU命令可显示GPU各个通道的耗时,其中也包括Lumen的几个通道。
如需详细了解性能明细,请使用ProfileGPU命令。 你可以使用第三方分析工具,如RenderDoc。
Lumen正在使用异步计算,并与其他工作负载并行运行。 为了单独衡量Lumen的表现,建议通过控制台命令r.Lumen.AsyncCompute 0禁用异步计算。 如需更详细地了解异步计算,请参阅下一小节。
异步计算
Lumen在主机平台上使用异步计算。 这便于GPU将Lumen的工作与非Nanite几何体通道以及直接光照通道相重叠。 此外,Lumen还可与Lumen屏幕探头采集和Lumen反射通道重叠。
异步计算已经针对各种常见工作进行了默认配置,但在某些情况下,采用非默认设置可能更快一些。 我们就碰到过这种情况:图形队列中存在大量直接光照或阴影贴图任务,导致Lumen屏幕探头采集通道无法和Lumen反射通道重叠。 在这种情况下,将Lumen完全作为异步计算通道运行可能有助于提高性能。 要这么做,请进行以下设置:
r.LumenScene.Lighting.AsyncCompute=1
r.Lumen.DiffuseIndirect.AsyncCompute=1
r.Lumen.Reflections.AsyncCompute=1异步计算会使Lumen与其他渲染通道重叠。 这使得性能分析更加困难,因为计时将不仅包括Lumen的开销,还包括与其重叠的其他工作负载的开销。 单独分析Lumen时,禁用异步计算。
可延展参考
在引擎的默认可扩展性设置中,以及各平台的设备描述配置中,都包含单独的Lumen设置。 这些设置对于你了解渲染器最新的性能可扩展性设置,有着重要的参考意义。 此外,它们也适合作为你的自定义可扩展性设置的起点。 我们建议使用默认的可扩展性级别来实现30 FPS或60 FPS,同时也是为了让不同的质量级别下具有一致的外观。 你可以在以下文件中查看这些可扩展性设置:
[Engine Root]\Engine\Config\BaseScalability.ini
[Engine Root]\Platforms\[Console Name]\Base[ConsoleName]DeviceProfile.ini