体积渲染
以下严谨推导体积渲染公式
在场景中,光线沿ω方向传播,与介质中的点p发生相互作用,Li为入射光的辐射率,Lo为经作用后的辐射率。
吸收
使用σa(p,ω)表示光线在p点处沿ω方向行进单位距离后,被吸收的辐射率与入射辐射率的比值,那么仅考虑吸收的情况下,在微小距离dt,辐射率的变化公式为:
dLo,abso(p,ω)=−σa(p,ω)Li(p,ω)dt
外散射
使用σs(p,ω)表示光线在p点处沿ω方向行进行进单位距离后,被散射到其他方向的辐射率与入射辐射率的比值,这种情况与吸收类似,那么辐射率变化公式为:
dLo,scat(p,ω)=−σs(p,ω)Li(p,ω)dt
吸收与外散射都是消耗入射光的能量,那么可以将两种作用进行统一,记σt(p,ω)=σa(p,ω)+σs(p,ω),称为衰减系数
此时有:
dLo,exti(p,ω)=−σt(p,ω)Li(p,ω)dt
假设移动距离为l,即从p到p+lω,解该微分方程有:
lnLo(p+lω,ω)−lnLi(p,ω)=−∫0lσt(p+tω)dtLi(p,ω)Lo(p+lω,ω)=e∫0l(σt(p+tω)dt)
记透明度为T(p→p+lω)=Li(p,ω)Lo(p+lω,ω),那么容易得出其有以下性质:
T(p→p)=1T(p0,p2)=T(p0,p1)∗T(p1,p2)
即具有单位元和传递性,同时如果介质是各向同性即σt(p,ω)=σt(p,−ω),有
T(p0,p1)=T(p1,p0)
即反身性,在单位距离内,通常假设\sigma_t为常数,此时
T(p0,p1)=e−σt∣∣p0−p1∣∣
在实际渲染中,传递性代表了光线经过多个介质时,可以依次计算其衰减量,反身性代表了可以从摄像机处反向计算光照
以上公式被称为为朗博-比尔定律
发射
假设点p处沿ω方向微小距离dt内产生的辐射率为Le(p,ω),发射的公式为:
dLo(p,ω)=Le(p,ω)dt
内散射
散射会对四周所有方向产生光线,假设入射光辐射率为单位1,则所有散射光的方向与辐射率形成一种分布,称该分布为相位函数,p(p,ωi,ωo)表示在点p处,入射光为ωi方向,出射光为ωo时,散射光与入射光辐射率的比值,即
p(p,ωi,ωo)=Lo(p,ωo)Li(p,ωi)
显然,相位函数满足:
∫spherep(p,ωi,ωo)dωo=1
同时散射光沿ω方向也将遵循朗博-比尔定律,由于是从其余方向散射而来,并不受吸收作用影响,那么在点p处沿ω方向微小距离dt内辐射率的增加量为:
Ls(p,ω)=Le(p,ω)+∫spherep(p,ωi,ω)σs(p,ω)Li(p,ωi)dωi
称Ls(p,ω)为源项
传输方程
综合考虑衰减和源项后,有
dtdLo(p,ω)=−σt(p,ω)Li(p,ω)dt+Ls(p,ω)
该式称为传输方程的微分积分形式,可以用于ray marching算法计算
在不考虑自发光与散射的情况下,该式退化为简单体积渲染的情况,即朗博-比尔定律