现象:为什么你的大气雾总像一层“脏玻璃”?
在UE5中开启Atmospheric Fog(大气雾)后,许多进阶学员的第一反应是:画面变“灰”了,远处物体像被一层脏玻璃蒙住,与参考照片中通透的空气感相去甚远。更令人困惑的是,即便把Fog Density(雾密度)调到接近零,地平线附近依然残留着一层不自然的亮边。这种现象并非参数调节失误,而是大气雾的物理模型在默认配置下与真实大气的光学行为存在系统性偏差。要彻底驾驭它,我们必须回到光线与大气粒子相互作用的底层机制——瑞利散射(Rayleigh Scattering)与米氏散射(Mie Scattering),以及UE5如何用解析近似而非物理积分来求解辐射传输方程。

原理:大气雾不是“雾”,是参与介质的辐射传输
在计算机图形学中,大气雾属于参与介质(Participating Media)的一种简化模型。当光线从太阳出发穿过大气层到达相机,会与大气中的气体分子(尺寸远小于波长)和气溶胶颗粒(尺寸与波长相当)发生散射与吸收。UE5的Atmospheric Fog组件基于单次散射近似(Single Scattering Approximation),忽略多次散射,将沿视线的散射光强表示为:
L(λ) = ∫[T(λ, s) * σ_s(λ, s) * p(θ) * L_sun(λ)] ds + T(λ, d) * L_background(λ)
其中T为透射率,σ_s为散射系数,p(θ)为相位函数,L_sun为太阳辐亮度。UE5用Rayleigh相位函数处理气体分子散射,其形状为(1+cos²θ),前向与后向对称,这正是蓝天呈现均匀蓝色的原因;而Mie相位函数采用Henyey-Greenstein近似,强烈前向偏置,导致太阳周围出现光晕( aureole ),这也是为什么日落时太阳附近会泛白。关键在于,UE5的Atmospheric Fog并非逐像素积分,而是将大气沿高度分层,用预计算的查找表(LUT)存储不同高度、不同视角下的散射结果,运行时进行插值。这种设计在性能与视觉质量间取得了平衡,但也意味着参数之间存在强耦合——修改Rayleigh Scattering Scale会同时影响天空颜色和远处物体的雾感。
相位函数:决定“光晕”与“蓝天”的数学核心
相位函数p(θ)描述的是光线与粒子碰撞后,向与入射方向成θ角的方向散射的概率分布。对于Rayleigh散射,p(θ) = 3/(16π) * (1+cos²θ),其积分归一化为1,保证了能量守恒。这意味着蓝光(短波长)的散射系数σ_s ∝ 1/λ⁴,比红光强约5.5倍,因此天空呈现蓝色。而Mie散射的p(θ)在θ=0°(前向)附近急剧增大,导致太阳周围形成强光晕。在UE5中,Mie Scattering Scale控制气溶胶浓度,Mie Anisotropy控制前向散射强度(值越大,光晕越紧)。很多学员试图用Mie Anisotropy来“消除雾感”,结果却让太阳周围出现不自然的亮斑——这是因为你改变了相位函数的形状,而非散射总量。正确的做法是:先调Mie Scattering Scale控制整体雾浓度,再用Mie Anisotropy微调光晕形态,两者不可混淆。
推导:从高度衰减到天空光照的耦合链路
UE5的Atmospheric Fog通过Height Falloff(高度衰减)参数控制密度随海拔的指数下降:ρ(h) = ρ₀ * exp(-h/H),其中H为标高(Scale Height)。这个公式来自大气静力学方程,H = kT/(mg),地球大气约8.5km。在UE5中,Height Falloff的单位是1/km,默认值0.2对应H=5km,比真实值略小,目的是让低空雾感更明显。但问题在于,Atmospheric Fog的密度是相对值,它与Sky Atmosphere(天空大气)组件的Rayleigh/Mie散射系数是独立计算后叠加的。这意味着如果你同时启用了Sky Atmosphere和Atmospheric Fog,大气效果会“双重计数”——天空颜色由Sky Atmosphere决定,而远处物体的雾感由Atmospheric Fog叠加,两者在物理上并不一致。我的建议是:若追求物理正确的天空,优先使用Sky Atmosphere + Volumetric Cloud,仅用Atmospheric Fog做局部低空雾效;若需要快速出效果,可单独使用Atmospheric Fog并关闭Sky Atmosphere的雾贡献。
验证:用渲染目标反推散射系数
要验证你的大气雾参数是否合理,最直接的方法是创建一个Buffer Visualization,查看Scene Color的RGB通道。在纯天空区域,若R/G/B比值接近1:1.2:1.5(对应Rayleigh散射的1/λ⁴关系),说明散射模型正确;若蓝色通道过强或过弱,则Rayleigh Scattering Scale需要调整。另一个技巧是使用Sky Atmosphere的LUT可视化:在材质中采样SkyAtmosphereLUT,观察不同高度角的散射强度分布,这能直观反映Height Falloff是否导致近地面散射过强。

