现象:为什么体积雾中的光柱看起来如此真实?
在UE5中开启体积雾(Volumetric Fog)并放置一个定向光,你立刻会看到一道道光柱穿透场景——这就是常说的God Ray(神光)。表面上看,这是“光被雾挡住”的简单效果,但如果你调整过Scattering Distribution(散射分布)或Extinction Scale(消光系数),就会发现参数之间存在着微妙的耦合:改变一个值,光柱的亮度、软硬、颜色都会连锁反应。这背后是一套完整的物理渲染模型,而非简单的后期滤镜。
本文将以“现象→原理→推导→验证→总结”为主线,拆解UE5体积雾的底层机制。我们将从渲染方程出发,逐步推导到光线步进(Ray Marching)的离散化实现,并解释每个关键参数在数学上的意义。目标不是教你调参,而是让你在调参时知道自己在改变什么。

原理:体积散射的物理与数学基础
1. 渲染方程在参与介质中的扩展
传统表面渲染的渲染方程只考虑光线在物体表面的反射,而体积雾是一种参与介质(Participating Media),光线在传播过程中会与介质发生三种交互:吸收(Absorption)、外散射(Out-scattering)和内散射(In-scattering)。对于God Ray效果,核心是内散射——光线从光源出发,被介质中的粒子“弹射”到相机方向。
体积渲染的完整方程可以写为:
L(x, ω) = ∫₀^d T(t) · [σ_s · p(ω, ω') · L_i(x_t, ω') + σ_a · L_e] dt + T(d) · L_surface
其中T(t) = exp(-∫₀^t σ_t(s) ds)是透射率(Transmittance),σ_t = σ_a + σ_s是消光系数(Extinction),p是相位函数(Phase Function),L_i是入射辐射亮度。对于God Ray,我们主要关注σ_s · p · L_i这一项,它决定了光柱的亮度分布。
2. 相位函数:为什么光柱有“方向性”?
相位函数描述了散射的方向分布。UE5默认使用Henyey-Greenstein相位函数:
p(θ) = (1 - g²) / (4π · (1 + g² - 2g·cosθ)^(3/2))
其中g是各向异性参数(Anisotropy),范围[-1, 1]。当g>0时,前向散射增强,意味着光线更倾向于沿原方向传播——这正是God Ray中光柱“从光源射出”的视觉来源。UE5体积雾的Scattering Distribution参数直接对应g值。默认g=0(各向同性),但为了光柱效果,通常设为0.6~0.8。
技巧:g值并非越大越好。当g>0.9时,前向散射过于集中,光柱边缘会变得生硬,且需要更高的采样数才能收敛。建议在0.7附近微调,配合Extinction Scale控制光柱的“浓度”。
3. 光线步进:从连续积分到离散求和
实时渲染无法解析求解上述积分,UE5采用光线步进(Ray Marching)在视空间中对每个像素沿视线方向采样。具体来说,体积雾的渲染分为两个阶段:
- 体积纹理生成:在低分辨率(如半分辨率或四分之一分辨率)的3D纹理中,沿每个像素的视线方向步进,累积散射光。步进次数由Volumetric Fog的Grid Size和Depth Distribution控制。
- 时间重投影:利用上一帧的深度和运动矢量,对体积纹理进行时间滤波,减少噪点并允许更少的步进次数。
步进公式为:
L_scatter = Σ_i T_i · σ_s · p(θ) · L_i · Δt
其中T_i是累积透射率,Δt是步长。UE5使用能量守恒的步进方案,在每一步更新T_i = T_{i-1} · exp(-σ_t · Δt)。

