16、计算机图形学——基于AABB进行光线追踪的加速(下)

本文介绍了使用KD-tree和BVH(Bounding Volume Hierarchy)两种数据结构来加速光线追踪的过程。KD-tree通过沿坐标轴递归划分空间,减少不必要的计算。而BVH则基于三角形面进行空间划分,确保每个物体都在至少一个AABB内。这两种方法通过排除与光线不相交的区域,提高了光线追踪的效率。
摘要由CSDN通过智能技术生成

三、KD-tree加速光线追踪

前面已经说过,均匀空间划分存在一个划分粒度的问题,所以,为了解决这个问题,就出现了基于树形结构的空间划分。基于KD-tree进行空间划分就是其中一种

KD-tree每次划分的时候,会按顺序沿着x、y、z轴进行依次划分(也可以不按照这个顺序来),如下图所示,首先进行x轴方向的划分,然后对两个部分进行y方向的划分,然后再进行x轴方向的划分,依次递归,当每个小AABB足够小或者每个AABB找那个的物体个数很少时,递归终止

 在KD-tree中,存储物体信息的节点都是叶子结点(没有子节点的节点)

示例

比如,一个空间的物体如下,并且按照KD-tree的方式被划分

 

当划分完成,判断光线与与两个子空间1和B是否相交,该光线不仅与1相交,还与B相交

 所以就需要一次遍历子树1和B,拿子树1来说,子树1的下半部分不和光线相交,所以就不用遍历子树1的下半部分,这样就能起到一定程度的加速作用

光线又和B的两个子树2和C相交,所以,还需要遍历子树2和C

而子树2和C又可以被进一步划分,继续递归遍历

D区域被划分成4和5(停止继续划分),但是区域4并没有与光线相交的叶子结点,而3号区域中有与光线相交的节点,就能得出交点。

KD-tree将AABB空间不断分割,如果光线与哪一部分的子AABB不想交,则可以直接忽略光线与该AABB的交点计算,节省了计算量;但是,因为按照空间划分,就存在某些三维物体有可能介于两个AABB中间。

为了能够让所有的物体都存在于一个AABB中,人们自然又提出了基于物体划分的算法

四、BVH(Bounding Volume Hierarchy)加速光线追踪

BVH是基于三角形面进行空间划分的光追加速算法,首先将场景中的物体用一个大的AABB包起来

然后将大的AABB划分为两个小的AABB,这两个小的AABB可能会重叠,但是每个三角形面都必定在其中一个AABB中

接着重复对两个子AABB进行划分,递归条件就是AABB中三角形的数量小于某个值,下图只对左面的进行了划分,没有对右边的子AABB进行划分

BVH的伪代码如下

参考

GAMES101-现代计算机图形学入门-闫令琪_哔哩哔哩_bilibili

欢迎大家评论交流,作者水平有限,如有错误,欢迎指出

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值