您的位置:首页 > 其它

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

2017-07-18 22:29 120 查看
前续: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)的采样



对这个因子的采样最终要得到“交点”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



1.1.1,过Po做曲面在该点的切平面(no为Po处的法向量)。并在Po点建立局部坐标系。



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所示)。



1.1.4,P_base和P_target所在的直线和Po所在的几何体可能有多个交点。(如图15.11所示)



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

相关代码截图如下:







1.2,求Pi对应的概率





因为:



二、Sw(wi)的采样

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

接下来,要采样的是wi。

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







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

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



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