学习笔记:pbrt中的实时全局光照II

本篇将介绍pbrt中实现实时全局光照算法中的创建虚拟光源的整个流程。

(1)生成创建虚拟光源所用的每条光线采样所需的随机变量。所需随机变量的组数等于光线数目,即光源集合数和每个集合中的光线路径数。每一组涉及选择哪个光源,光源的哪个子表面,光源表面的位置和光线方向等四个方面。生成方法采用低偏差采样的方法。做好该准备工作后,就可以采用循环方式,针对每条光线生成虚拟光源。

(2)针对某条光线,生成其路径中的第一段。以每个光源的发光强弱为权重,按一维均匀常量分布进行采样,选择产生该光线的光源。然后利用前面所准备的随机变量,对光源进行采样,得到出射光线,包括出射光线的起点,方向,起点处的法线方向,出射方向以立体角为基准的概率密度以及光线的辐亮度。然后考虑辐亮度在后续过程中使用时系数,将其进行修正,形成修正后的辐亮度。具体包括乘以法线与出射方向夹角的余弦值,除以出射方向以立体角为基准的概率密度和该光源的权重的乘积。

(3)生成一个虚拟光源,并生成路径的下一段。在生成虚拟光源前,还考虑了传播介质对辐亮度的衰减作用,对辐亮度进行了进一步的修正。利用光线路径的当前段光线,确定与场景中物体的交点,并得到交点处的BSDF。然后计算该光线在交点处按BSDF产生的平均效果。该效果乘以前述进一步修正后的辐亮度结果,作为虚拟光源的辐亮度参数,该交点的位置和法线作为虚拟光源的位置和法线信息。然后用随机数对象对BSDF函数进行采样,生成路径下一段的方向,概率密度及该方向的BSDF数值。该数值也按后续使用时的系数进行修正。修正方式为乘以光线方向与法线夹角的余弦值,再除以概率密度。

(4)近似按俄罗斯轮盘赌的方式结束该路径的虚拟光源生成过程。将(3)中修正后的BSDF数值考虑下限1后,与一个0到1范围内的随机数进行比较。比较结果小于该数时,结束该路径的虚拟光源生成过程。比较结果为其他情况时,将(3)中得到的进一步修正后的辐亮度数值乘以修正后的BSDF数值类似归一化后的结果,得到路径新一段光线的辐亮度数值。然后再根据交点位置,光线方向等信息,生成路径中的新一段光线对象。

对上述过程进行几点说明。第一,单独为虚拟光源定义了一个类,其中主要存储虚拟光源的位置、法线和辐亮度参数。第二,虚拟光源存储在一个二维vector中,第一维度按光源集合进行划分,第二维度未按光线路径进行划分,直接生成一个就存储一个。第三,采用近似俄罗斯轮盘赌的方式结束,产生的效果是具有较大反射率的表面,路径持续的可能性就高。这一点意味着并非按光线辐亮度的大小决定路径延续的可能性。按书中的介绍,能使路径的亮度不变。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容