Lumen使用多种光线追踪方法来解决全局光照和反射。 首先执行屏幕追踪,然后使用更加可靠的方法。 Lumen支持两种不同的光线追踪方法:硬件光线追踪和通过有向距离场的软件光线追踪。 硬件光线追踪提供更高质量并且默认启用,但需要专用显卡支持且成本更高。
表面缓存
Lumen生成附近场景表面的自动参数化,这种方法称为表面缓存(Surface Cache)。 使用这种方法可以快速查找场景中光线接触点的光照。 Lumen会从多个角度捕获每个网格体的材质属性。 这些捕获位置(即卡片(Cards))是针对每个网格体离线生成的。
卡片可通过控制台命令r.Lumen.Visualize.CardPlacement 1可视化。
默认情况下,Lumen在一个网格体上放置的卡片数量为12,但可以通过静态网格体编辑器中的编译设置(Build Settings)调高最大Lumen网格体卡(Max Lumen Mesh Cards)的数值,增加卡片数量。 调整卡的数量对于更复杂的内部或具有不规则形状的单个网格体非常有用。
没有表面缓存覆盖的区域在关卡编辑器的表面缓存(Surface Cache)视图模式中显示粉色。
这些区域不会反射光线,在反射过程中显示为黑色。 此类问题可以通过增加最大Lumen网格体卡中使用的卡片数量来解决,但可能无法解决所有问题。 或者,将网格体分解成不太复杂的几部分也可以解决这类问题。
视图模式(View Mode) > Lumen > 表面缓存(Surface Cache) | 复杂网格体的Lumen表面缓存可视化(Lumen Surface Cache Visualization of Complex Mesh) |
默认启用骨骼网格体的表面缓存支持(r.MeshCardRepresentation.SkeletalMesh)。 与静态网格体不同,骨骼网格体由于其动态特性,没有离线生成的卡片。 而是在将骨骼网格体添加到场景中时,围绕其预蒙皮边界框放置六张卡片。 因此,骨骼网格体的表面缓存覆盖和质量相当有限,尤其是在网格体大幅变形的动画中。
样条线网格体的表面缓存支持已改进。 由于每个样条线网格体实例都能以不同方式变形网格体,因此不会为每个实例生成离线卡片,而是为变形后的网格体计算新的网格体卡片边界,并将变形前网格体的卡片重新拟合到新边界中。 虽然仍能提供合理的覆盖范围,但随着网格体发生更大的形变,覆盖范围和质量预计都会下降。
具有视图相关逻辑的材质,例如像素深度、摄像机位置或摄像机矢量,在Lumen表面缓存视图模式下看起来可能不正确。 使用这些节点的材质可以使用光线追踪质量切换(Ray Tracing Quality Switch)节点来提供采用Lumen表面缓存的材质版本,或为复杂材质优化表面缓存捕获。
如需详细了解如何使用光线追踪质量切换节点,请参阅光线追踪性能指南。
Nanite可以加速用于使表面缓存与三角形场景保持同步的网格体捕获。 尤其是多边形网格体,需要使用Nanite实现高效捕获。 只有网格体使用了Nanite,才支持植被和实例化的静态网格体组件。
在使用材质属性填充表面缓存之后,Lumen将计算这些表面位置的直接和间接光照。 这些更新分散在多个帧上,可以有效地支持很多动态光照和多次弹射的全局光照。
虚幻引擎为表面缓存和卡呈现提供可视化模式。 详情请参阅本页面的Lumen可视化选项部分。
仅支持具有简单内部结构的网格体——墙壁、地板和天花板都应该是单独的网格体。 Lumen不支持在单个网格体中导入带有家具的整个房间。
屏幕追踪
Lumen首先在屏幕上使用追踪光线(即屏幕追踪或屏幕空间追踪),如未找到命中点或光线穿透表面,则使用更可靠的方法。 屏幕追踪支持所有几何体类型,可用于弥合Lumen场景和三角形场景之间存在的不一致情况。
使用屏幕追踪有一个弊端,那就是会严重限制美术设计,而美术设计仅适用于间接光照,例如间接光照缩放(Indirect Lighting Scale)或自发光增强(Emissive Boost)的光照属性。 在光源上设置较大的间接光照范围将会导致依赖于视图的全局光照,因为屏幕追踪无法正确支持它。
下面的示例场景首先使用屏幕追踪,然后再使用其他成本更高的追踪选项。 为全局光照和反射禁用屏幕追踪之后,可能只能看到软件光线追踪所产生的的Lumen场景。 屏幕汇总可以帮助解决三角形场景和Lumen场景之间的不一致。
要实现这种比较,可以在关卡视口的显示(Show) > Lumen菜单中禁用屏幕追踪,移除屏幕追踪(Screen Traces)旁边的选中标记。或者在后期处理体积(Post Process Volume)的Lumen全局光照(Lumen Global Illumination)和Lumen反射(Lumen Reflections)类别中禁用屏幕追踪(Screen Traces)设置。
Lumen光线追踪
Lumen提供了两种方法对场景进行光线追踪:软件光线追踪和硬件光线追踪。
软件光线追踪(Software Ray Tracing)使用网格体距离场来运行,适用的硬件和平台范围最广,但能够有效使用的几何体、材质和工作流类型受限。
硬件光线追踪(Hardware Ray Tracing)支持更大范围的几何体类型,通过追踪三角形并评估光线命中点上的光照来提供高画质,不会像表面缓存那样提供较低的画质。 需要具有支持此功能的显卡和系统才能运行。
软件光线追踪在具有大量重叠实例的场景中是唯一高性能的选项,而硬件光线追踪是唯一能够在表面上实现高质量镜面反射的方法。
软件光线追踪
对于有向距离场,Lumen会默认使用软件光线追踪模式。 任何支持Shader Model 6(SM6)的硬件都支持这种追踪表示,只需要在项目设置中启用生成网格体距离场(Generate Mesh Distance Fields)。 渲染器会把网格体距离场并入全局距离场,以加速追踪。 默认情况下,Lumen追踪每个网格体的距离场一到两米,以获得准确度,并针对此距离之外的每道光线追踪合并后的全局距离场。
具有极端重叠实例的项目可以通过项目设置中的软件光线追踪模式(Software Ray Tracing Mode)控制Lumen使用的方法。 Lumen提供的两种选项供你选择:
细节追踪(Detail Tracing)会追踪单个网格体的有向距离场,以获得最高质量。 前两米用于获得准确度,而对此距离之外的每道光线则使用全局距离场。 这种方法在通过拼装改造方式构建的关卡中开销极高。
全局追踪(Global Tracing)仅对每道光线进行全局距离场追踪,以获得最快的追踪速度。 这是引擎的默认设置。
当摄像机在场景中移动时,网格体距离场会根据距离流送进来和流送出去。 它们被打包到单个图集中来进行光线追踪。
使用命令r.DistanceFields.LogAtlasStats 1将网格体距离场统计数据输出到日志中。
Lumen软件光线追踪的质量取决于网格体距离场呈现的质量。 系统提供两种可视化选项,一种适用于网格体距离场(Mesh DistanceFields),另一种适用于全局距离场(Global DistanceField)。 这些可视化模式可以在视口的显示(Show) > 可视化(Visualize)菜单中找到。
场景视图 | 网格体距离场可视化(Mesh Distance Fields Visualization) | 全局距离场可视化(Global Distance Field Visualization) |
对于部分网格体,较薄的表面可能没有良好的距离场呈现,并且可能导致光线泄漏。 网格体距离场可视化有助于帮助你发现这类问题。要特别注意窗口网格体的质量,它们会对室内亮度产生巨大影响。
(从左到右)三角形网格体、距离场分辨率缩放1.0(默认)、1.5、2.0
有两种方法可以改进网格体距离场的呈现:
项目可以通过项目设置中的距离场体素密度(Distance Field Voxel Density),全局提高网格体距离场的质量。
通过静态网格体编辑器中的编译设置(Build Settings),提高需要更高质量的单个网格体的距离场分辨率缩放(Distance Field Resolution Scale)。
提高距离场分辨率或密度将增加项目的磁盘占用。
软件光线追踪的限制
在项目中使用软件光线追踪时将会受到一些限制,它当前支持的几何体和材质类型也受到限制。
几何体限制:
只有静态网格体、实例化静态网格体、分层实例化静态网格体和地形地貌能够在Lumen场景中呈现。
必须在植被工具设置中设置影响距离场光照(Affect Distance Field Lighting)才能启用植被。
材质限制:
不支持世界位置偏移(WPO)。
半透明材质作为Lumen卡片添加,以在Lumen使用反射命中光照(Hit Lighting for Reflections)模式时,接收漫反射全局光照。
距离场是使用分配到静态网格体资产的材质属性构建的,而不是重载组件中的属性。
重载具有不同混合模式或启用双面属性的材质将导致三角形表示和网格的距离场表示不匹配。
工作流程限制:
软件光线追踪要求关卡由模块化几何体组成。 墙壁、地板和天花板等物体应该是单独的网格体。 大型的单个网格体,例如山峰或多层大楼,将会具有较差的距离场呈现,可能会导致出现自遮蔽瑕疵。
壁厚度不能少于10厘米,以避免光线泄漏。
距离场不能呈现非常薄的特性,也不能呈现单面的网格体的后视效果。 如果可以确保查看者看不到单侧网格体的三角形背面或仅使用封闭的几何体,就可以避免这些类型的瑕疵。
网格体距离场分辨率根据导入的静态网格体缩放进行分配。
导入时非常小并随后在组件上放大的网格体将无法拥有充足的距离场分辨率。 如果在关卡中放置的实例上进行缩放,则应该根据静态网格体编辑器的构建设置来设置距离场分辨率。
硬件光线追踪
硬件光线追踪支持的几何体类型比使用软件光线追踪时要多,尤其是硬件光线追踪模式支持追踪蒙皮网格体。 硬件光线追踪还能更好地扩展到更高的质量——它与实际三角形相交,还可以选择在光线接触时评估光照,而不是低质量的表面缓存。
要使用高质量命中光照,必须在项目设置的引擎(Engine) > 渲染(Rendering)中启用以下功能:
支持硬件光线追踪(Support Hardware Ray Tracing):已启用
在可用时使用硬件光线追踪(Use Hardware Ray Tracing when available):已启用
光线光照模式(Ray Lighting Mode):反射命中光照(Hit Lighting for Reflections)
虽然硬件光线追踪在两种光线追踪方法中可以提供最高质量,但在大型场景中也具有最高的设置成本,它会导致在具有大量重叠的网格体时变得非常昂贵。 它可以动态地使网格体(例如蒙皮网格体)变形,并需要较高的成本来更新每帧的光线追踪加速结构,成本与蒙皮三角形的数量成正比。 如需进一步了解硬件光线追踪的设置和开销,请参阅光线追踪性能指南。
对于启用Nanite的静态网格体,硬件光线追踪模式可以使用Nanite几何体或回退网格体。 回退网格体是由回退相关错误(Fallback Relative Error)属性生成的网格体,在无法提供完整细节网格体时使用。 这些回退网格体可以通过关卡视口中的显示(Show) > 高级(Advanced) > Nanite网格体(Nanite Meshes)可视化。
屏幕追踪可以遮盖Nanite渲染的全三角形网格体和Lumen执行光线追踪的退却网格体之间的不一致。 但是在某些情况下,不一致情况过于严重,无法隐藏。 在这种情况下,发出退却相关错误可以减少不正确的自相交瑕疵。
在以下情况中,Lumen将使用硬件光线追踪:
该项目启用了支持硬件光线追踪和在可用时使用硬件光线追踪。
更改初始设置需要重新启动引擎。
该项目在支持的操作系统、RHI和显卡上运行。 目前只有以下平台支持高性能的硬件光线追踪:
采用DirectX 12的Windows 10
显卡必须是NVIDIA RTX-2000系列及更高配置,或AMD RX 6000系列及更高配置。
PlayStation 5
Xbox Series S / X
Switch 2
针对Lumen使用硬件光线追踪的项目在必要时可能还是要退而采用软件光线追踪,但不需要同时占用这两者的内存成本和场景更新成本。 在这种情况下,应该将以下控制台变量添加到你的DefaultEngine.ini配置文件中。
r.DistanceFields.SupportEvenIfHardwareRayTracingSupported=0禁用此设置之后,将无法在运行时切换在可用时使用硬件光线追踪。
大型世界
Lumen场景在摄像机周围的世界中运行,从而实现大型世界和流送。 Lumen依靠Nanite的细节级别(LOD)和多视图栅格化来进行快速的场景捕获,从而维持表面缓存,并对所有操作进行节流,以防止卡顿。 Lumen不要求Nanite必须运行,但Lumen的场景捕获在具有大量多边形网格体但未启用Nanite的场景中将会变得非常缓慢。 如果没有为资产配置良好的LOD,那么这个问题在场景中尤其严重。
摄像机快速移动将会导致Lumen场景更新跟不上摄像机的位置变化,导致在追上摄像机时突然出现间接光照。
当Lumen使用软件光线追踪时,Lumen场景仅覆盖从摄像机位置开始的200米范围,但在后期处理体积中设置Lumen场景视野距离(Lumen Scene View Distance)后,该距离可以增加到800米。 超过最远Lumen场景距离之后,则全局光照只能使用屏幕追踪。
远场
Lumen硬件光线追踪实施了远场(Far Field)追踪,默认可以将Lumen全局光照和反射扩展到距离摄像机一千米的范围。
远场追踪通过DefaultEngine.ini配置文件中的控制台变量r.LumenScene.FarField=1启用,并且需要使用世界分区的分层细节级别(HLOD)。 远场要求使用构建的HLOD1。
启用远场后,从最大追踪距离(Max Trace Distance)(默认为200米)开始追踪,一直延伸到r.LumenScene.FarField.MaxtraceDistance(默认值为1千米)。 由于可以使用r.RayTracing.Culling.Radius从光线追踪中剔除对象,因此项目可能会要求剔除半径和最大追踪距离相匹配。 否则,远场遍历点之前的近场(从摄像机到最大追踪距离的object)可能会被剔除,这会导致覆盖范围中留下空隙。
Lumen功能的一般性限制
Lumen的平台支持
Lumen不支持前几代主机,例如PlayStation 4和Xbox One。
依赖动态光照的项目可以在这些平台和旧版PC硬件上结合距离场环境光遮蔽使用。
Lumen专为次世代主机(PlayStation 5、Xbox Series S/X和Switch 2)和高端PC而开发。 Lumen有两种光线追踪模式,每种都有不同的要求。
软件光线追踪要求:
显卡使用支持Shader Model 6(SM6)的DirectX 12
要求NVIDIA GeForce GTX-1070或更高级别的显卡。
Lumen支持Android Vulkan,可以在移动渲染器上使用。 在不支持的移动平台上使用动态光照的游戏,需要使用无阴影的天空光照。
Lumen目前不支持虚拟现实(VR)系统。 尽管它可以支持VR,但VR所要求的高帧率和高分辨率会使动态全局光照的拟合效果不佳。
硬件光线追踪要求:
支持DirectX 12的Windows 10,或支持Vulkan的Linux。
显卡必须是NVIDIA RTX-2000系列及更高配置,或AMD RX 6000系列及更高配置。
Lumen可视化选项
Lumen在虚幻编辑器中提供了几种可以用来可视化数据的方法,对于检验Lumen如何照亮场景并排除问题很有帮助。
Lumen的主要视图模式可以在关卡视口的视图模式菜单下找到。
总览(Overview)在渲染后的场景上以小图块的形式显示Lumen的三种可视化视图。
Lumen场景(Lumen Scene)以可用的最高质量显示Lumen的场景版本:表面缓存或硬件光线追踪。
几何体法线(Geometry Normals)会显示几何体的法线,使全局距离场(软件光线追踪)或Nanite回退网格体(硬件光线追踪)的问题更容易被发现。
反射视图(Reflection View)显示Lumen反射呈现出的场景,包括反射所使用的有限追踪距离。
表面缓存(Surface Cache)与Lumen场景相同,区别在于:因为过于复杂而难以覆盖的网格体区域将以粉色突出显示。
其他可视化方法可以在关卡视口的显示(Show) > 可视化(Visualize)菜单中设置。
场景视图 | 网格体距离场可视化(Mesh Distance Fields Visualization) | 全局距离场可视化(Global Distance Field Visualization) |
网格体距离场(Mesh Distance Fields)会显示组成场景的单个网格体的有向距离场表示。
全局距离场(Global Distance Field)会显示已合并单个网格体距离场的低细节距离场。 此外还有一些可以用来可视化其他数据的控制台命令,都可以用于Lumen:
Lumen的卡片放置(Card Placement)可以查看场景中如何使用捕获位置(称为卡片)。 这些卡是针对每个网格体脱机生成的,用于从多个角度捕获每个网格体的材质属性。 使用
r.Lumen.Visualize.CardPlacement 1启用该可视化模式。硬件光线追踪使用Nanite回退网格体,此类网格体由静态网格体资产的回退相关错误属性生成。 退却网格体用于覆盖Lumen反射中的场景追踪和Nanite光线追踪场景之间的不匹配之处。 通过显示(Show) > 高级(Advanced) > Nanite网格体(Nanite Meshes)禁用Nanite渲染,并查看Lumen使用的回退网格体。
故障排除主题
在对场景中任何与Lumen有关的问题进行故障排除时,建议从Lumen总览视图模式开始。
Lumen场景应该以能够显著影响间接光照的方法来匹配主场景视图。 Lumen表面缓存视图模式中高亮的粉色区域应通过在静态网格体设置中提高最大Lumen网格体卡的数量来解决,或者将网格体分割成多个部分。
引发问题的网格体
如果使用会导致问题的网格体来影响间接光照,可以通过关卡实例的细节(Details)面板禁用以下功能之一,从而在Lumen场景中移除这些网格体:
对于软件光线追踪,取消选中影响距离场光照(Affect Distance Field Lighting)的复选框即可移除它们。
对于硬件光线追踪,取消选中光线追踪中可见(Visible in Ray Tracing)的复选框即可移除它们。
问题:室内镜面反射中发现斑点瑕疵
镜面反射中出现斑点瑕疵是因为Lumen使用非常低的质量设置来计算多次弹射全局光照,因为没有足够的预算来支持该计算。 在后期处理(Post Process)设置中,提高Lumen场景质量(Lumen Scene Quality)即可减少瑕疵。
问题:小网格体在镜面反射中显示黑色
小网格体在镜面反射中显示为黑色,是因为Lumen从Lumen场景中剔除了小object以提高性能。 在后期处理设置中,提高Lumen场景细节(Lumen Scene Detail)即可捕获远距离处的小网格体。
问题:天空遮蔽和全局光照在200米处消失
天空遮蔽和全局观照只能维持在Lumen场景的最初200米内。 在后期处理设置中,提高Lumen场景视野距离(Lumen Scene View Distance)即可维持远距离的Lumen场景。
问题:大型洞穴式区域中发生光线泄漏
在洞穴式或封闭的区域中,如果发生光线泄漏,是因为Lumen限制了光线追踪距离以提高性能,但缺少遮挡物会导致光线泄漏。
在后期处理设置中,提高Lumen场景细节和最大追踪距离。
例如,下面的网格体是从外面看不到孔的封闭式盒子。
在盒子中,可以看到天空光照在场景中泄露了出来。
提高以下值:
Lumen场景视野距离
最大追踪距离
光线泄漏问题现在应该已经解决。
问题:光照变化传播到全局光照的速度太慢
在改变Lumen全局光照或将其关闭时,场景中的光照变化太慢,从而导致光线看起来是在慢慢变淡,而不是快速亮起或熄灭。
例如,关闭以下场景中的天空光照,就会看到光照慢慢淡出。
通过提升后期处理体积(Post Process Volume)设置中的最终采集光照更新速度(Final Gather Lighting Update Speed),即可提升Lumen全局光照变化的速度。
可以看到天空光照熄灭的速度比以前更快。
请记得在更改之后将这些设置恢复成默认值,以降低光照成本。
问题:小型发光网格体无法一致地照亮场景
小Object被剔除出Lumen场景,仅保留场景追踪来捕捉小型发光网格体。 这就导致场景光照中出现不一致。 在细节(Details)面板中设置关卡实例自发光光源(Emissive Light Source)。
问题:希望牺牲性能来获得最高质量的镜面反射
默认情况下,Lumen使用表面缓存来照亮反射光线,因为这样可以更快地进行渲染。 但是,通过设置以下选项,可以配置亮度来评估击中点上的光线:
在项目设置中,将光线光照模式设置为反射命中光照。
这将改变整个项目的光照。
在后期处理体积中,将光线光照模式设置为反射命中光照。
非常适合仅需为单个镜头或视点做局部调整的情形。
在下面的示例场景中,注意墙壁和台阶上的高光度高光是如何在反射中消失的。