Subsurface scattering 中文就是指的是次表面散射,也就是描述半透明至透明的物体和光相互作用的一种现象,可以想象现实生活中的蜡烛 玉石等等在光照下的颜色。这些物体之所以拥有这样的外观是因为光线进入物体内部后往往经过多次散射才从物体表面另一点射出。与普通的表面反射或者是纯透明材质的折射不同。 次表面散射材质的基于物理的渲染一直是个很难的课题,这是因为在应用光线路径追踪方法去追踪光线时,往往需要追踪几百次上千次的物体内的散射情况,这是个极度昂贵的行为。此外,采样对于次表面材质的计算也是个大问题。后面会说到。
描述次表面散射可以用一个叫BSSRDF的函数来表示,理论上来说对它积分(用Monte Carlo方法) 就可以得到完全物理正确的渲染结果了:
可惜对BSSRDF的积分是要对入射点和出射点之间的整个表面积(A)积分的,这比BRDF的对方向积分要复杂很多,所以直接的暴力Monte Carlo 算法效率实在是太低了。唯一可行的办法是找出物理上正确的数学计算模型。
二、近似模型
可以看到我们对每一个光线入射点(需要渲染的点)要确定的是出射点的位置和方向便可求出最后的照片结果积分值,而不用考虑这一条路径上的具体情况。
三、采样和多重重要性抽样
从上面的推导很明显可以看出对于渲染流程本身最重要的是确定光线出射点,也就是要对于光线出射点在物体表面采样,这个步骤的难度依然远远大于BRDF的直接对方向采样。迄今为止也有很多方法涌现出来,比如PBRT把物体表面所有的点按分布采出构建成点云然后计算,Jenson则在每一个着色点周围按圆盘进行采样。更准确的方法是在圆球内发射光线寻找和物体表面的交点,将其作为采样点。
单纯的均匀采样是很没有效率的,重要性抽样是减小噪声和加快收敛速度的常见方法,常见的办法是沿某个特定的方向发射光线,去寻找与物体表面的交点。当然,实际上这是一种近似性质的重要性抽样,因为你是否找到采样点,往往和物体表面的形态密切相关。
可改进方面及优化方向:
1. 加上single scattering分量计算,单次散射类似于折射,在高反射率物体中对最终渲染结果影响较小,但是在物体很薄很透时有比较好的效果,可以考虑做混合算法,扩展SSS渲染算法的适应性,比如对薄的物体的渲染。
2.做 multipole的混合模型,这也是Jenson 之后的一个理论,是对很薄的物体在dipole的边界条件不满足时候可以用multipole模型计算。算是一个hybrid的方法。
3.加入photo beam 或者 Virtual ray light 的计算方法,方法类似photon mapping。