体积渲染

本文最后更新于:2021年11月4日 凌晨

体积渲染不仅要考虑光线与物体表面的交互,还要考虑与空间中大量微粒的交互。本文介绍了体积渲染的一般理论,导出了积分方程形式的光线传输方程,最后给出了实时体积渲染的实例。

体积介质

体积介质(media)由体积内部的大量微粒构成.光在介质中传播时,可能会出现 3 种情况:透过(transmission)、吸收(absorption)、散射(scattering).


图1 - 光线与微粒的作用

同时,介质本身还可能存在发射(emission)的现象.

吸收

吸收是由介质的 吸收截面(absorption cross section)所描述的,通常记作 $\sigma_a$.假设沿 $\boldsymbol{\omega}$ 方向的光线与点 $\bf p$ 处的介质发生作用,$\sigma_a(\mathbf{p},\boldsymbol{\omega})$ 表示光线在点 $\bf p$ 处沿 $\boldsymbol{\omega}$ 方向行进单位长度后,被吸收的辐射率占原先辐射率的比值,也可以理解为光被吸收的概率.如果不考虑光在介质中的散射,即光始终沿直线传播,那么我们可以得到关于辐射率的如下公式

外散射

如果沿 $\boldsymbol{\omega}$ 方向行进的光线,在点 $\bf p$ 处被散射到了其他方向,那么我们称此时的散射为 外散射(out-scattering).散射系数(scattering coefficient) 表示光在点 $\bf p$ 处沿 方向行进单位长度后,被外散射的辐射率占原先辐射率的比值.外散射现象与吸收现象类似,都会导致点 $\bf p$ 处沿 方向出射的辐射率 减小.外散射导致的辐射率变化率可由下式描述

吸收和外散射的合效应称为 衰减(attenuation)或者 灭减(extinction).衰减系数 $\sigma_{t}$ 定义为

衰减效应可由下式描述

有两个与衰减系数相关的量也很常见.一个是 反射率(albedo)$\rho$,由下式定义

表示外散射效应占衰减效应的比重.另一个是 平均自由程(mean free path)$1/\sigma_t$,表示一个光子沿直线行进而不被吸收或散射的平均距离.

如果只考虑衰减效应,则有 ,从而有

设 $\mathbf{p}’=\mathbf{p}+h\boldsymbol{\omega}$,从 $\mathbf{p}$ 到 $\mathbf{p}’$ 点积分可得

上式 被称作 光束透射比(beam transmittance),表示光束中未被吸收或散射的光线所占的比例. 有一些常用的性质.一个是

另一个是

我们通常还会假设

于是

特别地,如果 $\sigma_{\mathrm{t}}$ 是常数,我们有

上式被称作 Beer-Lambert 定律.

发射

点 $\mathbf{p}$ 处的介质沿 $\boldsymbol{\omega}$ 方向单位长度内产生的辐射率为 $L_{\mathrm{e}}(\mathrm{p}, \omega)$,公式写作

内散射

如果在点 $\bf p$ 处,来自其他方向的光线被散射到了 $\boldsymbol{\omega}$ 方向,则称这种散射为 内散射(in-scattering).

我们用 相函数(phase function)$p(\mathbf{p},\boldsymbol{\omega}_i,\boldsymbol{\omega}_o)$ 来描述散射辐射率在各个方向上的分布,其中 $\mathbf{p}$ 是点的位置,$\boldsymbol{\omega}_i$ 是入射光方向,$\boldsymbol{\omega}_o$ 是散射光方向.根据定义,相函数必须满足:

内散射效应使点 $\bf p$ 处沿 $\boldsymbol{\omega}$ 方向出射的辐射率增加.如果考虑介质发射产生的辐射率,那么内散射和发射导致的单位长度辐射率增加的总量可以用

来表示.$L_{\mathrm{s}}(\mathbf{p},\boldsymbol{\omega})$ 通常称为 源项(source term).

传输方程

微分-积分方程形式

设 $\mathbf{p}(t)=\mathbf{p}_0+t\boldsymbol{\omega}$,点 $\mathbf{p}(t)$ 处 $\boldsymbol{\omega}$ 方向辐射率的变化率由衰减效应和源项决定.根据这个关系得到的方程

被称作 传输方程(the equation of transfer).

积分方程形式

为了便于求解,可以通过给定边界条件

将传输方程改写为关于 $L_{i}(\mathbf{p}(t),-\boldsymbol{\omega})$ 的积分方程.

注意到 ,移项得

方程两边同乘

从 $0$ 积分到 $t$ 得

注意到

方程两边同乘 ,移项化简得

令 $t’=t-s$,即 $s=t-t’$,换元得到

因为 $\mathbf{p}(t-t’)=\mathbf{p}_0+t\boldsymbol{\omega}-t’\boldsymbol{\omega}=\mathbf{p}(t)-t’\boldsymbol{\omega}$,进一步化简得

方程

被称作传输方程的积分方程形式.令 $\mathbf{p}^\prime=\mathbf{p}-t’\boldsymbol{\omega}$,则传输方程也可写作


图2 - 传输方程积分示意图

实时体积渲染

相函数

假设相函数 $p\left(\mathbf{p}^\prime, \boldsymbol{\omega}_i, \boldsymbol{\omega}\right)$ 只与 $\boldsymbol{\omega}_i, \boldsymbol{\omega}$ 之间的夹角 $\theta$ 有关,即

最简单的相函数为

基于物理的相函数取决于粒子的相对大小 $s_p$,

其中 $r$ 是粒子半径,$\lambda$ 是光的波长:

  • 当 $s_p\ll 1$时,存在 Rayleigh 散射;

  • 当 $s_p\approx 1$时,存在 Mie 散射;

  • 当 $s_p\gg 1$ 时,存在几何散射.

Rayleigh 散射

Rayleigh 散射的相函数为


图3 - Rayleigh 散射相函数极坐标图像

Rayleigh 散射的散射系数与波长的四次方成反比

Mie 散射

Mie 散射的相函数

称作 Henyey-Greenstein(HG)相函数,其中参数 $g\in[-1,1]$.$g>0$ 时,发生前向散射;$g<0$ 时,发生后向散射;$g=0$ 时,发生各向同性散射.

Schlick 相函数

是 HG 相函数的近似,它的计算更快.


图4 - HG 相函数(蓝色)与 Schlick 相函数(红色)极坐标图像.$g$ 取值分别为 0,0.3,0.6

源项估计

假设介质不存在发射现象,散射系数只与位置有关,即

源项

可由下式进行近似计算

上式的

称作可视性函数(visibility function),其中 表示阴影贴图,

表示体积阴影.如果 $\sigma_t(\mathbf{p})$ 是常数 $\sigma_t$,体积阴影的表达式为

其中 是从 进行光线步进得到的光线在体积中行进的距离.

源项估计式中的 是第 $i$ 个灯光的辐射率,通常取作

其中 表示 时第 $i$ 个灯光的辐射率.

总辐射率估计

假设衰减系数 $\sigma_\mathrm{t}$ 只与位置有关,即

当 $\mathbf{p}_1$ 和 $\mathbf{p}_2$ 距离 $\Delta t$ 较小时,我们可以用

作为

的估计.于是,

的估计式可以写作

其中

如果 $\sigma_t(\mathbf{p})$ 是常数 $\sigma_t$,我们有更精确的估计

实例

取定常数衰减系数 $\sigma_{\mathrm{t}}$ 和各向同性相函数,辐射率的计算公式为


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!