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)的值。
还是用这个近似式子:
![](https://img-blog.csdn.net/20170717193434653?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGliaW5nX3plbmc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
采样的思路是:对式子右端的各个因子分别进行单独采样。
第一个因子:
![](https://img-blog.csdn.net/20170718164420323?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGliaW5nX3plbmc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
不用管这个因子。
原因是:咱们这里考虑的是次表面的散射情况,既然已经进入了次表面,说明在此之前的表面的BSDF已经处理过反射和折射了。进入次表面的光已经是经过折射之后的光了。或者说,这个因子已经在此前的bsdf->f()中,已经累乘到beta中了。
第二因子:
![](https://img-blog.csdn.net/20170718164907244?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGliaW5nX3plbmc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
对这个因子的采样最终要得到“交点”pi的值、对应的概率、Sp的值。
这个计算起来最为复杂,后面重点讲这个。
第三个因子:
![](https://img-blog.csdn.net/20170718165000338?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGliaW5nX3plbmc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
在完成第二个因子的采样后,得到一个“交点”pi。
对Sw的采样是这样:将Sw看做一个类似diffuse的BSDF加到pi->bsdf中。
什么叫做“类似diffuse的BSDF”呢?
其一:入射光的方向wi均匀的来自各个方向;
其二:入射光的强度根据Sw()来计算;
![](https://img-blog.csdn.net/20170718170606695?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGliaW5nX3plbmc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
对这个因子的采样最终要得到“交点”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,直接查表);
![](https://img-blog.csdn.net/20170718194952795?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGliaW5nX3plbmc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
1.1.1,过Po做曲面在该点的切平面(no为Po处的法向量)。并在Po点建立局部坐标系。
![](https://img-blog.csdn.net/20170718193137962?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGliaW5nX3plbmc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
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所示)。
![](https://img-blog.csdn.net/20170718194933177?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGliaW5nX3plbmc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
1.1.4,P_base和P_target所在的直线和Po所在的几何体可能有多个交点。(如图15.11所示)
![](https://img-blog.csdn.net/20170718195242259?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGliaW5nX3plbmc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
1.1.5,从“步骤1.1.4”中所求的交点中随机选取一个交点,作为Pi。
相关代码截图如下:
![](https://img-blog.csdn.net/20170718202723829?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGliaW5nX3plbmc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](https://img-blog.csdn.net/20170718202735651?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGliaW5nX3plbmc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](https://img-blog.csdn.net/20170718202747189?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGliaW5nX3plbmc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](https://img-blog.csdn.net/20170718215354869?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGliaW5nX3plbmc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](https://img-blog.csdn.net/20170718220035999?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGliaW5nX3plbmc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
因为:
![](https://img-blog.csdn.net/20170718220057504?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGliaW5nX3plbmc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
接下来,要采样的是wi。
对Sw的采样是这样:将Sw看做一个类似diffuse的BSDF加到pi->bsdf中。
![](https://img-blog.csdn.net/20170718220626706?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGliaW5nX3plbmc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](https://img-blog.csdn.net/20170718221505687?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGliaW5nX3plbmc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](https://img-blog.csdn.net/20170718221452078?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGliaW5nX3plbmc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](https://img-blog.csdn.net/20170718222759117?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGliaW5nX3plbmc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
从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()函数中部分代码的截图:相关文章推荐
- Q132:PBRT-V3,BSSRDF(双向散射表面反射分布函数)(5.6.2章节、11.4章节)
- Q129:PBRT-V3,均匀介质的采样(15.2.1章节)
- Q130:PBRT-V3,非均匀介质的采样(11.3.3章节、15.2.2章节)
- Q124:PBRT-V3,“路径追踪”积分器(14.5章节)
- Q139:PBRT-V3,Metropolis Light Transport (MLT)(16.4章节)
- Q119:PBRT-V3,“复合重要性采样”(13.10章节)
- Q136:PBRT-V3,双向路径追踪(Bidirectional Path Tracing)(16.3章节)
- Q120:PBRT-V3,“直接光照”积分器(14.3章节)(翻译不下去了)
- Q120:PBRT-V3,“直接光照”积分器(14.3章节)
- Q137:PBRT-V3,各种采样(Sampling)之间的逻辑
- Q141:PBRT-V3,交点处各种微分的求解(球面,3.2章节)
- Q121:PBRT-V3,光传播方程(The Light Transport Equation)(14.4章节)
- Q128:PBRT-V3,“体渲染”积分器的“传播方程”(15.1章节)
- Q142:PBRT-V3,交点处各种微分的求解(三角形,3.6章节)
- Q134:PBRT-V3,次表面散射(Subsurface Scattering)(15.5章节)
- Q135:PBRT-V3,随机渐进光子映射(Stochastic Progressive Photon Mapping)(16.2章节)
- Q138:PBRT-V3,伪随机数发生器(pseudo-random number generator,RNG)(A.1.2章节)
- Q122:PBRT-V3,提高Monte Carlo积分计算效率的方法——Russian Roulette和Splitting(13.7章节)
- Q107:Mac系统下GDB对PBRT-V3进行debug
- Q123:PBRT-V3,各种形式的“光传播方程”的推导依据