现象:体积光为何看起来“真实”?
在Blender中,当你为场景添加一个Volume Scatter节点并设置密度后,一束聚光灯会立刻在空间中形成可见的光柱。这种效果常被用于营造氛围,但你是否思考过:为什么光柱的边缘是柔和的?为什么密度增加时,光柱中心反而变暗?这些现象背后,是光线与介质相互作用的物理规律,以及Cycles渲染器对辐射传输方程的数值求解。本文将从这些可观察的现象出发,逐层剖析Volume Scatter的数学原理与算法实现,并给出参数调节的理论依据。作为火星人教育的一线导师,我始终强调:只有理解“为什么”,才能摆脱参数试错,实现精准控制。

原理:辐射传输方程与散射相函数
体积散射的本质是光线在参与介质(participating media)中传播时,与介质粒子发生相互作用。描述这一过程的核心方程是辐射传输方程(RTE),其微分形式为:
dL(x,ω)/dt = -σ_t L(x,ω) + σ_s ∫ p(ω,ω') L(x,ω') dω' + σ_a L_e(x,ω)
其中,L是辐射亮度,σ_t = σ_a + σ_s是消光系数(吸收+散射),p(ω,ω’)是散射相函数,L_e是介质自身发射。对于大多数雾效,我们忽略吸收(σ_a≈0)和发射(L_e=0),因此σ_t = σ_s,方程简化为:
dL(x,ω)/dt = -σ_s L(x,ω) + σ_s ∫ p(ω,ω') L(x,ω') dω'
这个方程表明,光线在介质中传播时,一方面因散射而衰减(第一项),另一方面因其他方向的光线被散射到当前方向而增强(第二项)。Blender的Volume Scatter节点正是基于这一方程进行蒙特卡洛积分求解。
散射相函数p(ω,ω’)描述了光线从方向ω’散射到方向ω的概率分布。Blender默认使用Henyey-Greenstein相函数,其形式为:
p(θ) = (1 - g²) / (4π (1 + g² - 2g cosθ)^(3/2))
其中θ是散射角,g是各向异性参数,范围[-1,1]。g=0表示各向同性散射(如瑞利散射),g>0表示前向散射(如米氏散射,常见于雾),g<0表示后向散射。Blender的Volume Scatter节点中,Anisotropy参数即对应g值。理解这一点至关重要:调整Anisotropy实际上是在改变相函数,从而控制光晕的方向性。
推导:从连续方程到蒙特卡洛积分
RTE是一个积分-微分方程,解析解仅对极简单的情况存在。Cycles采用蒙特卡洛光线追踪求解,将积分转化为对光线路径的采样。具体来说,对于一条从相机出发的光线,其在介质中的透射率T服从比尔-朗伯定律:
T(t) = exp(-∫ σ_s dt)
当σ_s为常数时,T(t) = exp(-σ_s t)。这意味着光线强度随距离指数衰减。在路径追踪中,我们通过采样散射事件的位置来估计积分。关键步骤是:在介质中采样一个距离t,使得t服从概率密度函数p(t) = σ_s exp(-σ_s t)。这可以通过逆变换采样实现:t = -ln(1-ξ)/σ_s,其中ξ是[0,1)的均匀随机数。
采样到散射点后,需要根据相函数采样新的方向。对于Henyey-Greenstein相函数,方向采样可通过解析公式完成:
cosθ = (1 + g² - ((1 - g²)/(1 - g + 2gξ))²) / (2g) (g≠0)
Blender在内部实现了这些采样策略,但了解其原理有助于我们理解参数的影响。例如,当Anisotropy接近1时,散射方向强烈集中于前向,导致光线几乎不改变方向,从而形成更“清晰”的光柱;而当Anisotropy为0时,散射方向均匀分布,光柱边缘更柔和。

验证:参数实验与视觉对照
为了验证上述理论,我们设计一组对照实验。在Cycles中创建一个立方体区域,填充Volume Scatter节点,使用聚光灯从侧面照射,观察不同密度和Anisotropy下的光柱形态。实验设置:聚光灯强度1000W,角度30°,体积立方体尺寸5m,相机位于侧前方。
| 密度 | Anisotropy | 观察现象 | 理论解释 |
|---|---|---|---|
| 0.1 | 0.0 | 光柱微弱,边缘模糊 | 低密度下散射事件少,透射率高,光柱不明显;各向同性散射使方向随机化 |
| 0.5 | 0.0 | 光柱清晰,亮度均匀 | 适中密度下多次散射,光柱可见;各向同性导致亮度分布均匀 |
| 1.0 | 0.0 | 光柱中心变暗,边缘亮 | 高密度下光子在中心区域被多次散射,能量向边缘扩散,中心透射率低 |
| 0.5 | 0.8 | 光柱方向性强,中心亮 | 前向散射占主导,光子沿原方向传播,能量集中 |
| 0.5 | -0.5 | 光柱向光源方向反射,背面亮 | 后向散射增强,光子更多返回光源方向 |
从表中可以看出,密度和Anisotropy共同决定了光柱的形态。值得注意的是,当密度过高时,光柱中心反而变暗,这是因为多次散射导致能量扩散,且透射率降低。这一现象在现实中同样存在:浓雾中车灯的光柱中心较暗,边缘较亮。
此外,Blender的Volume Scatter节点还提供了Color参数,它实际上是通过波长相关的σ_s来模拟有色散射。但需要注意,真实介质中吸收和散射都可能具有波长依赖性,而Volume Scatter仅控制散射系数。若要模拟吸收(如彩色烟雾),需结合Volume Absorption节点。
总结:从理论到实践的映射
通过上述分析,我们可以将Volume Scatter的参数与物理量对应起来:
- Density:对应散射系数σ_s,控制介质的不透明度。增大密度会增加散射事件频率,但过高会导致光柱中心变暗。
- Anisotropy:对应Henyey-Greenstein相函数的g参数,控制散射方向性。正值增强前向散射,负值增强后向散射。
- Color:对应波长相关的σ_s,用于模拟有色散射,但需注意它不影响吸收。
在实际项目中,我建议先根据物理直觉设定密度范围(例如,雾的密度通常在0.01-0.1量级,而浓烟可达1.0),再通过Anisotropy微调光柱的“硬度”。对于戏剧性光效,可尝试Anisotropy在0.6-0.9之间;对于柔和氛围,则使用0.0-0.3。记住,这些参数并非孤立,它们与灯光强度、尺寸以及场景尺度共同作用。
技巧:若想模拟非均匀雾(如地面雾),可使用Noise Texture节点驱动密度,并通过ColorRamp控制分布。此时,密度值应视为局部σ_s,整体效果需通过渲染测试调整。
深入理解Volume Scatter的数学原理,不仅能让你在参数调整时有的放矢,更能激发你创造性的应用。例如,利用相函数的方向性,可以设计出仅从特定角度可见的“隐形”光柱,或模拟大气散射中的日晕效果。

在火星人教育的AIGC视觉设计课程中,我们始终强调原理驱动的创作方法。无论是Blender体积光、UE5游戏特效,还是AI漫剧创作,底层逻辑的掌握都是突破技术瓶颈的关键。火星人教育创办24年来,专注数字艺术与AIGC实战职业技能培训,开设AI漫剧创作、AIGC视觉设计、UE5游戏特效、室内全屋定制、MAYA三维动画、C4D动态设计、工业设计、NUKE影视后期、摄影摄像实训等课程,北京、深圳双校区线下面授,面向美术生、在校大学生及意向转行的职场人群,以项目化实训教学,夯实专业技能,助力就业与职业提升。咨询电话:010-65918670。








评论(0)