16、计算机图形学——基于AABB进行光线追踪的加速(下)
三、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进行光线追踪的加速(下)相关推荐
- 15、计算机图形学——基于AABB进行光线追踪的加速(上)
white-styled光线追踪需要计算光线与每个三角形面的交点,并投影到像素上,并且还要考虑光线的反射和折射,所以,计算量很大(GPU你忍一下) 那么,如何降低white-styled光线追踪的计算 ...
- 计算机图形学——OpenGL学习系列之绘制3D下的小桌子
计算机图形学--OpenGL学习系列之绘制3D下的小桌子 做的一个小练习,主要用到了几何变换还有gl自带的一个绘制立方体的函数,顺便体会一下glPush和glPop的用法.另外,从2D到3D,开心到飞 ...
- 计算机图形学 | 基于MFC和二维变换的画图软件
文章目录 基于MFC和二维变换的画图软件 摘 要 设 计 1 程序总体结构 1.1 总体结构设计 1.1.1 绘图设计 1.1.2 变换设计 2 程序实现 2.1 鼠标绘图的消息映射 2.2 图形绘制 ...
- 【计算机图形学】深入浅出讲解光线追踪(Ray Tracing)
CG基础与光学基础 ▍问自己一句,3D场景为何可以被绘制到2D的画布/屏幕上? emmmmm-没有那么复杂,这几乎是一个纯几何的过程: 透视投影.将三维物体的特征点与眼睛连接成一条线,这条线会穿过画布 ...
- 计算机图形学流体仿真mac网格,正交网格下不可压缩流体的图形学模拟
摘要: 本文主要讨论了正交网格下不可压缩流体的图形学模拟.基于物理的动画模拟出像水,烟和火这样的流体现象在视觉效果上越来越重要,而且在实时游戏中也开始产生影响. 本研究主要内容包括:第一章阐述了用于描 ...
- GAMES101-现代计算机图形学入门09(光线追踪)
基本光线跟踪算法 光线定义 首先先要对光线定义 ●光沿直线传播: ●不发生碰撞: ●是从光源到人眼的--对于第三个性质,我们在根据光路可逆性,会采取从人眼到光源的方法 光线追踪是从人的眼睛(摄像机)出 ...
- 计算机图形学----基于3D图形开发技术 (韩正贤 著)
第1章 游戏模型 第2章 顶点处理机制 第3章 光栅化操作 第4章 片元处理和输出合并 第5章 光照和着色 第6章 参数曲线和表面 第7章 着色器模型 第8章 图像纹理 第9章 凹凸贴图 第10章 高 ...
- 计算机图形学开发框架,计算机图形学-基于3d图形开发技术
第一张 游戏模型 1.底层渲染图形API包括Direct3D(windows)和Opengl(跨平台框架),这些API定义了对GPU的操作接口,Direct3d仅支持三角形网格,Opengl支持同面的 ...
- 【计算机图形学】实验:VB.net环境下的综合绘图与交互技术案例教程
一.实验目的 掌握在.net环境下的绘图软件界面设计与交互技术. 二.实验准备 学习在.net环境下的界面设计的一般原理与交互技术等基本知识. 三.实验内容 将前7个实验内容集成到一个界面下,如直线段 ...
最新文章
- java中的Executors简介与多线程在网站上逐步优化的运用案例
- 2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。
- MAT之SVM/BP:SVR(better)和BP两种方法比较且实现建筑物钢筋混凝土抗压强度预测
- apply方法和call方法的详解2
- linux——Shell脚本说明、创建、执行、调试
- 大话数据结构 :排序
- 需求分析与建模最佳实践_社交媒体和主题建模:如何在实践中分析帖子
- 要做PPT,一直找不到资源?
- threadlocals_如何使用ThreadLocals射击自己
- 关于计算机类课程实验教学的思考
- 用户登录python_python用户登录系统
- gin post 数据参数_golang--gin获取post里body的参数
- opencv 智能答卷识别系统(一)
- oracle 连接数_Oracle多租户数据库资源管理,就这么简单
- 学习Java必须避开的十大致命雷区,新手入门千万不要踩!
- 订单管理_04删除订单信息流程
- 1513_人月神话阅读笔记_再论没有银弹
- IDEA修改Git仓库远端地址,处理服务器ip发生变化的情况
- 荣耀年度旗舰曝光!麒麟990+LCD屏下指纹+40w快充,或将11月发布
- 【财富空间】华为HR总裁李杰:如何打造一支胜任的项目经理队伍?