本文只应用于个人学习总结。
目录
在作业7中的BVHAccel模块中已经分析了BVH树的构建过程,其仅仅采用了简单粗暴的NAIVE方式(按最长轴空间等分)去对一个节点构建左右子树,这种方法在构建时是很快的,但在渲染的过程中就体现了其缺点。这里参考了这篇文章,对其进行了分析,并引出了这篇文章所提及的基于表面积的启发式评估划分方法(Surface Area Heuristic,SAH)。
一、模型分析
1、按空间平均分配(NAIVE)
在NAIVE的建树情况下会出现如图这种情况,那么就会存在这样一种情况:如果光线与右边包围盒相交,在下一次迭代的过程中会计算3个物体的划分;而如果光线与左边包围盒相交,则只需要直接返回一个物体即可。
那么问题就出现了,我们会发现所构建的BVH树是不平衡的。在学习搜索树的过程中,我们了解到要使得搜索时间达到最优解,就需要构建的二叉搜索树是平衡二叉树。同样的,BVH树需要最快速的搜索到与光线相交的包围盒,如何使BVH树达到平衡就变成了解决问题的关键。
2、按物体平均分配
要使BVH树达到平衡,最简单的方法就是,将物体按数量进行等分。这样确实可以获得所期望的平衡树,但在执行过程中仍会出现一些问题。
如图所示,我们将物体按数量划分成了两个包围盒。但由于是空间划分,两个包围盒会产生重叠的部分,那么问题便产生了,如果一个光线相交于中间物体的P点,那么在查询物体交点的时候会经历了怎样的一个过程?P点在左右包围盒重叠的部分,所以两个包围盒都会与光线相交,整个过程在最坏情况下查询了所有的物体才能得到点P,这个查询过程花费的时间甚至大过了NAIVE所花费的时间,所以这种划分方式也不理想。
二、SAH
分析了以上两种简易划分方式,我们了解到,不论是按空间平均划分还是按数量平均划分,如果光线与两包围盒重叠位置相交,则都需要