返回行业情报

Lumen降噪不损光照质量的UE5技巧

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

环境美术师Aleksander Goryachev分享其UE5项目《后苏联医院》中解决Lumen噪点与伪影的实战经验。他通过放弃方向光与天光、用自发光平面+矩形光+聚光灯模拟窗户、关闭Screen Space Traces、禁用Affect Indirect Lighting及使用假间接光等手段,在不牺牲光照质量的前提下有效抑制噪点。

深度解读

在虚幻引擎5中用Lumen做室内照明,想压低噪点又不牺牲光照质量,最有效的做法不是把渲染质量拉满,而是从光源结构、自发光材质和屏幕空间追踪三个源头同时做减法。

先理解这位作者是谁,以及他为什么有资格谈这件事

Aleksander Goryachev是一名关卡设计师,过去一年在做他的第一个大型单人项目《Post-Soviet Hospital》——一个还原2010年代初东欧医院氛围的写实环境。这个项目的一楼被设计成五个主题区域的巨大综合体,目前已完成四个:Laboratory(实验室)、Laundry(洗衣房)、Cabinets(诊室)、Hallway(走廊),Kitchen(厨房)即将开工。

这个项目有个关键约束:它是作为Fab数字市场上的游戏资产包来做的,目标用户期望"开箱即用"的干净画面,明确排除了第三方内容(比如Megascans)或插件的集成。这意味着他必须自己走完整个开发管线,而且把"节省工时以保证盈利"设为核心任务。正是这个商业约束,逼出了他后面所有的技术取舍——他没有无限预算去堆渲染质量,必须在标准UE5工具范围内找出一条既干净又省算力的路。

你不能靠过高的渲染质量设置或深度干预引擎本身来解决噪点问题。

第一步:彻底砍掉定向光和天空光

对主关卡,他做了一个根本性决定:完全放弃Directional Light和Sky Light。

原因是封闭室内场景里,标准室外光会逼你在房间周围搭建一圈盲盒式的技术立方体(Lumen blockers)来防止模块接缝处的漏光。直接关掉全局光源,系统性地解决了这个问题,同时降低了整体渲染负载。

自然光改用一组局部光源模拟:

- Self-illuminating plane(自发光平面):窗口开口处放一个带自发光材质的平面来模拟天空。关键操作是关掉它的Affect Indirect Lighting参数,防止发光材质产生不可控的Lumen噪点。 - Rect Light(矩形光):放在室内玻璃前方的矩形光源,负责向房间深处提供柔和的补光(环境反弹)。 - Spot Light(聚光灯):作为独立物体放在场景中的定向光源,赋予一个遮罩材质(Light Function)来把窗框的锐利阴影投射到办公室地板上。

这里有个必须记住的性能警告:面光源(Rect Light)对GPU负载很高。在实际游戏场景中要极度谨慎使用,尽可能只保留不带阴影的版本。如果性能预算紧张,或者工作在Software Ray Tracing模式下,就用一个宽锥角的Spot Light加窗框的Light Function遮罩来替代。代价是失去视觉上柔和、物理正确的区域光散射(area light bounce),补光会变得更硬、更平、更有方向性。

第二步:处理自发光材质的噪点

用自发光材质时,产生噪点的关键因素是亮度和表面积——这适用于任何物体:窗口平面、灯罩、仪器屏幕等等。

如果Static Mesh上开启了Affect Indirect Lighting参数,Lumen会把它的几何体当作物理光源纳入全局光照计算(Surface Cache)。对复杂发光物体做精细的软间接光计算需要海量光线,算力不够时全局光照里就会出现混乱沸腾的噪点。

大多数情况下更好的做法是关掉Static Mesh设置里的Affect Indirect Lighting,把该物体的几何体完全排除出Lumen GI的全局计算。作者在X光屏幕的例子中就放弃了真实发光,改用Rect Light替代。

