Table of Contents
体渲染数学方法和模型
Hege等人在1993年发布的文章中具体阐述了体渲染的数学方法,凡是做过体渲染的人不可能不知道这套体系。其实说实话,从内容来看,接下来的这篇文章更像是前面的技术的一个总结。不过这篇文章确实阐述的是比较完备的体渲染算法,它还是基于线性传输理论。
理论介绍
光具有波动性,进而有多种状态,比如干涉衍射等,还有不同的波长,这里我们不考虑,而是通过应用几何光学来研究渲染方程(即线性传输理论)。在几何光学中,使用频率而不是波长,因为当折射率改变时,频率会保持不变。而且有个小细节:光传播需要时间,模拟光的弛豫是可以的,但是没有必要。我们假设一开始就是光的稳定态。
虽然前面已经介绍了这个方程,但是为了全面这里再粘贴一下:
如果用单位体积单位时间dv在x点上的光子密度 表示,光子的速度是 c, 表示频率间隔(下面还会介绍),一个光子的能量为 (普朗克常量,物理学知识):
辐射能:
辐射能密度(点光源): (单位立体角的辐射能)。
射出的能量:
射入的能量:
吸收发射和散射
吸收项:
表示在当前微元吸收的能量,表示的是衰减(吸收)系数。da表示面积微元。
注意到吸收项与角 没有什么关系。
被称作频率为 的光子在材料中的“平均自由路径(mean free path)”,它定义了特征长度规模(characteristic length scale)。
发射项:
区分真实的或热的吸收和发射过程以及散射过程是很重要的。在前一种情况下,从光束中移除的能量转化为材料热能,能量分别以材料能量为代价发射到光束中。相反,在散射过程中,光子与散射中心相互作用,并从沿不同方向移动的事件中出现,通常也具有不同的频率。如果频率不变,我们就说弹性散射,否则就说非弹性散射。
散射项:
用 表示吸收系数,用 表示散射系数,这样就能得到总的吸收(衰减)系数:
表示为 albedo,当albedo为1的时候表示,射过来的光会被全部反射掉,
同理,发射系数也应该包含源项发射 和散射到表面的光 :
我们定义散射外出的能量方程:
该方程表示从 n 方向到 n' 方向,以及从频率 到频率 ' 的能量。
其中 p 表示相位函数:(这里的4π别的文章中说过,并没有什么含义,只是为了抵消掉球面积分因子,让最后积分结果为1)
以及散射到x点的散射能量方程:
弹性散射中, 。注意其实大部分应用里都是弹性散射,所以不需要考虑频率的变化。同时,很多相位函数只关心 cosθ ,而不是n和n',这叫做各向同性材料。最简单的各向同性材料是:
表示的是光向各个方向散射量都是一样的。
- Rayleigh散射
满足球面积分为1,该函数对于前向散射和后向散射是没有什么区分的(仅仅依赖于 θ)。
- Henvey - Greenstein相位函数
改变参数k提供了前向散射(k>0)、各向同性散射(k=0)和后向散射(k<0)之间的连续介质。
传输方程的微分形式
x+dx的能量与x处的能量之间的差值 = 发射出的能量与吸收的能量之间的差值,所以:
同时,
这就是《Real-Time Volume Graphics》第一章给出的方程。
同时注意散射包含一个积分项:
因为一般是弹性散射,我们不考虑频率的变化:
边界条件
所谓边界条件,就是微积分方程中的一些限定,比如遇到未定义区间应该怎么处理。
对于不透明表面,边界条件很容易指定。我们假设表面法线N总是指向辐射场所在的体。
explicit boundary conditions:
辐射到体中的强度值由表面发射函数E给出。 表示指向体的所有方向的集合。
implicit or reflecting boundary conditions:
surface scattering kernel :k :
explicit 以及 reflective boundary conditions 也可以结合起来。
考虑到表面的时候,边界条件就需要区分正表面 以及负表面:
在这个定义中,我们选择了所有输出的辐射。类似地,我们也可以选择入射到表面元素上的所有辐射:
我们把这些都结合起来:
即 x点处的能量 = x点发出的能量 + 其他方向射到x方向的能量
在没有参与介质的情况下,该方程简化为众所周知的渲染方程,该方程是所有表面绘制的基础。在这里,在更一般的情况下,它只是作为传递方程的边界条件。
渲染方程的积分形式
表示 沿着 上的方向积分。
在 和 之间的光学深度
回忆一下, 表示的是一个频率为的光子的平均自由路径。
应用到方程中:
光学深度可以分解为:
所以得到体渲染方程:
该方程就是大家特别熟悉的体渲染(光学)方程。
渲染方程
我们再进行一些简化,就可以得到著名的渲染方程:
以及如下定义:
即:
同样,后面的解决思路不再描述,因为解决方案无非就是离散化之类的,我们会在最后一篇survey里面详细介绍一下。