引言

在虚幻引擎 5 中,大气雾(Atmospheric Fog)绝不仅仅是一个”让远处变蓝”的视觉开关。它是一套基于物理的参与介质(Participating Media)渲染系统,其核心是大气散射模型。当我们调整一个参数——比如”大气密度(Atmospheric Density)”——背后发生的是对辐射传输方程(Radiative Transfer Equation, RTE)中消光系数(Extinction Coefficient)的修改。本文将从底层算法出发,拆解 UE5 大气雾如何通过瑞利散射(Rayleigh Scattering)与米氏散射(Mie Scattering)的数学叠加,最终在屏幕上呈现出我们所见的天空色与雾气层次。

UE5 大气雾:从散射方程到天空呈色的原理拆解 - 配图1
UE5 大气雾:从散射方程到天空呈色的原理拆解

现象:为什么雾气是蓝色的,而日落是红色的?

一个常见现象是:晴天时,地平线附近的雾气偏白,而头顶天空更蓝;日落时,地平线呈橙红色,而头顶仍是蓝色。这些现象不是美术调色的结果,而是大气散射的波长选择性导致的。UE5 大气雾的默认参数中,瑞利散射系数(RayleighScattering)的 RGB 值设置为 (0.002545, 0.004476, 0.01318)——注意蓝色分量几乎是红色的 5 倍。这意味着蓝光在传播中更容易被散射,而红光则更容易直线穿透。这一组系数的来源,正是物理学家瑞利在 19 世纪提出的散射截面公式:σ(λ) ∝ 1/λ⁴。波长越短,散射越强。

原理:辐射传输方程与大气散射模型

要理解 UE5 如何渲染大气,必须回到体积渲染的基本方程——辐射传输方程:
dL(x,ω)/dx = -σₜ(x)·L(x,ω) + σₛ(x)·∫p(ω,ω’)·L(x,ω’)dω’ + ε(x,ω)
其中,σₜ 为消光系数(吸收+散射),σₛ 为散射系数,p 为相位函数,ε 为自发光项。UE5 的大气雾简化了该方程,假设介质均匀且忽略吸收(仅考虑散射),因此消光系数等于散射系数。而散射又分为两部分:
σₛ = σₛ_Rayleigh + σₛ_Mie
瑞利散射的相位函数近似为:P_R(θ) = 3/(16π)·(1+cos²θ),而米氏散射通常用 Cornette-Shanks 相位函数近似:P_M(θ) = 3/(8π)·[(1-g²)(1+cos²θ)] / [(2+g²)(1+g²-2g·cosθ)^(3/2)]。其中 g 为非对称因子(UE5 中参数为 “MieG”)。当 g 接近 1 时,散射强烈向前(太阳方向),这就是为什么太阳周围会有光晕(Aureole)。

UE5 的默认参数中,米氏散射系数为 (0.003996, 0.003996, 0.003996),即波长无关(白色),且 g 默认 0.8。瑞利散射的波长依赖性决定了天空的蓝色,而米氏散射的波长无关性则使得雾气呈灰白色——两种机制叠加,形成了肉眼所见的复杂大气效果。

推导:从球形大气到屏幕像素

UE5 的大气雾使用球形大气模型(Spherical Atmosphere),而非平面模型。这意味着一根视线从相机出发,穿过大气层,可能穿越多次(光线在外层与内层之间反弹)。引擎通过预计算查找表(LUT)来加速计算:一张 32x32x32 的 3D 纹理存储了在不同太阳高度角、视线仰角下的散射积分值。这个积分是对辐射传输方程的解析近似——即所谓的”单次散射”模型。

具体的数值推导如下:对于视线方向 ω,从相机位置 p 出发,到大气边界 t₁,再到边界 t₂,则到达相机的辐射为:
L(p,ω) = L_sun · T(p, p_sun) + ∫₀ᵗ¹ σₛ(t)·p(θ(t))·T(p, x(t))·T(x(t), p_sun) dt
其中 T(a,b) 为透射率(Beer-Lambert 定律),即 exp(-∫σₜ ds)。这个积分无法在实时中逐像素计算,因此 UE5 将积分结果存入 LUT,并在着色器中通过三线性插值获取。这解释了为什么调整大气参数后,画面变化不是实时逐帧的——因为需要重新烘焙 LUT(虽然 UE5 会异步更新,但有时会有轻微延迟)。

