计算机图形学第十天

加速光线追踪

通过在aabb包围盒内画格子加速光线追踪

上一篇博客为了加速光线追踪启用了aabb包围盒 我们发现和包围盒相交容易 和每一块模型相交比较难 如果我们一旦和包围盒相交了 我们就需要和包围盒内的每一个物体相交 一样很耗时 所以我们在每一个包围盒内分出格子 如图
在这里插入图片描述
当我们与包围盒相交后 我们再与盒子内的格子(三维来说就是小方块)相交 当相交的格子内有物体时(我们会先把有物体的格子标记出来)我们就会判断一次光线和物体是否相交 这样就加快了速度

Oct-Tree(八叉树)

在这里插入图片描述
最左边那张图 八叉树就是把aabb包围盒切三刀分成八块 然后在每个子节点再切成八块 一直切到你不想切为止 图中只切了左上角那一部分 而什么时候不切了 就是看你自己定条件(比如说从图中二维的情况可以定 如果切出来的四块里面有三块是没有东西的 这个时候就不用再切了

KD-Tree

在这里插入图片描述
图中我们标的数字就是KD-Tree树每一轮切的 他会横竖交替着切(在三维上就是xyz轴交替着切) 每切一次把包围盒分成两部分 类似于二叉树
在这里插入图片描述
就像图中这样 蓝色绿色橙色那边也一样要分 只是不方便写出来 他分的具体位置没有定死 不是一定要在中点处分 每分一次要知道下一次是分什么轴(x,y,z)这个要按顺序来

KD-Tree难点

很难判断一个三角形是否在这个小的包围盒内 就如上面图中的 很难判定圆圈是否有一部分在分出来的区域内
比如说 圆圈有可能是一小部分在包围盒内 也有可能圆圈包住了包围盒
一个物体可能在多个小包围盒内(一个圆圈可能在多个方框内) 可能出现重复计算

BSP-Tree

相较于KD-Tree他的区别就是它可以斜着切

Bounding Volume Hierarchy(BVH)(现今最常用的)

他是通过物体来划分的

如何创建BVH

在这里插入图片描述
在这里插入图片描述
他是按照物体来划分小包围盒 (同样黄色那边还要划分)小包围盒之间可以出现重叠的情况 但他不会出现重复计算的问题 因为虽然有重叠的部分 但是不会出现一个三角形属于多个小包围盒(子节点)
步骤:
1.递归的把大包围盒的物体按一定规则分为两个部分(也可以按x,y,z轴依次划分,具体情况具体分析(可以每次按 分一个最长的轴))
2.把划分成的两个部分(划分的时候要把里面的物体分的尽量平均 就是分出来的两棵树里面的三角形尽量一样多 这个时候我们就需要找到第n/2个三角形的位置进行划分 有一个算法是快速选择可以尽快找到(也可也以之间排序 再找))重新计算包围
3.当叶子节点里面的三角形足够少的时候停止划分

创建好BVH后如何使用

在这里插入图片描述
先判断光线是否和该节点相交
如果不想交相交直接返回
如果相交则判断是否为叶子节点
如果是叶子节点 就判断光线和节点里面的物体是否发生碰撞
如果不是叶子节点 就通过递归分别判断该节点的两个子节点和光线 是否相交

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值