用标准工具压制 Lumen 噪点:UE5 封闭室内光照搭建实录

AI3D 发表于 10-02 浏览 14 分类 创作分享

Suppressing Noise Without Sacrificing Lighting Quality When Using Unreal Engine's Lumen

简介

过去一年,我一直在开发我的第一个大型个人项目——《后苏联医院》。这是一个写实环境,传达出 2010 年代初东欧医院的气氛。一楼被设计成一个由五个主题区域组成的庞大综合体。目前已经完成了四个:实验室、洗衣房、诊室和走廊。厨房区域的开发即将开始,以彻底完成整个关卡。

Suppressing Noise Without Sacrificing Lighting Quality When Using Unreal Engine's Lumen
Suppressing Noise Without Sacrificing Lighting Quality When Using Unreal Engine's Lumen
Suppressing Noise Without Sacrificing Lighting Quality When Using Unreal Engine's Lumen
Suppressing Noise Without Sacrificing Lighting Quality When Using Unreal Engine's Lumen
Suppressing Noise Without Sacrificing Lighting Quality When Using Unreal Engine's Lumen
Suppressing Noise Without Sacrificing Lighting Quality When Using Unreal Engine's Lumen
Suppressing Noise Without Sacrificing Lighting Quality When Using Unreal Engine's Lumen

该项目正在作为Fab数字市场的一款游戏资产包进行制作。目标受众期望获得“开箱即用”的清晰画面。排除集成第三方内容(例如Megascans)或插件。实现如此规模的内容需要自行完成整个开发流程。我为自己设定了一个关键任务–节省工作时间以确保盈利能力。

这里你可以阅读我今年早些时候为80 Level所做的项目解析。

主要技术挑战之一是与Lumen伪影和噪点相关的问题。你无法通过过高的渲染质量设置或深度干预引擎本身来解决噪点问题。在本文中,我们将探讨使用标准虚幻引擎5工具对抗渲染伪影的实用方法。

Lumen 噪点抑制流程

封闭关卡的光照结构与假窗户

对于《后苏联医院》项目的主关卡,我做出了一个根本性的决定:彻底舍弃 Directional Light(定向光)与 Sky Light(天光)。在封闭的室内环境中,标准的室外光照会迫使你在房间周围搭建由技术性立方体构成的封闭外壳(Lumen 阻挡体),以避免模块接缝处出现漏光。禁用全局光源可以从根本上解决这一问题,并降低整体渲染负载。

Suppressing Noise Without Sacrificing Lighting Quality When Using Unreal Engine's Lumen

窗户透入的自然光由一组局部光源模拟:

  • 自发光平面:在窗户开口处放置一个带有自发光材质的平面,用来模拟天空。在其上禁用 Affect Indirect Lighting(影响间接光照)参数,这样发光材质就不会产生无法控制的 Lumen 噪点。
  • 矩形光(Rect Light):位于室内玻璃前方的一个矩形光源。它负责向房间深处提供柔和的补光(环境反弹光)。
  • 聚光灯(Spot Light):作为独立对象放置在场景中的方向性光源。为其指定了一个遮罩材质(Light Function),用于将窗框的锐利阴影投射到办公室地板上。

值得注意的 是,区域光源(Rect Light)会给 GPU 带来很高的负载。在游戏场景中,应极为谨慎地使用它们,并且如果可能的话,只在无阴影的情况下使用。在性能预算紧张或使用软件光线追踪(Software Ray Tracing)模式时,它们会被替换为一个具有宽锥角的聚光灯(Spot Light)以及窗户框架的光照遮罩(Light Function)。在视觉上,光线在整个区域上柔和、物理正确的散射(区域光反弹)丢失了 – 补光变得更硬、更平、更有方向性。

自发光材质的噪点

在使用自发光材质(emissive materials)时,噪点产生的关键因素在于其亮度和表面积大小。这适用于任何类型的物体:窗户平面、灯罩、仪表屏幕等。

如果在静态网格体(Static Mesh)上启用了 Affect Indirect Lighting(影响间接光照)参数,Lumen 就会将其几何体作为物理光源来计算,用于 Lumen 全局光照(Surface Cache 表面缓存)。对复杂发光物体所产生的柔和间接光进行精细计算,需要数量极其庞大的光线。当场景中计算能力不足时,全局光照中就会出现混乱的、沸腾般的噪点。

在大多数情况下,最好在静态网格体(Static Mesh)设置中禁用“影响间接光照”(Affect Indirect Lighting)。这会将该对象的几何体完全排除在 Lumen GI 的全局计算之外。在下面的示例中,我选择不添加 X-Ray 屏幕的真实辉光,而是改用矩形光源(Rect Light)。

但即使禁用了此参数,明亮物体在与其它表面相接的位置仍会持续产生强烈的局部噪点。发光网格体依然会被渲染到屏幕上,其明亮像素最终进入帧缓冲区(Scene Color,场景颜色),而屏幕空间追踪(Screen Space Traces)算法正是从该缓冲区中读取这些像素的。

