Q133:PBRT-V3,BSSRDF的采样(15.4章节)

前续:Q132:PBRT-V3,BSSRDF(双向散射表面反射分布函数)(5.6.2章节、11.4章节)
从Q132中,咱知道了在给定(po, wo, pi, wi)的情况下怎么求解S(po, wo, pi, wi)。

〇,概述

这一章节,要做的事情主要是:
在只知道(po, wo)的情况,怎么对BSSRDF进行采样,然后得到(pi, wi)、其对应的概率pdf、S(po, wo, pi, wi)的值。

还是用这个近似式子:
这里写图片描述

采样的思路是:对式子右端的各个因子分别进行单独采样

第一个因子:
这里写图片描述
不用管这个因子。
原因是:咱们这里考虑的是次表面的散射情况,既然已经进入了次表面,说明在此之前的表面的BSDF已经处理过反射和折射了。进入次表面的光已经是经过折射之后的光了。或者说,这个因子已经在此前的bsdf->f()中,已经累乘到beta中了。

第二因子:
这里写图片描述
对这个因子的采样最终要得到“交点”pi的值、对应的概率、Sp的值。
这个计算起来最为复杂,后面重点讲这个。

第三个因子:
这里写图片描述
在完成第二个因子的采样后,得到一个“交点”pi。
对Sw的采样是这样:将Sw看做一个类似diffuse的BSDF加到pi->bsdf中。
什么叫做“类似diffuse的BSDF”呢?
其一:入射光的方向wi均匀的来自各个方向;
其二:入射光的强度根据Sw()来计算;

一、Sp(po, pi)的采样

Q133:PBRT-V3,BSSRDF的采样(15.4章节)_第1张图片
对这个因子的采样最终要得到“交点”pi的值、对应的概率、Sp的值。

从Q132中,咱知道了:求Sr的值,其实就是根据r去查一个BSSRDTable对象中的一个叫做“profile”的表。
所以,现在要对“式子[15.14.2]”进行采样,其实也就是对“r”进行采样,然后根据r到“profile”表中去找一个Sr的值。当然,这个“r”和pi是对应的。

简而言之:将“profile”中中Sr的值映射到几何体上Po点附近的区域上。每个Pi点对应一个映射点,对应一个概率,对应一个Sr值。

我们要做的是:
1,找Pi
2,求Pi对应的概率;
3,求Pi对应的Sr(这个参照Q132,直接查表);

1.1 找Pi

Q133:PBRT-V3,BSSRDF的采样(15.4章节)_第2张图片

1.1.1,过Po做曲面在该点的切平面(no为Po处的法向量)。并在Po点建立局部坐标系。
Q133:PBRT-V3,BSSRDF的采样(15.4章节)_第3张图片

1.1.2,以Po为球心,r_max(Sr表中一个很大的r)为半径做一个球面。(所有可能的Pi都应该在这个球面以内)。在局部坐标系中,先对球面的极坐标phi进行采样(所以,图15.8中显示的是是个圆)。

1.1.3,对球面的极坐标r进行采样(图15.8中标记的r即为采样点)。
做一条距离数轴长度为r平行于该数轴(图15.8中选的数轴为no)的直线,该直线和圆相较于P_base、P_target两点(如图15.8所示)。设这两点之间的距离为l(如图15.10所示)。
Q133:PBRT-V3,BSSRDF的采样(15.4章节)_第4张图片

1.1.4,P_base和P_target所在的直线和Po所在的几何体可能有多个交点。(如图15.11所示)
Q133:PBRT-V3,BSSRDF的采样(15.4章节)_第5张图片

1.1.5,从“步骤1.1.4”中所求的交点中随机选取一个交点,作为Pi。

相关代码截图如下:

Q133:PBRT-V3,BSSRDF的采样(15.4章节)_第6张图片
Q133:PBRT-V3,BSSRDF的采样(15.4章节)_第7张图片
Q133:PBRT-V3,BSSRDF的采样(15.4章节)_第8张图片

1.2,求Pi对应的概率

Q133:PBRT-V3,BSSRDF的采样(15.4章节)_第9张图片

Q133:PBRT-V3,BSSRDF的采样(15.4章节)_第10张图片

因为:

Q133:PBRT-V3,BSSRDF的采样(15.4章节)_第11张图片

二、Sw(wi)的采样

“Sp(po, pi)”的采样中已经确定了Pi。

接下来,要采样的是wi。

对Sw的采样是这样:将Sw看做一个类似diffuse的BSDF加到pi->bsdf中。

Q133:PBRT-V3,BSSRDF的采样(15.4章节)_第12张图片

Q133:PBRT-V3,BSSRDF的采样(15.4章节)_第13张图片

Q133:PBRT-V3,BSSRDF的采样(15.4章节)_第14张图片

三、用PathIntegrator渲染BSSRDF模型对应的材质

下方是PathIntegrator::Li()函数中部分代码的截图:

Q133:PBRT-V3,BSSRDF的采样(15.4章节)_第15张图片
Q133:PBRT-V3,BSSRDF的采样(15.4章节)_第16张图片

你可能感兴趣的:(PBRT,computer,graphics,ray,trace,C++)