但即便关掉这个参数,明亮物体在与其他表面交界处仍会持续产生强烈的局部噪点。因为发光网格仍然被渲染到屏幕上,它的高亮像素进入帧缓冲(Scene Color),然后被Screen Space Traces算法读取——这就是下一个噪点源头。

第三步:关掉屏幕空间追踪,这是室内去噪的关键一刀

在室内彻底消除噪点,最终靠的是在Post Process Volume设置里禁用Screen Space Traces功能。这个算法恰恰是矩形光源(Rect Light)噪点的来源。具体机制有四条:

随机采样(Stochastic sampling):面光源和自发光材质通过随机抖动计算,每帧追踪方向都在变,产生闪烁,降噪器把它变成电视下方和玻璃砖附近缓慢漂浮的斑点。

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

Scene Color动态:如果自发光物体是动画的(比如电视屏幕上的视频),它在Scene Color中的亮度不断变化,算法立刻为新帧缓冲值重算反射,在地面和墙上制造混乱噪点。

隐藏几何体(动态遮挡):相机移动时,发光物体被其他网格遮挡或移出屏幕,算法瞬间丢失Scene Color缓冲中的光源信息,造成降噪器来不及补偿的亮度闪变和塌陷。

于是他决定在当前关卡的Post Process Volume里禁用Screen Space Traces。阴影区域的轻微对比度损失,很容易通过Post Process Volume设置补偿回来。

但在另一个带室外Directional Light照明的模块化关卡里,禁用Screen Traces是致命的:场景会丢失大量间接光,阴影中的墙面变得扁平。两套管线的对比他放在单独一节讲。

如果必须保留屏幕空间的间接光又要降低噪点,可以改追踪方式:在Project Settings → Rendering → Lumen菜单里,把Screen Tracing Source参数从Scene Color切换到Antialiased Scene Color。这会降低噪点水平,但不能彻底解决问题。

第四步:别指望Lumen包办间接光,该造假就造假

完全依赖Lumen做间接光传播,往往得到不满意的视觉结果。光源的Indirect Lighting Intensity参数值越高,场景噪点越强,明暗对比损失越明显。

这个问题在试图照亮深层嵌套房间(room-within-a-room布局)时变得致命。提高间接光倍数会成比例放大Lumen随机采样中的数学误差(方差/variance)。降噪器处理不了亮暗样本之间增大的差异,导致像素沸腾。此外,过量的间接光会淹没深角落和几何接缝,剥夺场景自然的接触阴影。

所以他的思路是引入Light Fakes(假间接光源)来手动补光,而不是把Indirect Lighting Intensity往上推。原文在这里被截断,但整条管线的逻辑已经完整:从全局光源结构,到自发光材质的参数开关,到屏幕空间追踪的取舍,再到间接光强度的克制——每一步都是在"减少Lumen需要随机计算的东西",而不是"提高Lumen计算的质量"。

这对从业者意味着什么

这篇文章真正的价值不在于某个具体参数,而在于它揭示了一条被很多人忽略的优化哲学:Lumen噪点的根源是随机采样方差,而降噪器只能处理有限方差。你越是让Lumen去计算复杂发光体、大面光源、深层嵌套空间的间接光,方差就越大,降噪器就越力不从心,画面就越沸腾。

Goryachev的解法是系统性地把计算负担从Lumen身上卸下来,转移到确定性的、可预测的传统手段上:用Spot Light加Light Function替代Rect Light,用假光源替代真实间接光反弹,用关闭Screen Space Traces替代与噪点搏斗。

对做写实室内场景的关卡设计师和灯光师来说,这套管线的直接启示是:在项目早期就决定光源结构,别等到噪点爆炸了再去调参数。对做资产包卖给Fab这类市场的开发者来说,更重要的启示是——"开箱即用"的干净画面不是靠高端显卡堆出来的,而是靠对引擎计算边界的清醒认识换来的。Goryachev把"节省工时以保证盈利"设为关键任务,这套去噪管线本质上就是他的盈利策略:用结构性的减法,替代无底洞式的质量堆叠。

其
学习分享Unreal EngineLumen光照噪点抑制环境美术