CN102184223A - 空间求交中的一种高效数据结构及其算法 - Google Patents
空间求交中的一种高效数据结构及其算法 Download PDFInfo
- Publication number
- CN102184223A CN102184223A CN2011101167770A CN201110116777A CN102184223A CN 102184223 A CN102184223 A CN 102184223A CN 2011101167770 A CN2011101167770 A CN 2011101167770A CN 201110116777 A CN201110116777 A CN 201110116777A CN 102184223 A CN102184223 A CN 102184223A
- Authority
- CN
- China
- Prior art keywords
- node
- data structure
- leaf node
- algorithm
- friendship
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开空间求交中的一种高效数据结构及其算法,其特征在于:该数据结构用来保存与每个叶子节点六个面相邻的节点,即为每个叶节点保存了六个线索,这样根据光线在当前叶节点的穿出平面沿着线索直接得到后继节点,避免了从根节点或中间节点到叶节点过程中的“远”子节点压栈操作,从而可显著提高运算效率。
Description
技术领域
本发明涉及一种数据结构及其算法,尤其是空间求交中的一种高效数据结构及其算法。
背景技术
空间求交算法是图像渲染算法中的核心。为了提高求交速度,往往采用加速结构。其中作为在光线跟踪渲染中广泛使用的一种层次树结构,KD树(K-Dimensional Tree:一种由二叉搜索树推广而来的用于多维检索的树的结构形式,K即为空间的维数)得到了诸多研究者的关注。作为一种基于空间剖分的加速结构,它采用轴对齐的分割面对场景空间进行剖分,递归地生成空间单元间的组织结构。光线跟踪算法中,当光线穿越空间单元时,就借助空间单元间的这种组织关系,跨越空单元来直接找到包含物体的单元,并进行光线与物体的求交测试,然后计算光强进行场景渲染。算法中计算量最大的部分就是光线与物体的求交运算。为提高光线和物体的求交速度,除了KD树外,常用的加速结构还有Grids(网格)和BVH(Bounding Volume Hierarchies,层次包围体)等。文献[4]对基于CPU的光线跟踪算法的加速结构进行比较,认为对于不同类型的测试场景平均而言,KD树是最快的。同时由于光线跟踪有着天然的并行性,为了利用基于SIMD(Single Instruction Multiple Data,单指令多数据)计算平台的GPU(Graphic Process Unit,图形处理单元)协处理器在并行计算上的优势,将KD树算法移植到GPU上已成为目前的研究热点。
KD树算法包括创建和遍历两个过程。好的KD树构建方法能够生成优化的树结构,从而提高遍历速度。传统上KD树的实现一般基于递归过程或者栈数据结构,但GPU缺少对递归过程的支持且堆栈存取效率低下。因此Foley等人[5]提出了基于GPU的无栈遍历算法KD-restart。算法中为省去堆栈结构,每次遍历都退回到根节点处重新开始,因此遍历效率低下。斯坦福大学Daniel Reiter Horn等人[6]在此基础上提出了short-stack遍历算法,采用push-down结构降低额外的节点访问次数,效率高于KD-restart,但仍然需要使用少量堆栈。
故,需要一种新的技术方案以解决上述问题。
发明内容
本发明目的是针对现有技术存在的不足,提供一种可提高运算效率的空间求交中的一种高效数据结构及其算法。
为实现上述目的,本发明空间求交中的一种高效数据结构可采用如下方案:
空间求交中的一种高效数据结构,该数据结构用来保存与每个叶子节点六个面相邻的节点,所述叶子节点以及与叶子节点六个面相邻的节点位于一个KD树中。
本发明与现有技术相比:本发明数据结构用来保存与每个叶子节点六个面相邻的节点,即为每个叶节点保存了六个线索,这样根据光线在当前叶节点的穿出平面沿着线索直接得到后继节点,避免了从根节点或中间节点到叶节点过程中的“远”子节点压栈操作,从而使用本发明所述空间求交中的一种高效数据结构可显著提高运算效率。
为实现上述目的,本发明空间求交中的一种高效数据结构的算法可采用如下方案:
根据所述的空间求交中的一种高效数据结构的算法,设每个叶子节点六个面相邻的节点即为该叶子节点的六个线索,将父亲节点的线索值继承给孩子节点,然后根据父亲节点的分割方式修正孩子节点的两个线索;进行光线遍历跟踪时,遍历时如果光线经过了叶子节点且和此叶子节点中的图元无交点,则根据光线的穿出平面及该穿出平面的线索值得到下一个需遍历的节点。
本发明与现有技术相比:本发明中数据结构用来保存与每个叶子节点六个面相邻的节点,即为每个叶节点保存了六个线索,进行光线遍历跟踪时,可根据光线在当前叶节点的穿出平面沿着线索直接得到后继节点,避免了从根节点或中间节点到叶节点过程中的“远”子节点压栈操作,从而使用本发明所述空间求交中的一种高效数据结构的算法可显著提高运算效率。
附图说明
图1是本发明中节点二维结构与层次关系示意图。
具体实施方式
下面结合附图和具体实施方式,进一步阐明本发明,应理解下述具体实施方式仅用于说明本发明而不用于限制本发明的范围,在阅读了本发明之后,本领域技术人员对本发明的各种等价形式的修改均落于本申请所附权利要求所限定的范围。
本发明公开一种空间求交中的一种高效数据结构及其算法,为了保存线索信息,在建立KD树时,在节点信息中增加一个数据结构nodebox,用来保存与每个叶子节点六个面相邻的节点(此节点可能是叶节点,也有可能是中间节点),即为每个叶节点保存六个线索。可以先将父亲节点的线索值继承给孩子节点,然后根据父亲节点的分割方式修正孩子节点的两个线索,即左孩子的右线索就是右孩子,如此类推。
请参阅图1所示,以节点8为例来说明子节点如何继承父节点的nodebox并进行更新的。根节点1的nodebox={-1,-1,-1,-1},其分割平面垂直于X轴,子节点2和3首先继承了根节点1的nodebox,然后在X轴方向上更新子节点2和3的nodebox。节点2的nodebox更新为{-1,3,-1,-1},节点3的nodebox更新为{2,-1,-1,-1}。此时,将节点3压入栈中。继续对节点2进行分割,其分割平面垂直于Y轴,分为4和5两个子节点。节点4继承节点2的nodebox,并更新为{-1,3,-1,5};节点5也继承了节点2的nodebox,并更新为{-1,3,4,-1}。然后,将节点5压栈,继续对节点4进行分割,其分割平面垂直于Y轴,得到子节点8和9。节点8的nodebox先继承节点4的nodebox{-1,3,-1,5},然后更新为{-1,3,-1,9},节点9的nodebox也继承节点4的nodebox,并更新为{-1,3,8,5}。
光线跟踪中,遍历时如果光线经过了某个叶节点且和此叶节点中的图元无交点,可根据光线的穿出平面及该面的线索值得到下一个需遍历的节点。由于建树时线索的获得采用了继承的方式,因此此节点与KD树标准遍历算法中的栈顶节点完全相同。
现在的关键就是需得到穿出平面,而穿出平面的实质就是最近一次导致分叉状态的分割平面。由于每个节点有六个穿出平面,可用一个三比特的索引值来表示。因此我们定义了一个长整型变量SplitStack来保存每次分叉状态所导致的分割平面,最低三个比特就是最近一次分割平面。这样当光线在KD树中遍历时,如光线横跨当前节点的分割面,就不再需要将“远”子节点和t_split,t_max压入堆栈,只需要将分割平面更新存入SplitStack变量即可。
将线索KD树算法与Foley和Horn等人提出的算法进行了比较,各算法的效率比较如表1所示。
表1算法效率比较
从表1中可以看出,为节点增加了索引后,能大幅度提高算法的效率。例如,kitchen场景中,采用push-down算法、kd-restart算法及short-stack算法,每秒计算的光线数为分别为21.4×106、17.1×106和27.3×106,而索引KD树算法每秒计算的光线数为139.8×106,分别提高了6.5、8.1和5.1倍;对于Robots场景,索引KD树算法的效率比这三种算法又分别提高了3.1、4.2和2.5倍。并且,本发明优选在计算中利用高效纹理内存操作替代低效的递归堆栈操作,不仅避免了栈的使用,而且遍历时根据索引值能快速找到后继节点,无需退回到根节点处,从而减少无效遍历的次数,显著地提高遍历效率。
Claims (4)
1.空间求交中的一种高效数据结构,其特征在于:该数据结构用来保存与每个叶子节点六个面相邻的节点,所述叶子节点以及与叶子节点六个面相邻的节点位于一个KD树中。
2.根据权利要求1所述的空间求交中的一种高效数据结构,其特征在于:所述与叶子节点六个面相邻的节点的类型为叶节点或中间节点。
3.根据权利要求1所述的空间求交中的一种高效数据结构的算法,其特征在于:设每个叶子节点六个面相邻的节点即为该叶子节点的六个线索,将父亲节点的线索值继承给孩子节点,然后根据父亲节点的分割方式修正孩子节点的两个线索;进行光线遍历跟踪时,遍历时如果光线经过了叶子节点且和此叶子节点中的图元无交点,则根据光线的穿出平面及该穿出平面的线索值得到下一个需遍历的节点。
4.根据权利要求3所述的空间求交中的一种高效数据结构的算法,其特征在于:用一个三比特的索引值来表示所述穿出平面。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2011101167770A CN102184223A (zh) | 2011-05-06 | 2011-05-06 | 空间求交中的一种高效数据结构及其算法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2011101167770A CN102184223A (zh) | 2011-05-06 | 2011-05-06 | 空间求交中的一种高效数据结构及其算法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN102184223A true CN102184223A (zh) | 2011-09-14 |
Family
ID=44570400
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2011101167770A Pending CN102184223A (zh) | 2011-05-06 | 2011-05-06 | 空间求交中的一种高效数据结构及其算法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102184223A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103761273A (zh) * | 2014-01-08 | 2014-04-30 | 兴天通讯技术(天津)有限公司 | 树型结构中节点属性的配置方法及其配置系统 |
CN109241151A (zh) * | 2017-06-29 | 2019-01-18 | 阿里巴巴集团控股有限公司 | 一种数据结构的转换方法、装置及电子设备 |
-
2011
- 2011-05-06 CN CN2011101167770A patent/CN102184223A/zh active Pending
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103761273A (zh) * | 2014-01-08 | 2014-04-30 | 兴天通讯技术(天津)有限公司 | 树型结构中节点属性的配置方法及其配置系统 |
CN109241151A (zh) * | 2017-06-29 | 2019-01-18 | 阿里巴巴集团控股有限公司 | 一种数据结构的转换方法、装置及电子设备 |
CN109241151B (zh) * | 2017-06-29 | 2022-05-10 | 阿里巴巴集团控股有限公司 | 一种数据结构的转换方法、装置及电子设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102663801B (zh) | 一种提高三维模型渲染性能的方法 | |
US20130235049A1 (en) | Fully parallel in-place construction of 3d acceleration structures and bounding volume hierarchies in a graphics processing unit | |
CN103093499A (zh) | 一种适用于网络传输的城市三维模型数据组织方法 | |
CN104699946B (zh) | 一种游戏场景的管理方法及装置 | |
CN101430693B (zh) | 三角网格曲面模型的空间查询方法 | |
KR100903777B1 (ko) | 3차원 광선 추적 시스템에서 적응형 다중 계층 케이디-트리구조 알고리즘을 이용한 광선 추적 방법 및 장치 | |
CN113468286A (zh) | 一种基于三角面片个数划分的三维金字塔构建方法 | |
CN113868476A (zh) | 一种基于局部密度的八叉树点云预处理方法 | |
CN114485611B (zh) | 基于北斗网格码的三维空间最短路径规划方法和装置 | |
CN102184223A (zh) | 空间求交中的一种高效数据结构及其算法 | |
Chen et al. | Parallelnn: A parallel octree-based nearest neighbor search accelerator for 3d point clouds | |
CN102831241A (zh) | 产品逆向工程数据动态索引多目标自适应构建方法 | |
CN115346005B (zh) | 基于嵌套包围盒概念用于物面网格的数据结构构建方法 | |
CN114119882B (zh) | 飞行器动态流场分析中高效的嵌套网格宿主单元搜索方法 | |
CN115801024A (zh) | 局部等距性优化球面格网的编码方法、系统、装置及介质 | |
CN104484404A (zh) | 一种改善分布式文件系统中地理栅格数据文件处理方法 | |
CN112052359B (zh) | 一种基于mno树的实时点云编辑方法 | |
CN107908696A (zh) | 一种并行高效的基于网格与密度的多维空间数据聚类算法griden | |
CN111080509B (zh) | 三维裁剪Voronoi图的多线程并行计算方法、系统 | |
CN109003222B (zh) | 一种异步高能效图计算加速器 | |
CN112148830A (zh) | 一种基于最大区域网格的语义数据存储与检索的方法及装置 | |
CN117331947B (zh) | 一种多维自适应增量r树索引构建方法 | |
CN115937438B (zh) | 城市三维模型轻量化方法、系统、电子设备及存储介质 | |
CN109062679B (zh) | 一种面向并行处理的矢量数据通用划分方法 | |
CN108809726B (zh) | 盒覆盖节点的方法和系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C12 | Rejection of a patent application after its publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20110914 |