计算机图形学知识点1-光线追踪中轴对齐边界盒(AABB)算法

最近在做虚拟视点生成方面的研究,发现很多在渲染优化过程中提到AABB算法,就特意在知乎查找了一下,并记录在公众号内非常给大家。

重点:在de迭一个最大值f 比 在DE跌一个最小值F 小,则重叠;后面一定要谨记此思想

首先,从基本的球开始 ,光线追踪的原理就是当光线方程与球体方程相交时,联立两个方程,求出一个t值。

f846e3ca42251c3d6a7aed3f7d0436e8.jpeg

这是一个二元一次方程,t 就是他的根 。

但是,当场景里面的物体增多时,就会使得计算变得十分的复杂,光线的计算也会变得非常缓慢,这还不包括射线击中之后,递归调用的反射光线 。

所以在前人的智慧下,用了很多算法来避免复杂的计算,这就是今天介绍的AABB算法 。

AABB算法的全称是 - axis aligned bounding box (轴对齐-边界盒) ,说白了,他就是一个理想的盒子而已,因为判断 光线 与复杂的物体相交是一个比较费时的计算,当我们用一个包围盒取包围它时,盒子的计算就会降低很多时间

ccbefca20cc965e13c618f2a0ea86a12.jpeg

设想一下这样的边界框带给我们的判断 :

32045719146d0b54425b8516c7c072eb.jpeg

理解了基本思路,我们继续分析,当物体增多时,光有一个边界框时不够的,我们还需要对他们进行分类,分类单纯的分一下就好了,并不是按照对象的什么什么属性分类。

我们要根据它所在的位置,对光线的大致方向做一个预判就OK了。

cf5bc7def8fd2ff25224cc160a5eba81.jpeg

我们举个例子,把他们分为两个部分,由图可见,当然这两个部分是可以重叠的。我们根据重叠,还可以构建更大的box来表示他们 。

这仿佛又回到了数据结构的范畴,我们就要一层一层的分析他与光线的相交判断。

8fe482e4a250f8bacf79ddb2e5248c6c.jpeg

好了,大概思路就是这样,我们从基本的地方开始,完成这个的全部过程:

射线相交判断:

30c66dfc03e471aa5a5f2d6cc0759b6f.jpeg

拓展到三维当中的话,就是这样的:

7667765c4c607c368ecc26698fbd2254.jpeg

3f1c39f9e52aaaf862b1d10f344de2b6.jpeg

我们知道了,当光线与平面相交的 t 值 ,也就理解为 ,当 t0 时刻,与平面X0 相交了,在t1时刻,又与X1平面相交了。

但是,这是理想的平面呀,他没有大小,我们的盒子是有大小的呀。

我们可以根据这个原理,分别计算x,y,z,三个方向的t值 。

cc7e7d8d7ec836d2c4b1ef0f3c32a5b7.jpeg

677ac09a76877cbdfdee9a72f36cedaa.jpeg

024abb573d8d3f187683329bcf60c7bc.jpeg

1da108c5d859491a2b64913278cdfa46.jpeg

总结一下这些图 , 在三维空间中,我们必须保证,三个方向都相交,否则,盒子就没有被光线击中。

反过来讲,只要一个面没有被击中,盒子就没有被击中。

我们介绍了光线与一个盒子的相交判断,然后我们来介绍一下,何如对一个球体,构建一个盒子:

一个盒子,其实我们只要有两个点来约束它,就可以知道他的边界了 :max点,他的xyz三个分量,与min点,他的xyz三个分量 ,分别约束了 三个面 :

afdc658aefd11ef765b61134846a5cf3.jpeg

对于一个球来说,最大的这个边界点,就是他的球心坐标,每个分量都加上他的半径值,

最小的边界点,就是他的球心坐标,每个分量都减去他的半径值。

fdb4616522911641f7aaf84e818f6e02.jpeg

这样,我们就为一个球体,构建了一个边界框,然后呢,对于场景中,所有的物体都用构建,我们只能运用循环的方式遍历这些物体,为他们添加边界框。

构建边界框的同时,我们不要忘了,还要最重要的一步,就是重叠的边界框,我们要为其构建一个更大的边界框来表示他们。

a70da43b27db55026ab26767234c619a.jpeg

好了 , 所有的边界框都做完了,我们就来构建这个数据结构,方便我们更快速的进行光线追踪 :

构建方法:

1 .随机选取一个轴

2 .根据当前轴的距离,对物体进行线性排序

3 .递归调用构建,左子树存放最近的盒子,右子数存放第二近的盒子。如果剩下一个盒子了,就在左右两边各复制一个。

最后,就是构建完之后的判断了:

644ff51219c506a0e0979e86cb06f749.jpeg

了解更多关于《计算机视觉与图形学》相关知识,请关注公众号:

下载我们视频中代码和相关讲义,请在公众号回复:计算机视觉课程资料

转载链接:https://zhuanlan.zhihu.com/p/35321344

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值