三、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

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

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

  1. 15、计算机图形学——基于AABB进行光线追踪的加速(上)

    white-styled光线追踪需要计算光线与每个三角形面的交点,并投影到像素上,并且还要考虑光线的反射和折射,所以,计算量很大(GPU你忍一下) 那么,如何降低white-styled光线追踪的计算 ...

  2. 计算机图形学——OpenGL学习系列之绘制3D下的小桌子

    计算机图形学--OpenGL学习系列之绘制3D下的小桌子 做的一个小练习,主要用到了几何变换还有gl自带的一个绘制立方体的函数,顺便体会一下glPush和glPop的用法.另外,从2D到3D,开心到飞 ...

  3. 计算机图形学 | 基于MFC和二维变换的画图软件

    文章目录 基于MFC和二维变换的画图软件 摘 要 设 计 1 程序总体结构 1.1 总体结构设计 1.1.1 绘图设计 1.1.2 变换设计 2 程序实现 2.1 鼠标绘图的消息映射 2.2 图形绘制 ...

  4. 【计算机图形学】深入浅出讲解光线追踪(Ray Tracing)

    CG基础与光学基础 ▍问自己一句,3D场景为何可以被绘制到2D的画布/屏幕上? emmmmm-没有那么复杂,这几乎是一个纯几何的过程: 透视投影.将三维物体的特征点与眼睛连接成一条线,这条线会穿过画布 ...

  5. 计算机图形学流体仿真mac网格,正交网格下不可压缩流体的图形学模拟

    摘要: 本文主要讨论了正交网格下不可压缩流体的图形学模拟.基于物理的动画模拟出像水,烟和火这样的流体现象在视觉效果上越来越重要,而且在实时游戏中也开始产生影响. 本研究主要内容包括:第一章阐述了用于描 ...

  6. GAMES101-现代计算机图形学入门09(光线追踪)

    基本光线跟踪算法 光线定义 首先先要对光线定义 ●光沿直线传播: ●不发生碰撞: ●是从光源到人眼的--对于第三个性质,我们在根据光路可逆性,会采取从人眼到光源的方法 光线追踪是从人的眼睛(摄像机)出 ...

  7. 计算机图形学----基于3D图形开发技术 (韩正贤 著)

    第1章 游戏模型 第2章 顶点处理机制 第3章 光栅化操作 第4章 片元处理和输出合并 第5章 光照和着色 第6章 参数曲线和表面 第7章 着色器模型 第8章 图像纹理 第9章 凹凸贴图 第10章 高 ...

  8. 计算机图形学开发框架,计算机图形学-基于3d图形开发技术

    第一张 游戏模型 1.底层渲染图形API包括Direct3D(windows)和Opengl(跨平台框架),这些API定义了对GPU的操作接口,Direct3d仅支持三角形网格,Opengl支持同面的 ...

  9. 【计算机图形学】实验:VB.net环境下的综合绘图与交互技术案例教程

    一.实验目的 掌握在.net环境下的绘图软件界面设计与交互技术. 二.实验准备 学习在.net环境下的界面设计的一般原理与交互技术等基本知识. 三.实验内容 将前7个实验内容集成到一个界面下,如直线段 ...

最新文章

  1. java中的Executors简介与多线程在网站上逐步优化的运用案例
  2. 2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。
  3. MAT之SVM/BP:SVR(better)和BP两种方法比较且实现建筑物钢筋混凝土抗压强度预测
  4. apply方法和call方法的详解2
  5. linux——Shell脚本说明、创建、执行、调试
  6. 大话数据结构 :排序
  7. 需求分析与建模最佳实践_社交媒体和主题建模:如何在实践中分析帖子
  8. 要做PPT,一直找不到资源?
  9. threadlocals_如何使用ThreadLocals射击自己
  10. 关于计算机类课程实验教学的思考
  11. 用户登录python_python用户登录系统
  12. gin post 数据参数_golang--gin获取post里body的参数
  13. opencv 智能答卷识别系统(一)
  14. oracle 连接数_Oracle多租户数据库资源管理,就这么简单
  15. 学习Java必须避开的十大致命雷区,新手入门千万不要踩!
  16. 订单管理_04删除订单信息流程
  17. 1513_人月神话阅读笔记_再论没有银弹
  18. IDEA修改Git仓库远端地址,处理服务器ip发生变化的情况
  19. 荣耀年度旗舰曝光!麒麟990+LCD屏下指纹+40w快充,或将11月发布
  20. 【财富空间】华为HR总裁李杰:如何打造一支胜任的项目经理队伍?

热门文章

  1. 3.3. shutdown
  2. 几何画板表现两集合的差集的教程
  3. Android之文件数据存储
  4. 诊断Java中的内存泄露
  5. Prim算法和Kruskal算法求最小生成树
  6. #27 回文数字 Palindrome Detector
  7. windows 正在查找bash.exe
  8. elegance suites bangkok info
  9. Java基础--二维数组
  10. POJ1144——网络(求割点)