一个关键细节:UE5 的大气雾在默认设置下不计算多次散射,这意味着光线在粒子间多次反弹的贡献被忽略。这导致在低太阳角度(日出/日落)时,天空亮度会偏暗,因为多次散射在此时贡献显著。熟悉线性代数和数值积分的开发者可以修改引擎源码,但 UE5 也提供了”多重散射”的近似方案——通过修改散射系数来补偿。

验证:参数与现象的逻辑对照

我们可以通过实验验证以上推导。在默认场景中,将 “RayleighScattering” 的蓝色分量从 0.01318 降到 0.0001,天空会立即变为灰白色——因为失去了波长选择性。而将 “MieG” 从 0.8 改为 0.2,太阳周围的光晕会明显扩散,因为前向散射减弱,散射能量更均匀地分布到各个方向。这些现象与理论完全一致。

另一个验证点是地平线附近的雾气颜色。由于视线在大气中路径更长,瑞利散射贡献更大,但米氏散射的路径也变长,导致地平线处颜色偏白(因为米氏散射无波长差异)。同时,地平线亮度比天顶高,因为沿着地平线的视线穿过的大气层更厚,散射增强。这解释了”地平线亮”的现象。

应用:在项目中配置大气雾

理解了原理,我们就可以精确定制大气雾效果,而非盲目调参。

1. 调整天空颜色

要获得更红的日落,提高瑞利散射的红色分量(如 (0.005, 0.004, 0.013)),同时降低蓝色分量。或者调整太阳光的颜色(DirectionalLight 的颜色),因为大气散射是乘在太阳光上的。

2. 控制雾气浓度

“Atmospheric Density” 是一个倍率系数,作用于所有散射系数。增加它会整体提高散射强度,但也会使天空更亮。若要只增加低空雾气,可以结合使用指数高度雾(Exponential Height Fog),它基于高度计算密度,与大气雾的均匀模型不同。

3. 性能优化

大气雾的 LUT 分辨率固定,但可以降低 “Aerial Perspective LUT” 的分辨率来优化。另外,大规模场景中,大气雾会参与光照计算,导致动态物体(如粒子)的散射计算开销增加。建议在远处使用大气雾,近处使用高度雾。

4. 常见误区

很多美术会调整 “Density” 到很高,却发现天空变得死白。这是错误的——Density 增加的是整体散射,导致透射率下降,太阳和天空都变白。正确的做法是调节瑞利和米氏系数的比例,或者降低太阳强度。

技巧:当场景中的天空看起来”脏”时,尝试将 “MieG” 调高到 0.9 以上,并降低 “MieScattering” 的强度,这样会得到更干净的太阳光晕。

行业案例:虚拟制片中的大气雾应用

在虚拟制片(Virtual Production)中,大气雾常用于匹配实拍背景。例如,在 LED 棚内拍摄时,需要将虚拟场景的太阳角度和色彩与实拍素材一致。通过调整大气雾参数,可以实现逼真的体积光效果,使虚拟角色与背景完美融合。据火星人教育的资深讲师观察,许多项目团队过度依赖后期调色来弥补大气雾参数的错误,导致画面发灰。正确做法是,在渲染前期就基于物理原理设置参数。

UE5 大气雾:从散射方程到天空呈色的原理拆解 - 配图2
UE5 大气雾:从散射方程到天空呈色的原理拆解

总结

UE5 大气雾是一个基于物理的散射系统,其核心是瑞利散射的波长依赖性和米氏散射的相位函数。通过理解辐射传输方程的简化和 LUT 的预计算机制,我们能够解释并预测参数变化带来的视觉效果。在实际项目中,我们应该避免盲目调参,而是要依据物理直觉来配置。例如,想要更蓝的天空,就提高瑞利散射的蓝分量;想要更明显的太阳光晕,就提高 MieG。掌握这些底层原理,你就能从”参数搬运工”进化为”光影设计者”。

UE5 大气雾:从散射方程到天空呈色的原理拆解 - 配图3
UE5 大气雾:从散射方程到天空呈色的原理拆解

关于火星人教育

如果你渴望系统掌握 UE5 实时渲染与虚拟制片技术,欢迎了解火星人教育——创办24年来专注数字艺术与 AIGC 实战职业技能培训。我们开设的课程包括 AI 漫剧创作、AIGC 视觉设计、UE5 游戏特效、室内全屋定制、MAYA 三维动画、C4D 动态设计、工业设计、NUKE 影视后期、摄影摄像实训等,在北京、深圳双校区开设线下面授班。无论你是美术生、在校大学生,还是意向转行的职场人群,我们以项目化实训教学,夯实专业技能,助力就业与职业提升。咨询电话:010-65918670。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。