一、假设
首先我们假设介质又许多非常小并且随机分布的微粒组成,微粒之间的距离相比与微粒本身大小可视为无限大,因此每个微粒的光照行为是独立事件,但我们不描述单个微粒的光照过程,我们只描述光穿过介质时整体的概率分布。
二、光子的交互
当一个光子穿越一堆微粒时,可能一个也碰不到直接通过,也有可能撞到微粒,撞到的概率与介质的系数
σt
相关,撞到的时候,有两种可能,吸收或者散射,与其相关的介质系数分别为
σa
和
σs
, 两种都会导致该方向的 radiance 变化,最后,我们可以得到
σt=σa+σs
。
2.1 Absorption
考虑一束极小的光束沿
ω⃗
穿过介质,则
x
点射进去的光子数量与入射radiance L(x→ω⃗ ) 成比例,光束上的每一部分
Δt
, 一部分光子与介质交互并被吸收,若该步长内的吸收系数为
σa(x+tω⃗ )
, 则
σa(x+tω⃗ )Δt
部分的光子被吸收,因此,剩余的光子可被表示为:
L((x+tω⃗ )→ω⃗ )=L(x→ω⃗ )(1−σa(x+tω⃗ )Δt)
整理可得:
L((x+tω⃗ )→ω⃗ )−L(x→ω⃗ )Δt=−σa(x)L(x→ω⃗ )
当步长无限小时,可得:
limΔt→0L((x+tω⃗ )→ω⃗ )−L(x→ω⃗ )Δt=(ω⃗ ⋅∇a)L(x→ω⃗ )=−σa(x)L(x→ω⃗ )
其中
∇a
表示光子被吸收的梯度,
(ω⃗ ⋅∇a)
则表示方向导数
2.2 Out-scattering
同理我们可以得到out-scattering造成的radiance变化:
(ω⃗ ⋅∇o)L(x→ω⃗ )=−σs(x)L(x→ω⃗ )
同时考虑吸收和Out-scattering,可以得到:
(ω⃗ ⋅∇t)L(x→ω⃗ )=−(σa+σt)L(x→ω⃗ )=−σt(x)L(x→ω⃗ )
上面的公式,其实可以表述为透射率
Tr
, 透射率表示为能不与微粒进行碰撞的光子比例,对上式进行积分可得:
Tr(x′↔x)=e−τ(x′↔x)
参数
τ
被称为光学厚度,定义如下:
τ(x′↔x)=∫d0σt(x+tω⃗ )dt
其中
t∈[0,d]
,在均匀介质中,
τ
可被计算为:
τ(x′↔x)=dσt
回到透射率,透射率通常在0到1之间,当只考虑吸收和out-scattering时,透射率可用来计算减少的radiance:
L(x→ω⃗ )=Tr(x′↔x)L(x′→−ω⃗ )
此外,一个点到自身的透射率总为1,直线上的三个点透射率满足下的等式:
Tr(x↔x′′)=Tr(x↔x′)Tr(x′↔x′′)
2.3 Emission和In-scattering
In-scattering:
(ω⃗ ⋅∇i)L(x→ω⃗ )=σs(x)Li(x→ω⃗ )
Emiision:
(ω⃗ ⋅∇e)L(x→ω⃗ )=σa(x)Le(x→ω⃗ )
2.4 相函数
就像BRDF,相函数满足可交换性:
p(x,ω⃗ ′↔ω⃗ )
归一性:
∫Ω4πp(x,ω⃗ ′↔ω⃗ )dω⃗ ′=1,∀ω⃗
各向同性相函数:
漫反射就是完美的各向同性散射,其相函数为常数:
pI(x,ω⃗ ′↔ω⃗ )=14π
Henyey-Greenstein相函数:
使用最为广泛的相函数,只取决于
θ
, 定义如下:
pHG(x,θ)=1−g24π(1+g2−2gcosθ)1.5
其中
g∈[−1,1]
, 决定了前向和后向散射的强度,在物理上,
g
表示散射方向的平均余弦值,大于零时是前向散射,小于零时是后向散射,等于零时则表示各向同性。同时,更加复杂的散射函数可用Henyey-Greenstein用如下计算做近似:
g(x)=∫Ω4πp(x,ω⃗ ′↔ω⃗ )cosθdω⃗ ′
三、体渲染方程
综合上述的absorption、out-scattering、in-scattering、emission,我们可得得到光在介质中传播的完整函数:
(ω⃗ ⋅∇)L(x→ω⃗ )=σa(x)L(x→ω⃗ )absorption−σs(x)L(x→ω⃗ )out−scatteringextinction+σa(x)Le(x→ω⃗ )emission+σs(x)Li(x→ω⃗ )in−scattering
如图所示,对上式两边在全方向进行积分,并代入透射率
Tr
可以得到:
L(x→ω⃗ )=Tr(x↔xs)L(xs→−ω⃗ )reduced surface radiance+∫s0Tr(x↔xt)σa(x)Le(xs→−ω⃗ )dtaccumulated emitted radiance+∫s0Tr(x↔xt)σs(xt)Li(xs→−ω⃗ )dtaccumulated in−scattering radiance