屏幕空间追踪产生的噪点

正如自发光材质的示例中所见,通过在后处理体积(Post Process Volume)设置中禁用屏幕空间追踪(Screen Space Traces)功能,就能完全消除室内的噪点。而在使用矩形光源(Rect Light)时,这同一套算法却会成为噪点的来源。

随机采样:面光源(Rect Light)和自发光材质通过随机抖动进行计算。由于逐帧的追踪方向变化,会产生闪烁,降噪器会将其变成电视下方和玻璃块附近缓慢漂浮的斑点。

子像素抖动(TAA/TSR 抖动):时间抗锯齿每帧将相机投影偏移若干个像素分之一。这会导致帧缓冲区中几何接缝处亮像素的坐标发生微观变化,使得即使相机静止,角落和缝隙也会沸腾。

场景颜色动态:如果自发光物体有动画(例如电视屏幕上的视频),它在场景颜色中的亮度会不断变化。算法会立即针对新的帧缓冲值重新计算反射,从而在地面和墙壁上产生混乱的噪点。

隐藏几何体(动态中的遮挡):移动相机时,发光物体会被其他网格遮挡或移出屏幕。算法会立即从场景颜色缓冲区中丢失源信息,导致降噪器来不及补偿的亮度突变和骤降。

因此,我决定放弃屏幕空间追踪,在当前关卡的后期处理体积(Post Process Volume)设置中将其禁用。与此同时,阴影区域中轻微的对比度损失可以很容易地通过后期处理体积设置来补偿。

在另一个采用室外 Directional Light 照明的模块化关卡中,禁用 Screen Traces 至关重要:场景会损失大量间接光,处于阴影中的墙面会变得平淡。这两套流程的对比会在单独小节中提供。

Suppressing Noise Without Sacrificing Lighting Quality When Using Unreal Engine's Lumen

如果你需要在更低噪点水平下保留来自屏幕空间的间接光,可以更改追踪方法。在 Project Settings → Rendering → Lumen 菜单中,将 Screen Tracing Source 参数从 Scene Color 切换为 Antialiased Scene Color。这会降低噪点水平,但无法完全解决噪点问题。

伪造间接光源(Light Fakes)

试图完全依赖 Lumen 进行间接光传播,往往会得到不理想的视觉结果。光源的 Indirect Lighting Intensity 参数值越高,场景的噪点就越强,明暗对比的损失也越明显。当试图照亮深层嵌套房间(room-within-a-room 布局)时,这一问题会变得尤为突出。

提高间接光乘数会按比例增加 Lumen 随机采样中的数学误差(方差)。降噪器无法应对亮暗采样之间增大的差异,从而导致像素沸腾。此外,过量的间接光会涌满深处角落和几何体接缝,使场景失去自然的接触阴影。

为了在不出现 Lumen 噪点的情况下营造干净且富有艺术感的外观,我使用了手动放置的伪造局部光源:

光线穿过玻璃砖:当光线从带窗户的明亮外间透过玻璃砖墙传递到黑暗内间时,Lumen 无法实时正确计算透射。为了优化性能,在黑暗房间一侧靠近墙体的位置,额外安装了一个禁用阴影(Cast Shadows)的 Rect Light 光源。它模拟一束仿佛穿过玻璃砖的柔和光线,提供稳定的补光,同时不会让外间主光源的 间接光照 强度拉满。

Suppressing Noise Without Sacrificing Lighting Quality When Using Unreal Engine's Lumen
Suppressing Noise Without Sacrificing Lighting Quality When Using Unreal Engine's Lumen

深层走廊的背景照明:通过敞开门洞的自然光线再反射来照亮狭长且处于阴影中的走廊,会产生强烈的高频噪点。在黑暗走廊深处,安装一个较暗的辅助 Point Light 光源,并设置较高的 Source Radius。为获得最高渲染效率,相关设置已优化:完全禁用 Cast Shadows 功能,将 Indirect Lighting Intensity 参数设为 0,并完全关闭 Affect Indirect Lighting 参数。这样可产生廉价的直接光照,用来模拟来自相邻房间的深层光线反弹。

Suppressing Noise Without Sacrificing Lighting Quality When Using Unreal Engine's Lumen
Suppressing Noise Without Sacrificing Lighting Quality When Using Unreal Engine's Lumen

设置天花板灯具和人工照明:带有自发光材质(发光材质)的天花板灯具需要精细调整,以避免灯罩发光的塑料在天花板上产生噪点。根据性能预算,可以采用以下三种方法之一:

1. 组合方法(主要):灯罩上的 Affect Indirect Lighting 参数保持启用。来自发光材质的局部噪点会被安装在灯罩正下方的明亮物理点光源完全掩盖。点光源的直接光照直接过曝并掩盖 Lumen 噪点,使其对玩家不可见。

Suppressing Noise Without Sacrificing Lighting Quality When Using Unreal Engine's Lumen

