zl程序教程

您现在的位置是:首页 >  工具

当前栏目

次表面散射 的原理 学习

学习原理 表面
2023-09-11 14:20:23 时间

https://zhuanlan.zhihu.com/p/508588218

描述次表面散射(Subsurface Scattering):BSSRDF 简介

1 参与介质(Participating Media)回顾

参与介质(participating media) 是指对所穿过的光线产生散射、吸收等作用的空间介质,例如烟、雾、尘埃等。

左图是 BSDF 描述的材质示意,右图是参与介质示意 图源:[Jensen et al. 2001]

对于 BSDF 建模的材质,模型假设光线仅在景物表面被散射,光线的入射点和出射点相同,而且光线离开景物表面后就不再受材质影响了。但是,光线在参与介质中传播时实际上也会被介质中的粒子吸收、散射而能量衰减,同时介质本身也可能会发射辐射而使光能增加,所以此时 BSDF 描述的局部光照模型就非常不准确了。

要想准确地绘制烟、雾、玉石、牛奶等半透明的液体之类的参与介质,一种较为精确但是开销较高的方法是在景物内部细致地跟踪光路,用相函数等描述材质,求解辐射传输方程,而不再停留于景物的表面。另一种不那么准确但开销较小的方法是建模光线在介质内部的交互,近似光线在介质内部传播的结果,用 BSSDF 描述材质,此时就可以回到景物的表面,继续使用求解绘制方程的形式了。

本系列的上一篇介绍了使用体绘制(volume rendering)的方法求解辐射传输方程进行着色,而本文将简单地介绍拟合参与介质的 BSSRDF 。

一般 BSSRDF 会假设入射光线相交的景物表面是平坦的、表面积无限,并假设参与介质是均质的、厚度无限,所以和求解辐射传输方程相比,根据 BSSRDF 描述的参与介质生成的图像是不准确的。

2 BSSRDF

BSSRDF(bidirectional subsurface scattering reflection distribution function,双向子面散射反射分布函数) S(pi,ωi,po,ωo) 描述了物体表面一点 pi 处来自方向 ωi 入射辐射通量(radiant flux)的微增量 dΦi(p,ωi) 与其所引发的在点 po 处向出射方向 ωo 反射辐射亮度(radiance)增量 dLo(p,ωo) 之间的关系:

S(pi,ωi,po,ωo)=dLo(po,ωo)dΦi(pi,ωi)

于是,由 BSSRDF 描述的、物体表面某点 po 向方向 ωo 反射的辐射亮度可表示为如下绘制方程:

Lo(po,ωo)=∫A∫Ω+S(pi,ωi,po,ωo)Li(p,ωi)cos⁡θidωidA(pi)

  • Ω+ 是表面法线确定的正半球,包含了所有可能的光线入射方向 ωi;
  • θi 是入射方向 ωi 和表面法线方向的夹角;
  • 入射光线携带的辐射亮度乘以光线入射方向和法线方向夹角的余弦,得到辐射照度,再在物体表面 A 进行积分,得到入射辐射通量;
  • BSSRDF 需要在包含了所有可能光线入射点 pi 的表面区域 A 上进行面积分,可以假设只有在出射点 po 附近一定范围内的入射点 pi 才有明显贡献,以更方便求解;

光线可能会被介质中的粒子吸收,粒子可能将光线散射到其它方向,其它方向的光线可能会被粒子散射到当前方向。不同于辐射传输方程中相函数等参数细致地关注了光线在介质内部散射的过程,绘制方程中的 BSSRDF S(pi,ωi,po,ωo) 把介质对光线的散射近似为如下三部分:

S(pi,ωi,po,ωo)=S(0)(pi,ωi,po,ωo)+S(1)(pi,ωi,po,ωo)+Sd(pi,ωi,po,ωo)

  • S(0)(pi,ωi,po,ωo) 是光线仅被介质吸收而衰减,没有发生散射的成分;
  • S(1)(pi,ωi,po,ωo) 是光线仅在介质中被散射一次的成分;
  • Sd(pi,ωi,po,ωo) 是光线在介质中被散射多次的成分;

2.1 Dipole Model

在2001年,Jensen 等人发表论文《A Practical Model for Subsurface Light Transport》,提出了 dipole model。

对于 S(0),模型假设介质厚度无限,于是该项无贡献:

S(0)(pi,ωi,po,ωo)=0

一次散射贡献计算示意 原图源:[Jensen et al. 2001]

对于 S(1),模型假设介质表面平坦,被均匀地照亮,且介质内部是均质的,于是沿着折射光线积分,可以得到一次散射贡献的出射辐射亮度:

Lo(1)(pi,ωi,po,ωo)=σs(po)∫Ω+F⋅p(ωi′⋅ωo′)∫0∞e−σtc⋅s⋅Li(pi,ωi)dsdωi

  • ωi′ 和 ωo′ 分别是介质内部被折射的入射和出射方向;
  • F=Ft(η,ωi)⋅Ft(η,ωo) 是两处菲涅尔项的乘积,其中 η 是材质的相对折射率;
  • σtc=σt(po)+G⋅σt(pi) 是联合消光系数,其中 G 是几何因子,σt 是衰减系数(attenuation coefficient);