应用:Atmospheric Fog与Sky Atmosphere的协同策略
在虚拟制片(Virtual Production)中,大气雾的核心任务是匹配实拍背景的空气透视。实拍素材中,远处山体的对比度下降和色彩偏移是大气散射的直接结果。UE5的Atmospheric Fog提供了Fog Inscattering Color和Directional Inscattering Color,前者控制环境散射光颜色,后者控制太阳方向的前向散射颜色。但这两个参数是手动指定的常量,而非从太阳位置自动推导。因此,当太阳角度变化时,你必须同步调整Directional Inscattering Color,否则会出现“太阳移动但光晕颜色不变”的穿帮。一个实用的工作流是:用蓝图将Directional Inscattering Color与Sky Atmosphere的Sun Light颜色绑定,通过指数插值实现动态匹配。具体实现如下:
// 在关卡蓝图中,每帧更新Atmospheric Fog的Directional Inscattering Color
FLinearColor SunColor = SkyAtmosphere->GetSunLightColor();
FLinearColor ScatterColor = SunColor * FLinearColor(1.0f, 0.8f, 0.6f); // 暖色偏移
AtmosphericFog->SetDirectionalInscatteringColor(ScatterColor);
此外,Atmospheric Fog的Start Distance参数常被忽视。它定义了大气雾开始生效的相机距离,默认值为0,意味着从相机位置就开始累积雾感。在室内场景中,这会导致近处物体也被“雾化”,破坏空间层次。将Start Distance设为500-1000单位,可以保留近景清晰度,仅对中远景施加空气透视,这符合真实摄影中“近处通透、远处朦胧”的视觉规律。
性能与质量权衡:LUT分辨率与更新频率
UE5的Atmospheric Fog使用预计算的3D LUT存储散射结果,LUT分辨率由Precompute Density和Precompute Height控制。提高分辨率可减少插值误差,但会增加显存和预计算时间。在开放世界项目中,我通常将Precompute Height设为32,Precompute Density设为16,在4K分辨率下肉眼几乎无法察觉插值瑕疵。若项目需要动态昼夜循环,必须确保LUT在太阳角度变化时重新计算——UE5默认每帧更新,但可通过r.Atmosphere.UpdateRate控制更新频率,在太阳缓慢移动时降低至每5帧更新一次,可节省约15%的GPU时间。
总结:大气雾的物理直觉与工程取舍
UE5的Atmospheric Fog是一个物理启发式模型,而非严格的辐射传输求解器。它的价值在于用极低的性能代价提供了可信的空气透视效果,但代价是参数间的非物理耦合。要驾驭它,你需要建立三个核心直觉:第一,Rayleigh散射决定天空底色,Mie散射决定光晕形态,两者通过相位函数耦合,不可孤立调节;第二,Height Falloff是艺术控制杆,不是物理常数,默认值偏向视觉夸张而非真实大气;第三,Atmospheric Fog与Sky Atmosphere是竞争关系,同时启用需谨慎分配散射贡献,避免双重计数。掌握这些原理后,你不再需要盲目试错参数,而是能根据目标画面的物理特征反推配置——这才是技术美术与普通调参者的分水岭。

关于火星人教育:创办24年来,火星人教育始终专注数字艺术与AIGC实战职业技能培训,开设课程涵盖AI漫剧创作、AIGC视觉设计、UE5游戏特效、室内全屋定制、MAYA三维动画、C4D动态设计、工业设计、NUKE影视后期、摄影摄像实训。北京、深圳双校区开设线下面授班,面向美术生、在校大学生及意向转行的职场人群,以项目化实训教学,夯实专业技能,助力就业与职业提升。咨询电话:010-65918670。








评论(0)