使用AABB加速光追
在光追前,我们可以用一些预处理来加速接下来的光线求交:
一.uniform grid
-找到包围盒
-将包围盒分成很多小格子
-将有物体表面的小格子标记
让光线与小格子求交,避免与整个包围盒求交,若光线进入小格子且小格子标记了有物体表面,则再与物体表面三角形求交.
格子划分数量也会影响效率.太疏太密都不好.
二.空间划分spatial partitions
物体少的地方格子大块,物体密集的地方格子小块细分.
八叉树,KD-Tree,BSP-Tree
KD-Tree预加工(每次取一块划分的例子)
只需要在叶子节点来储存场景三角形信息即可.
3.object partitions&BVH(很常用)(称BVH)
以物体为单位划分结构,避免KD-Tree的空间划分带来的某物体与多个空间都有交集的情况.
-找到总包围盒
-递归低将包围盒里物体分两堆
-将两堆重新计算包围盒
-必要时停止划分
-把物体信息记录在叶子节点
但有个缺点,BVH难以将空间划分开.BVH的划分很有讲究.建议沿着长轴分两组.两组物体数量尽量接近.
参考资料Games101