学习笔记:pbrt中的体积光传输

在构建好体散射采样模块的基础上,可以直接在表面散射形式的光线传输方程的一些求解算法中引入体散射部分,并得到包含体散射的光线传输方程的求解方法。

(1)在直接光照模型中引入体散射内容。在仅考虑表面散射时,从光源发出来的光会在第一个相交点处按BSDF进行反射。当为非delta型光源时,还需要求解一个积分运算,相应的就需要对光线进行采样并计算概率密度。当考虑体散射时,从光源发出的光碰到的第一个交点除表面上的点外,还可能是介质中的某点,此时根据包含体散射的光线传输方程,其中的BSDF部分要替换成一个相位函数,不过还是将其归为直接光照模型对BSDF采样的部分,该相位函数表征该点处由入射方向散射为出射方向的概率。于此同时,该相位函数也需要进行重要性采样,它的概率密度就是该相位函数值本身。针对这一工作,书中提供了两个形式类似的函数,两者都以Henyey-Greenstein模型为基础,其中一个根据确定的入射方向和反射方向输出相位函数,另一个根据出射方向对入射方向进行采样,输出入射方向的采样结果及对应的相位函数。

(2)在路径跟踪积分器中引入体散射内容。这部分内容实际上形成了体积路径积分器。在积分器的每一步中,首先根据光线方向确定下一个位于表面上的交点。接下来再考虑这个点是否位于介质之中。无论在不在介质中都对光线所经历的介质进行采样,获得其透射率及采样概率密度。此处并未完全理解:是否光线从非介质进入介质的交界面也算是与光线相交;如果不是,那么怎样采样到介质中的点;如果不是,那么如果光线经历了一段介质后又离开了介质,该怎样计算。考虑到存在很多介质的场景,书中推荐先判断光线是否进入了某介质,并根据介质的范围修改寻找光线相交点的最大范围。书中认为这种方式比前一种方式的效率更高。其中的原因包括:第一,减少了求解光线与表面相交的计算量。个人理解,如果光线进入了某介质,则按体散射采样进行处理即可,本段路径不需要考虑与表面相交的情况。第二,光线范围被修改后,光线长度变短,与场景中各物体的相交判断计算量减少。完成是否进入某介质的判断后,如果为是,则按点位于介质中的情况进行计算,如果为否,则按点位于表面的情况进行计算。当点位于介质中时,还需要考虑光源在该点处产生的光线的散射情况。采用单光源采样计算光源产生的辐亮度。该单光源采样模块需要使用介质相交对象。利用该介质相交对象,可以对出射光线的方向和相位函数进行采样。在表面散射路径跟踪积分器中,光线从一个点到另一个点的中间只判断是否被遮挡,而在体散射路径追踪积分器中,光线从一个点到另一个点的中间要乘以一个透射系数。

你可能感兴趣的:(学习笔记:pbrt中的体积光传输)