2. 非发光方法:在灯罩的静态网格体设置中完全禁用 Affect Indirect Lighting 参数。环境照明的角色 100% 转移给其下方的点光源。这种方法保证灯具周围完全没有 Lumen GI 噪点。

Suppressing Noise Without Sacrificing Lighting Quality When Using Unreal Engine's Lumen

3. 经济方法(用于节省性能):如果场景中点光源过多,可以在灯具下方放置一个廉价的、宽锥角向下的聚光灯作为主要补光。同时,在灯罩内部直接保留一个具有最小衰减半径的点光源。它不照亮场景,只执行一项任务:突出灯罩本身,并抑制灯具与天花板接触点处的噪点。

Suppressing Noise Without Sacrificing Lighting Quality When Using Unreal Engine's Lumen

暗区和边框的局部照明:狭窄开口(如门上的玻璃)和物体的内部边框(如电视的塑料边框)在使用矩形光源时会陷入深阴影,或在几何体接缝处产生强烈噪点。在边框或屏幕附近安装一个微弱的补偿性点光源,可以照亮电视自身外壳的部件或门洞周围的墙壁。这模拟了光线的柔和散射,并掩盖了局部噪点,而无需计算狭窄缝隙中的复杂反射。

Suppressing Noise Without Sacrificing Lighting Quality When Using Unreal Engine's Lumen
Suppressing Noise Without Sacrificing Lighting Quality When Using Unreal Engine's Lumen
Suppressing Noise Without Sacrificing Lighting Quality When Using Unreal Engine's Lumen
Suppressing Noise Without Sacrificing Lighting Quality When Using Unreal Engine's Lumen

通过控制台变量进行配置

仅通过增加采样数和光线数(最终聚集、光线方向)来去除噪点的尝试会严重降低性能,在实际项目中不可用。更有效的方法是配置时域累积,迫使算法从先前帧中获取数据,而不是在当前帧中进行暴力计算。关于稳定性的详细解析在 Epic Games 指南中有描述。

抑制无法通过局部放置光源消除的残留噪点的主要工具,是修改帧累积限制:

r.Lumen.ScreenProbeGather.Temporal.MaxFramesAccumulated 16(默认值:10)

实际参数选择:该变量向 Screen Probe Gather 算法指定可用于过滤当前帧噪点的最大历史帧数。根据实际测试,对于节奏稳定的封闭医院关卡,时域抗锯齿和画面稳定性的理想平衡点正好在数值 16 处实现。

进一步增加该参数不会带来画面明显改善,也不会在抑制残留噪点方面产生预期效果,但可能导致显存(VRAM)消耗过多。开发人员应用此设置时需要理解其中的权衡——动态场景中出现拖影的风险。

一个项目中的两条管线对比

在开发 Post-Soviet Hospital 项目的框架内,实施了两套在几何建模与光照计算方面根本不同的方法。第一种方法用于医院主要的封闭关卡。它基于单一无缝房间的概念(一个办公室即为一个单一网格)以及手动放置局部光照假体。此处完全禁用了屏幕空间追踪(Screen Space Traces)功能。

第二种方法在模块化构造器(Modular Kit)的演示关卡中实现。该套件是为响应众多 Fab 用户的需求而开发的,这些用户并不专门从事关卡美术,但需要快速组装自己独特的布局。

为确保开箱即用的流畅组装,做出了以下架构决策:

  • 精确吸附与几何厚度:所有模块化墙块均以较高的物理厚度创建。这样做专门是为了 Lumen,以防止在块接缝处出现漏光,并确保正确的 Lumen 网格卡片生成;
  • 默认环境:模块化关卡场景被设计为在标准 Epic Games 模板中运行,使用一组基础全局光照(方向光、天空光、天空盒),且不改动任何内部参数;
  • 易于设置:用户无需使用控制台变量,也无需构建复杂的假光源链。只需组装一个房间,在天花板灯具下安装一个点光源,即可获得开箱即用的结果;
  • 简单化的代价:使用默认管线而不进行精细手动调整的代价是,间接光照的深层区域中 Lumen 噪点水平会升高。

表中给出了两个管线的技术参数对比:

Suppressing Noise Without Sacrificing Lighting Quality When Using Unreal Engine's Lumen

结论

Lumen 的降噪流程建立在对该引擎硬件限制的理解之上。与其简单地提高渲染设置——这不可避免地会降低帧率——不如通过三个要素来获得干净的结果:房间几何体的正确拓扑结构、对时域滤波器的精细调整,以及手动放置假光源。这种混合方法使得即使在复杂的封闭室内场景中,也能开箱即用地获得可预测、富有艺术感且高质量的渲染结果。

如果你想自己动手尝试,可以在 Fab 上获取该场景中的资产。

Aleksandr Goryachev,环境与关卡设计师

采访由 Emma Collins 进行

相关链接

原文链接:https://80.lv/articles/suppressing-noise-without-sacrificing-lighting-quality-when-using-unreal-engine-s-lumen

喜欢这篇内容吗?