对于 Sd,因为光线在介质内部每经过一次散射,辐射亮度分布便会变得更模糊、更趋向于均匀分布一些,所以经过多次散射后,辐射亮度分布会趋近于漫反射,于是多次散射的贡献如下:

Sd(pi,ωi,po,ωo)=1πFt(η,ωi)Rd(‖pi−po‖)Ft(η,ωo)

  • Ft(η,ωi) 和 Ft(η,ωo) 是两处的折射菲涅尔项;
  • Rd 是漫反射的 BSSRDF,等于辐射出射度除以入射辐射通量(incident flux);
    • 辐射出射度(radiant exitance)是单位辐射表面积向半球空间发射的辐射通量;
  • 1π 是归一化项;
    ∫Ω+cos⁡θdω=∫02π∫0π2cos⁡θ⋅sin⁡θdθdϕ=∫02πdϕ∫0π2cos⁡θsin⁡θdθ=2π⋅12sin⁡(2θ)|0π4=π
多次散射贡献计算示意 图源:[Jensen et al. 2001]

Jensen 等人采用偶极子(dipole),即用两个相对的虚拟点光源来近似光线在平坦的、表面积无限的、厚度无限的均匀介质内部多次散射的效果,其中一个点光源被放置在表面之下深度 zr 处,另一个被放置于表面之上高度 zv 处,它们联合的影响如下:

Rd(r)=α′4π[(σtr⋅dr+1)e−σtr⋅drσt′⋅dr3+zv(σtr⋅dv+1)e−σtr⋅dvσt′⋅dv3]

  • σt′=σs(1−g)+σa,其中 g 是光线散射角(scattering angle)余弦的平均值,σs 是散射系数(scattering coefficient),σa 是吸收系数(absorption coefficient);
  • α′=σs(1−g)σt′;
  • σtr=3σa⋅σt′;
  • dr 是与表面之下点光源之间的距离,dv 是与表面之上点光源之间的距离,

对于两个点光源的位置,可以考虑 zr=1σt′,zv=zr+41+Fdr1−FdrD

  • D=13σt′ 是扩散常数(diffusion constant);
  • Fdr 是所有入射方向漫反射菲涅尔项的平均值,可以使用 Egan 和 Hilgeman 的论文中给出的公式 Fdr=−1.44η2+0.71η+0.668+0.0636η 近似;

2.2 Normalized Diffusion

在2015年,Christensen 和 Burley 发表论文《Approximate Reflectance Profiles for Efficient Subsurface Scattering》,提出了一种对漫反射 BSSRDF 高效的近似:

Rd(r)=Ae−rd+e−r3d8π⋅d⋅r

  • A 是景物表面的反照率(albedo);
  • d 是控制函数形状的参数,反应了次表面散射效果的柔和程度,
    • 在物理上,d 和介质的平均自由程(mean free path) ℓ ,即光线在介质内两次连续散射之间传播的平均距离有关,可取值 d=ℓs,其中 s 是标度因子(scaling factor),取决于A;
      • 当光线垂直入射表面时,标度因子可取值 s=1.85−A+7|A−0.8|3;
      • 对于漫反射折射的表面,标度因子可取值 s=1.9−A+3.5(A−0.8)2;
    • d 也可以由漫反射平均自由程(diffuse mean free path) ℓd 决定,取值 d=ℓds,此时标度因子可取值 s=3.5+100(A−0.33)4

2πr⋅Rd(r) 对应的累积概率分布函数是 cdf(r)=1−14e−rd−34e−r3d ,具体的推导如下:

cdf(r)=∫0r2πt⋅Rd(t)dt∫0∞2πt⋅Rd(t)dt=∫0r2πt⋅Ae−td+e−t3d8π⋅d⋅tdt∫0∞2πt⋅Ae−td+e−t3d8π⋅d⋅tdt=∫0r(e−td+e−t3d)dt∫0∞(e−td+e−t3d)dt=(−de−td−3de−t3d)|0r(−de−td−3de−t3d)|0∞=(−de−rd−3de−r3d)−(−d−3d)(0−0)−(−d−3d)=4d−de−rd−3de−r3d4d=1−14e−rd−34e−r3d

虽然该函数并不基于物理,而是经试验得到的经验模型,但是它的效果超过了以往不少基于物理的模型,而且形式简单,开销较小,将相应的累积概率分布函数应用于蒙特卡罗方法也很方便。另外,该函数不仅考虑了多次散射的成分 Sd,也考虑了一次散射的成分S(1)。

3 根据 BSSRDF 抽样光线

在使用蒙特卡罗方法求解绘制方程时,需要根据 BSSRDF 抽样光线方向。

在2013年,King 等人发表论文《BSSRDF Importance Sampling》,提出了一种根据 BSSRDF 使用重要抽样法生成光线样本的方法。

假设物体材质均匀,只有位于同一局部范围内的光线入射点和出射点之间存在明显的联系,所以可以只在着色点附近进行抽样。

方法基本的思想是,首先在着色点附近取一个一定大小的圆盘,然后在圆盘内根据 Rd(r) 的分布采样一个距离 r,接着寻找距离 r 相对应的景物表面点,另外还需要考虑样本点表面法线方向和着色点表面法线方向不一致的影响,最后得到相应的概率。

参考资料