14 Games101 - 笔记 - 光线追踪(利用包围盒技术加速光线追踪(KD-Tree and BVH)

14 光线追踪(利用包围盒技术加速光线追踪(KD-Tree and BVH)

在上一节中,我们介绍了whited-style光线追踪的原理,以及实现细节。相比与光栅化中所使用的的Blinn-Phong模型,光线追踪显著了提升了图像质量,但随之而来的问题是渲染速度过慢。因为在判断光线与场景交点的时候,需要去进行所有三角形面与光线的求交,而且这仅仅是对一个像素而言。 那么总体来说光是进行光线与三角形的求交这样一个计算过程就一共要: 像素数量x三角形面数量x弹射次数这么多次,如下图这样一个场景,一共就有10.7M的三角形面,你可以想象一共要多少次求交运算吗?

img

因此必须要寻求一些办法加速光线追踪的过程!

1 轴对齐包围盒(Axis-Aligned Bounding Box) - AABB

AABB(即轴对齐包围盒)提出的motivation是十分自然的,当有的光线显然不会与一个物体相交的时候,那么自然也没有必要去遍历该物体的所有三角形面,因此利用一个包围盒包住该物体,在与该物体的三角面计算求交之前先判断光线是否与包围盒相交,倘若连包围盒都与光线没有交点的话,那么显然不会与物体的三角面有交点。

img

而所谓AABB也是一种包围盒,也是由三对平面的交集构成,只不过AABB的任意一对平面都与x-axis,y-axis或者z-axis垂直,所以称之为轴对齐包围盒。如下图所示:

image-20240327184237397

之所以这么设置的原因是为了方便进行光线与包围盒的求交运算!既然谈到了光线与包围盒的求交,那我们就来看看该过程如何实现。

我们以2D AABB为例子,因此只有x,y两对平面(二维应该其实是线,不过为了统一性这里依然称为平面,不影响理解),3D情况可类推:

image-20240327184359209

首先如上图最左边所示,求出光线与一对x平面的交点,将先进入的交点(偏小的那个)记为 tmin, 后出去的交点(偏大的那个)记为 tmax,紧接着如中间图所示计算出光线与y平面的两个交点同样记为另外一组tmin, tmax,当然计算的过程中要注意如果任意的 t < 0,那么这代表的是光线反向传播与对应平面的交点。

image-20240327184546325

在这里插入图片描述

tips:在上一节就已经提到过光线与平面的求交,这里自然可以直接套用,但可以看看AABB为我们求交所带来的计算效率的提升:

image-20240328090342773

2 均匀空间划分Uniform Spatial Partitions (Grids)

在介绍完AABB之后,相信大家已经了解了其原理及实现方法,那接下来我们就要介绍一些利用AABB的加速方法。当然有些读者可能会有些疑惑,明明已经可以通过事先对每个物体求一个包围盒,在与三角形面求交之前先对包围盒求交,这样不是已经可以达到不错加速效果了吗?作者认为可以考虑这样两个极端情况:

1 整个场景只有一个极其复杂的单一人物模型,那么只对这一个物体做包围盒的话,相当于对效率没有任何提升

2 整个场景充斥着大量的细小模型,如草,花之类的,每个模型可能只有很少的面,如果此时对每个物体求包围盒,得到的包围盒数量会相当之多,对于光线追踪效率来说效率提升有限

基于以上两点考虑,AABB并不应只局限于以物体模型为单位,可以更加精细的考虑到以三角面为单位。另外对于场景的许许多多包围盒来说应该要有一种数据结构将其统领起来。 因此如何更好的划分场景形成不同的AABB,使得划分之后的AABB能够更好的加速光线追踪,这就是接下来要考虑的问题关键! (以下的划分形成的AABB更是一种general的概念,可能不会严格包围物体,读者不必纠结)

那么接下来就从最简单的划分方法,均匀空间划分开始介绍。 第一步对所要考虑的场景找一个包围盒:

第二步均匀划分这个大包围盒:

image-20240328090651787

第三步在每个重叠小包围盒上存储物体模型信息

image-20240328090721308

紧接着,根据光线的方向与判断出所有相交的方格(这一步可以利用bresenham算法),倘若方格中存储有物体,再进一步与方格中的物体模型或是三角形面求交。

image-20240328090758551

以上就是均匀空间划分的全部过程了,简单来说就是将空间划分为多个均匀的小的AABB,再根据光线方向找出相交grid(这一步并不需要判断所有方格,正如上文提示,可以用brenham类似的方法来做),再判断grid中是否存储了模型信息,若有则进一步求交。(这种划分方法假设了找出相交方格要比直接判断与物体求交相对容易,因此划分方格数的多少也是性能的关键,方格太少,没有加速效果,方格太多,判断与方格的求交可能会拖累效率)

因此这种方法最适合的场景就是空间中均匀布满了三角形面,如下图这种场景:

image-20240328090926320

如果说场景较为空旷,物体较小且分离得比较开,那么均匀分割的效果就会很差了,因为会有很多无效的方格与光线的求交过程。

3 KD-Tree空间划分

在具体介绍KD-Tree空间划分的方法之前,首先来看看一些常用的空间划分方法:

image-20240328091129169

第一种Oct-Tree,也就是八叉树,每次将空间分为8个相等的部分,再递归的对子空间进行划分,因为图中是2维例子,所以只划分了4部分。当划分的子空间足够小或是空间中三角形面的数量很少的时候会停止划分。这种方法的显著缺点是,随着维度的上升划分的空间数量会呈指数级增长。

第二种KD-Tree,也是本小节将要主要介绍的方法,其每次将空间划分为两部分,且划分依次沿着x-axis,y-axis,z-axis,即如图中所示,第一次横着将2维空间分为上下,第二次再竖着将上下两个子空间分别划分为左右部分,依次递归划分,终止条件与八叉树类似,细节问题之后按具体例子详解。

第三种BSP-Tree,其与KD-Tree类似,唯一不同的是划分不再沿着固定一轴,可以任意方向划分,缺点自然是划分的空间没有规则性,求交困难。

接下来从一个例子具体介绍KD-Tree 第一步将空间分为两部分

image-20240328091255388

第二步对左右两个子空间换个方向再分为两部分(这里只画出了有半部分,其实左边也是一样)

image-20240328091331924

如此递归的划分下去,且在划分过程当中遵循这样几点:

1 依次沿着x-axis,y-axis,z-axis划分,使得空间被划分的更加平衡

2 划分的位置由空间中三角面的分布决定,具体细节不展开

3 叶子节点存储对应空间的所有物体或三角面信息,中间节点仅存储指针指向两个子空间

4 当划分空间太小或是子空间内只有少量三角形则停止划分

image-20240328091421036

当KD-Tree建立完成之后,如何进行光线与物体求交判断呢?过程如下: 第一步判断光线是否与最外层的包围盒相交

image-20240328091623020

如果相交进一步判断是否与对应的两个子空间相交

在这里插入图片描述

注意!因图中做了简化,最大包围盒的左半边并没继续进行划分(实际上应该要划分的),所以左半部分对应的1号空间是叶子节点,如果光线与之相交,进一步判断与存储与叶子节点的物体信息求交。左半边判断完之后,接着判断右半部分

在这里插入图片描述

同样如果对于有半部分存在相交情况,则对于右半部分的所有子空间,递归的执行这个步骤即可

image-20240328091759517

整个过程如下图所示。

image-20240328091904520

优点: 利用KD-Tree的结构来构建AABB的好处是倘若光线与哪一部分空间不相交,那么则可以省略该部分空间所有子空间的判断过程,在原始的纯粹的AABB之上更进一步提升了加速效率。

缺点: 缺点是判断包围盒与三角面的是否相交较难,因此划分的过程不是那么想象的简单,其次同一个三角面可能被不同的包围盒同时占有,这两个不同包围盒内的叶节点会同时存储这一个三角形面

综上所述,我们详细介绍了利用AABB的均匀划分方法,KD-Tree划分方法,也简略提及了Oct-Tree以及BSP-Tree。但其实这些技术在业界之中以及逐渐不再被多使用,但依然有很多借鉴参考价值,在下面一节会介绍一种现在被广泛使用的加速光线追踪的方法,即Bounding Volume Hierarchy。

4 Bounding Volume Hierarchy

BVH与前几种方法最显著的区别就是,不再以空间作为划分依据,而是从对象的角度考虑,即三角形面,过程如下:

第一步同样找出场景的整体包围盒作为根节点。

image-20240328092052515

第二步找到合适的划分点,将最大包围盒内的三角形面分为两部分,再分别重新就算新的包围盒

image-20240328092113908

注意到这里,包围盒会重叠,但一个三角形面只会被存储在唯一的包围盒内,而这也就解决了KD-Tree的缺点! 接下来与KD-Tree的建立类似,递归的对所有子空间重复该步骤

image-20240328092142188

image-20240328092157029

最终可以建立出如上图的所示的树形结构,同样为了画图方便,只进行了左半部分的划分,右半部分其实同理。

tips:

  1. 每次划分一般选择最长的那一轴划分,假设是x轴,那么划分点选择所有三角面的重心坐标在x坐标上的中位数进行划分,如此便能保证划分的三角形左右两边三角形数量尽可能差不多,当然也就使得树形结构建立的更加平衡,深度更小,平均搜索次数更少,提高了效率,这些都是数据结构的知识,相信大家掌握的都不错,就不多赘述了。
  2. 与KD-Tree一样,中间节点不存储物体三角面信息,只在叶节点中存储,终止条件可设定为当前包围盒内三角形数量足够少 (e.g. 5个)

最后给出这样一个BVH加速结构遍历节点的伪代码参考:

image-20240328092402849

总结

以上就是本节的所有内容,首先详细介绍了加速光线追踪的基础即AABB,接着说明了为什么需要在AABB的基础之上设计别的加速方法,在这里具体介绍了Uniform spatial partition,KD-Tree,以及被广泛使用的BVH结构。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/499082.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

uniapp实现的数据选择器,支持H5、微信小程序

采用uniapp-vue3实现的数据选择器&#xff0c;支持H5、微信小程序&#xff08;其他小程序未测试过&#xff0c;可自行尝试&#xff09; 支持本地自定义过滤、远程接口过滤&#xff0c;为了避免弹窗面板超出边界的情况&#xff0c;自动计算弹窗面板安置的位置&#xff08;在微信…

Java八股文(设计模式)

Java八股文の设计模式 设计模式 设计模式 什么是设计模式&#xff1f;请列举一些常见的设计模式。 设计模式是软件设计中常用的一种思维模式&#xff0c;它描述了一类具有相似特征和解决思路的问题。 常见的设计模式包括单例模式、工厂模式、观察者模式、装饰器模式等。 请解释…

博士推荐 | 拥有8年以上的材料和电池开发经验的电池材料专家

编辑 / 木子 审核 / 朝阳 伟骅英才 伟骅英才致力于以大数据、区块链、AI人工智能等前沿技术打造开放的人力资本生态&#xff0c;用科技解决职业领域问题&#xff0c;提升行业数字化服务水平&#xff0c;提供创新型的产业与人才一体化服务的人力资源解决方案和示范平台&#x…

2024 年多链代币开发对您的业务有何好处

2024 年&#xff0c;多链代币开发将成为寻求增强数字化影响力并释放区块链领域新机遇的企业的关键战略。通过利用多个区块链&#xff0c;公司可以显着提高其代币的可扩展性、互操作性和安全性。这种方法不仅提高了交易速度并降低了费用&#xff0c;还使企业能够利用更广泛的用户…

港大新工作 HiGPT:一个模型,任意关系类型 !

论文标题&#xff1a; HiGPT: Heterogeneous Graph Language Model 论文链接&#xff1a; https://arxiv.org/abs/2402.16024 代码链接&#xff1a; https://github.com/HKUDS/HiGPT 项目网站&#xff1a; https://higpt-hku.github.io/ 1. 导读 异质图在各种领域&#xf…

编译与链接(想了解编译与链接,那么看这一篇就足够了!)

前言&#xff1a;在我们练习编程的时候&#xff0c;我们只需要将代码写入、运行&#xff0c;就可以得到计算之后的结果了&#xff0c;但是你有没有想过&#xff0c;为什么就可以得到计算之后的结果呢&#xff0c;它的底层又到底是什么呢&#xff1f; ✨✨✨这里是秋刀鱼不做梦的…

气象预测新篇章:Python人工智能的变革力量

Python是功能强大、免费、开源&#xff0c;实现面向对象的编程语言&#xff0c;在数据处理、科学计算、数学建模、数据挖掘和数据可视化方面具备优异的性能&#xff0c;这些优势使得Python在气象、海洋、地理、气候、水文和生态等地学领域的科研和工程项目中得到广泛应用。可以…

数据结构与算法分析2栈、队列

1.栈和队列本质上都是表&#xff0c;所以他们都有两种实现方式&#xff0c;链表实现和数列实现。栈的特点是后进先出。 2.栈的实现 3.应用有&#xff1a; 4.栈的危险操作&#xff1a;用尽栈空间&#xff0c;导致内容占用到别的寄存器里面去了&#xff0c;从而出现异常。还有尾…

武汉星起航:借亚马逊平台优势助力商家精准营销

在全球经济一体化的背景下&#xff0c;跨境电商已成为推动国际贸易发展的重要引擎。作为跨境电商领域的佼佼者&#xff0c;亚马逊平台以其全球化销售渠道和强大的数据分析能力&#xff0c;为商家提供了前所未有的商机。武汉星起航电子商务有限公司深知亚马逊平台的优势&#xf…

企业为什么要用MES管理系统来升级改造生产车间

随着信息技术的迅猛发展&#xff0c;工业制造领域正经历着深刻的变革。在这个大背景下&#xff0c;MES管理系统的引入和应用&#xff0c;已成为企业升级改造生产车间、提升竞争力的关键手段。本文将从多个维度探讨企业为何要用MES管理系统来升级改造生产车间。 MES管理系统能够…

查询优化-提升子查询-UNION类型

瀚高数据库 目录 文档用途 详细信息 文档用途 剖析UNION类型子查询提升的条件和过程 详细信息 注&#xff1a;图片较大&#xff0c;可在浏览器新标签页打开。 SQL: SELECT * FROM score sc, LATERAL(SELECT * FROM student WHERE sno 1 UNION ALL SELECT * FROM student…

云计算——大模型应用发展的“理想支点”

在数字化浪潮中&#xff0c;人工智能技术的突飞猛进为千行百业带来了前所未有的转型机遇。近期出现的Sora模型能够根据文本描述生成高质量的视频内容&#xff0c;为多领域带来大模型技术飞跃的冲击。如何推进大模型应用&#xff0c;已成为各行业面临的重要课题之一。 打造硬核…

亚信安慧AntDB数据库分布式架构剖析之snapshot sender进程

本文主要介绍亚信安慧AntDB数据库的分布式架构下的特有进程之snapshot sender进程的设计&#xff0c;与snapshot receiver进程是一对&#xff0c;也是分布式架构的核心进程之一。 进程简介 与Snapshot Receiver进程相对应&#xff0c;该进程的作用从整体上看也只包含两个方面&a…

Shopee 4月市场趋势及选品分析,shopee虾皮品类爆款预测

废话不多说&#xff0c;马上进入本周Shopee“现象爆品”、“热门爆品趋势”及“热搜词周榜"版块&#xff0c;帮助商家及时了解Shopee最新市场现状&#xff0c;掌握选品趋势。 1 现象爆品 近几来&#xff0c;为健康“买单”&#xff0c;已经成为全年龄层群体的“刚需”。 图…

第P1周:实现mnist手写数字识别

>- **&#x1f368; 本文为[&#x1f517;365天深度学习训练营](https://mp.weixin.qq.com/s/0dvHCaOoFnW8SCp3JpzKxg) 中的学习记录博客** >- **&#x1f356; 原作者&#xff1a;[K同学啊 | 接辅导、项目定制](https://mtyjkh.blog.csdn.net/)** 目录 一、前言 二、我…

青年才俊的聚集地 带你一览DATE 2024会议现场

会议之眼 快讯 第27届欧洲设计、自动化和测试会议&#xff08;Design, Automation and Test in Europe Conference &#xff09;已于2024 年 3 月 25 日-27日在西班牙瓦伦西亚圆满举办&#xff01;DATE第一届会议是在 1998 年在法国巴黎召开的。从那时起&#xff0c;DATE 会议…

ICLR 2024 | FeatUp: A Model-Agnostic Framework for Features at Any Resolution

论文&#xff1a;https://arxiv.org/abs/2403.10516代码&#xff1a;https://github.com/mhamilton723/FeatUp 背景动机 深层特征是计算机视觉研究的基石&#xff0c;捕获图像语义并使社区即使在零或少样本情况下也能解决下游任务。然而&#xff0c;这些特征通常缺乏空间分辨率…

俄罗斯深陷芯片自主困境,良率仅5成 |百能云芯

俄罗斯的芯片产业一直以来都面临着诸多挑战&#xff0c;尤其是在当前的国际形势下&#xff0c;这些挑战更加凸显。随着俄乌冲突的爆发&#xff0c;西方国家对俄罗斯实施了一系列经济制裁&#xff0c;导致俄罗斯科技产业受到了严重影响。据了解&#xff0c;俄国最大的本土芯片厂…

vue3使用vuedraggable实现拖拽(有过渡)

1. 安装与使用 vue中vuedraggable安装&#xff1a; pnpm i -S vuedraggablenext或者 yarn add vuedraggablenext注意&#xff1a;vue2和vue3安装的是不同版本的vuedraggable&#xff0c;写法上也会有一些区别。 比如在vue3中使用拖拽&#xff0c;要以插槽的方式&#xff0c;…

C# 操作 Word 全域查找且替换(含图片对象)

目录 关于全域查找且替换 Word应用样本 SqlServer数据表部分设计样本 范例运行环境 配置Office DCOM 设计实现 组件库引入 实现原理 查找且替换的核心代码 窗格内容 页眉内容 页脚内容 形状内容 小结 关于全域查找且替换 C#全域操作 Word 查找且替换主要包括如下…