推导:UE5体积雾的工程实现与参数映射
1. 体积纹理的分辨率与深度分布
UE5的体积雾使用一个3D纹理(默认128x128x64)来存储散射光。深度方向(Z轴)的分布不是线性的,而是通过指数分布(Exponential Distribution)将更多采样点分配在相机附近。这是因为透射率T(t)随距离指数衰减,近处的贡献更大。Depth Distribution参数控制指数分布的曲率:值越大,采样越集中在近处。
| 参数 | 物理意义 | 典型值 | 影响 |
|---|---|---|---|
| Scattering Distribution (g) | 各向异性系数 | 0.6~0.8 | 光柱方向性、边缘软硬 |
| Extinction Scale | 消光系数σ_t | 0.1~1.0 | 雾的浓度、光柱亮度 |
| Albedo | 单次散射反照率σ_s/σ_t | 0.8~0.9 | 雾的颜色倾向 |
| Depth Distribution | 深度采样指数分布曲率 | 0.5~2.0 | 近处采样密度 |
2. 光源贡献与阴影采样
光柱的形态由光源的阴影决定。UE5在体积雾步进时,会对每个采样点查询光源的阴影图(Shadow Map),判断该点是否被遮挡。对于定向光,使用级联阴影贴图(CSM);对于局部光,使用阴影立方体贴图。这意味着体积雾的God Ray效果直接依赖于阴影质量——如果阴影图分辨率不足,光柱边缘会出现锯齿或漏光。
注意:体积雾的阴影采样是逐采样点进行的,而非逐像素。因此,增加体积纹理的深度采样数(通过r.VolumetricFog.GridSizeZ)可以改善光柱的柔和度,但会显著增加GPU开销。
3. 时间重投影与降噪
为了在实时性能下获得平滑的光柱,UE5采用了时间重投影(Temporal Reprojection)。它利用上一帧的体积纹理和当前帧的深度/运动矢量,将历史信息重投影到当前帧,然后与当前帧的稀疏采样结果混合。混合权重由邻域颜色相似度(Neighborhood Clamping)动态调整,以避免拖影。
这一机制解释了为什么快速移动相机时,光柱会出现轻微的“迟滞”现象——时间滤波的累积需要几帧才能收敛。在虚拟制片等对实时性要求极高的场景中,可以通过调整r.VolumetricFog.TemporalReprojection的权重来权衡噪点与延迟。
验证:参数实验与视觉对照
为了验证上述原理,我们设计一组对照实验:在固定场景中,仅改变Scattering Distribution(g)和Extinction Scale,观察光柱的亮度分布与边缘特性。
- 实验A:g=0.2,Extinction=0.5 → 光柱几乎不可见,散射方向过于均匀,能量分散。
- 实验B:g=0.7,Extinction=0.5 → 光柱清晰,边缘柔和,符合前向散射预期。
- 实验C:g=0.95,Extinction=0.5 → 光柱中心极亮,但边缘出现“硬边”,且伴随噪点,需要更多采样才能收敛。
实验结果与HG相位函数的理论曲线一致:g=0.7时,前向散射峰值约为g=0.2时的8倍,而g=0.95时峰值虽更高,但角度分布过窄,导致离散采样不足。这验证了“g值需与采样数匹配”的工程结论。
另一个验证点是深度分布。将Depth Distribution从1.0调到2.0,近处光柱的细节明显增加,但远处光柱出现断层——这是因为指数分布将采样点过度集中到近处,远处步长过大,积分误差增大。因此,在大型场景中,建议配合局部体积雾(Local Volumetric Fog)来补充远处细节。

总结:从原理到实践的决策框架
UE5的体积雾与God Ray并非“魔法”,而是基于物理的散射积分在实时约束下的工程近似。理解以下三个核心关系,你就能在项目中做出有依据的决策:
- 散射方向性(g)与光柱形态:g决定光柱的“聚拢”程度,需与采样数平衡。推荐g∈[0.6, 0.8]。
- 消光系数(σ_t)与透射率:σ_t越大,雾越浓,光柱越亮但可见距离越短。需结合场景尺度调整。
- 采样分布与性能:深度采样数和体积纹理分辨率直接影响光柱质量与GPU开销。在性能受限时,优先保证近处采样密度。
最后,记住一个技术判断:体积雾的God Ray是“计算”出来的,不是“画”出来的。任何试图用后期贴图模拟光柱的做法,都无法获得正确的遮挡关系和动态交互。这也是UE5体积雾在虚拟制片中不可替代的原因——它让光线与场景的交互具有物理一致性。
关于火星人教育:作为创办24年来专注数字艺术与AIGC实战职业技能培训的机构,火星人教育在UE5游戏特效、AIGC视觉设计、AI漫剧创作、室内全屋定制、MAYA三维动画、C4D动态设计、工业设计、NUKE影视后期、摄影摄像实训等课程中,始终强调“原理驱动”的教学理念。北京、深圳双校区开设线下面授班,面向美术生、在校大学生及意向转行的职场人群,以项目化实训教学,夯实专业技能,助力就业与职业提升。如果你希望深入掌握UE5体积渲染的底层逻辑,欢迎咨询:010-65918670。









评论(0)