CN102426710A - 图形处理器上的表面积启发式构建kd树并行方法 - Google Patents

图形处理器上的表面积启发式构建kd树并行方法 Download PDF

Info

Publication number
CN102426710A
CN102426710A CN2011102414192A CN201110241419A CN102426710A CN 102426710 A CN102426710 A CN 102426710A CN 2011102414192 A CN2011102414192 A CN 2011102414192A CN 201110241419 A CN201110241419 A CN 201110241419A CN 102426710 A CN102426710 A CN 102426710A
Authority
CN
China
Prior art keywords
node
tree
parallel
formation
iqueue
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
Application number
CN2011102414192A
Other languages
English (en)
Inventor
吴哲锋
赵福凯
刘新国
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Zhejiang University ZJU
Original Assignee
Zhejiang University ZJU
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Zhejiang University ZJU filed Critical Zhejiang University ZJU
Priority to CN2011102414192A priority Critical patent/CN102426710A/zh
Publication of CN102426710A publication Critical patent/CN102426710A/zh
Pending legal-status Critical Current

Links

Images

Landscapes

  • Image Generation (AREA)
  • Processing Or Creating Images (AREA)

Abstract

本发明公开了一种图形处理器上的表面积启发式构建KD树并行方法。传统的CPU上的串行方法却不能很好地发挥GPU流架构的强大并行计算能力。本发明方法包括:输入3D场景数据描述;KD-Tree空间剖分结构的数据结构设计;SAH优化函数并行计算;并行三角面片切割和排序。本发明能够在GPU流架构上高效并行地对输入的3D模型构建高质量的KD-Tree空间剖分结构,其效率要比传统的CPU上的串行和并行方法都要高,而且在对光线求交的加速比方面要远远高于当前GPU上较流行的BVH-Tree加速方法。

Description

图形处理器上的表面积启发式构建KD树并行方法
技术领域
本发明涉及图形处理器并行计算领域,尤其涉及3D模型空间剖分结构的并行构建方法。
背景技术
在计算机图形学中,为了生成真实感的照片级别的效果,就需要模拟真实场景的光线原理。即对每一条光线进行跟踪,准确地计算其反射、折射和阴影,便可以得到照片级别真实感的渲染效果。在这整个计算过程中,最为费时的是光线跟3D场景的求交过程。现有的各种各样版本的光线跟踪方法及其变形,无一不是要先对场景进行空间剖分,建立空间剖分树;然后再进行光线跟踪。在对场景进行空间剖分的方法中,主要有三种空间剖分方法,Octree,BVH-tree和KD-tree。这三种空间剖分结构尽管都可以用加速光线和3D场景的求交过程,但是KD-Tree的加速效果确是最好的。
在众多的空间剖分树生成算法中,为了保证生成树的质量,必须使用SAH(表面积启发)方法来进行进行空间剖分,这个经典剖分优化方法经过无数实验证明是极为有效的。但是该优化剖分算法在带来高质量的KD-Tree的同时,却需要极大的时间开销,这就使得快速构建空间剖分树变得极为困难。目前的绝大部分KD-Tree快速构造算法都是选择忽略SAH优化函数的计算或者只是近似计算SAH优化函数,以便于加速KD-Tree的构建。但近年来的许多研究表明,这些近似方法所产生的KD-Tree质量是非常之低下的,尽管加快了构建速度,但是却极大地影响了光线跟3D场景求交的效率。如果利用GPU(图形处理器)来计算准确的SAH优化函数的话,传统的CPU上的串行方法却不能很好地发挥GPU流架构的强大并行计算能力。并且当前的GPU上的KD-Tree并行构建方法的缺陷在于:首先,并没有采用SAH优化剖分方法,而是直接忽略了SAH优化,直接进行空间中分,降低了KD-Tree的质量。其次,当前的GPU和多核CPU上构建KD-Tree的方法,并没有在剖分过程中对三角面片进行切分,所以在最终生成的KD-Tree结构中有许多冗余的几何信息,这就极大地降低了KD-Tree的质量和光线求交的效率。
 
发明内容
本发明提出了一种在GPU流架构上对3D模型高效构建SAH KD-Tree的并行方法,用以解决当前GPU流计算架构上,光线跟踪渲染应用中的高效率地构建高质量的KD-Tree的问题。
本发明方法包括以下步骤:
步骤1:输入3D模型数据,对于非三角面片的几何场景,进行三角面片化。然后将场景数据存储到GPU的显存中。
步骤2:根据输入的3D模型的三角面片数目n,分配大小为n的节点链表nodelist,大小为n节点分裂队列iqueue和oqueue。在构建过程如有发生溢出,则对nodelist,iqueue和oqueue的大小扩展一倍。
步骤3:生成树的根节点root,同时对落在root内的所有三角面片的包围盒在三条坐标轴上的投影区域的极大值Emax和极小值Emin所组成的三个序列进行排序。然后把根节点root压入节点链表nodelist和分裂队列iqueue。
步骤4:判断分裂队列是否为空,如果为空,则转移到步骤5,反之转移到步骤6。
步骤5:KD-Tree构造完毕,输出节点链表nodelist,结束。
步骤6:把iqueue中的待分裂节点,加入到节点链表nodelist中。
步骤7:利用标准并行原语scan并行计算iqueue中待分裂节点的SAH优化函数,并利用规约原语segmented_reduce选取每一个待分裂节点的最优SAH剖分。
步骤8:根据步骤7中得到的iqueue队列中待分裂节点的最优剖分,对节点进行剖分,并且对剖分新生成的节点中的非叶结点,全部添加到oqueue中。
步骤9:对oqueue中节点所包含的三角面片的包围盒端点,按照三条坐标轴方向,利用父节点的面片区间一定会覆盖整个子节点的面片区间的原理,进行快速并行排序。 
步骤10:交换队列iqueue和oqueue,返回步骤4。
本发明有益效果如下:该发明首次在GPU流计算架构上对3D模型实现了高质量的SAH KD-Tree的并行构建方法。其次在构建KD-Tree空间剖分树的每一个节点,都是采用SAH优化剖分方法,同时在剖分的过程中,对三角面片都进行了裁剪切分,这极大地提高了KD-Tree的质量。对比传统的KD-Tree并行构建方法,该发明提出了创新的快速计算全SAH优化剖分函数和快速排序包围盒的并行方法。
附图说明
图1为算法流程图。
图2节点中的三角形的包围盒示意图。
图3三角形包围盒在坐标轴上的投影区域极值图。
图4 SAH优化函数并行计算图。
图5和父节点剖分平面相垂直的情况视图。
图6和父节点剖分平面相平行的情况视图。
具体实施方式
以下结合附图对本发明作进一步说明,如图1所示,本发明包括以下步骤:
步骤1:输入3D模型数据,对于非三角面片的3D场景,进行三角面片化。然后将场景数据存储到GPU的显存中。其中3D场景包含的数据为两个数组,即三角面片定点数组和三角面片顶点索引数组。
步骤2:根据输入的3D模型数据的三角面片数目n,分配大小为n的节点链表nodelist,大小为n节点分裂队列iqueue和oqueue。在构建过程如有发生溢出,则对nodelist,iqueue和oqueue的大小扩展一倍。其中nodelist的数据结构为5个数组:tlist(三角面片索引), pf_lch(节点第一个三角面片地址或者左节点指针),pn_rch(节点所包含的三角面片数目或者右节点指针),sp(剖分平面位置,最后2个bit(比特位)表示所在坐标轴和节点类型),aabb(节点的包围盒)。
而分裂队列iqueue和oqueue的数据结构为8个数组:nodeid(当前待分裂节点在nodelist中的索引值),pf(待剖分节点所包含的第一个三角面片在plist中的索引),pn(待剖分节点所包含的三角面片数目),nodeaabb(待剖分节点的包围盒),powner(三角面片属于的待剖分节点索引),plist(包含在待剖分节点中的三角面片序列),esort(plist中的三角面片的包围盒在三条坐标轴上的投影区域的最大值Emax和最小值Emin(图3)所组成的三个有序序列),epos(记录plist中每个三角面片的包围盒(图2)在三条坐标轴上的投影区域的最大最小值Emax和Emin在esort有序序列中的索引)。
步骤3:生成树的根节点root,同时对落在root内的所有三角面片的包围盒(见图2)在三条坐标轴上的投影的极大值Emax和极小值Emin(如图3)所组成的三个序列进行排序。然后把根节点root压入节点链表nodelist和分裂队列iqueue。排序使用标准的并行排序原语radixsort。
步骤4:判断分裂队列是否为空,如果为空,则转移到步骤5,反之转移到步骤6。
步骤5:KD-Tree构造完毕,输出节点链表nodelist,结束。
步骤6:把iqueue中的待分裂节点,加入到节点链表nodelist中。
步骤7:利用标准并行原语scan并行计算iqueue中待分裂节点的SAH优化函数,并利用规约原语segmented_reduce选取每一个待分裂节点的最优SAH剖分。具体步骤如图4所示,假定某一节点包含3个三角面片则:
7-1.首先分配和iqueue中esort.size一样大小的辅助标记数组flags。
7-2.发起数目为iqueue中plist.size的多线程,每一个线程k(其中k=0,1,2,..plist.size - 1)分别读取epos[k],然后把相应的flags数组进行置位,即对于epos[k].start(三角形包围盒投影到坐标轴的投影区域的最小值)和epos[k].end(三角形包围盒投影到坐标轴的投影区域的最大值)分别置对应的flags值为1和0。
7-3.然后对flags数组利用并行原语scan运算,结果导出到sflag数组。
7-4.发起数目为iqueue中plist.size的多线程,每个线程计算对应的SAH优化函数:CT + CI (NLSL + NRSR) / S,其中只有NL和NR是未知的,可以通过如下两个公式对其进行快速计算:NL[k]=sflag[k],  NR[k] = 3 - (k - sflag[k]) - (1 - flags[k]),然后代入SAH优化函数计算公式进行计算。
7-5.利用并行原语segment_reduce根据上一步骤7-4计算出来的SAH采样值得到iqueue中每一个带分裂节点的最优剖分平面。
步骤8:根据步骤7中得到的iqueue队列中待分裂节点的最优剖分,对节点进行剖分,并且对剖分新生成的节点中的非叶结点,全部添加到oqueue中。
步骤9:对oqueue中节点所包含的三角面片的包围盒端点,按照三条坐标轴方向,利用父节点的esort区间一定会覆盖整个子节点的esort区间的原理。进行快速并行排序。具体计算过程如图5和图6所示,这时分为两种情况进行讨论:
9-1.对于和剖分平面相垂直的子节点的esort序列,经过剖分平面的切分之后并没有出现乱序,比如图5所示节点包含3个三角面片0,1,2,经过剖分平面S2的切割之后,尽管有的三角形的包围盒发生了变化,并且产生了新的投影边界比如E1’和S1’,但子节点的esort数组的大小顺序并没有受到影响。也就是说子节点直接继承了父节点的有序性。
9-2.对于和剖分平面相平行的子节点的esort序列,经过剖分平面切割之后出现了乱序边界E1’和S1’,但是根据父节点的esort区间一定会覆盖整个子节点的esort区间的原理(如图6所示),可以利用父节点的esort有序序列形成的区间来对子节点的esort序列进行排序。整个排序过程分为四个步骤,第一步:分配四个临时数组bid(记录对应的区间索引),lid(记录在对应区间内的局部位置),bbegin(记录区间开始位置),count(每个区间内的计数器)。第二步:对子节点的esort的每一个元素发起一个线程,然后通过二分查找找到对应的区间索引,然后对该区间的计数器进行原子操作加一,并把原子操作结果记录在对应的lid中。第三步:对区间计数器count数组进行并行scan操作,把结果写到bbegin数组中。也就是得到了区间的新的起始位置。然后把子节点的esort的第k个元素移动到新的位置bbegin[bid[k]]+lid[k]。通过这一个步骤,所有落在同一个区间中的元素都相邻的排在了一起,区间之间的序已排好,但区间内的序列还可能是乱序。第四步:因为每一个区间内的元素数目都是很小的,所以可以对子节点的esort的每一个元素发起一个线程,对每一个区间内的元素进行两两排序。
步骤10:交换队列iqueue和oqueue,返回步骤4。

Claims (1)

1.图形处理器上的表面积启发式构建KD树并行方法,其特征在于该方法包括以下步骤: 
步骤1:输入3D模型数据,对于非三角面片的几何场景,进行三角面片化,然后将场景数据存储到GPU的显存中;
步骤2:根据输入的3D模型的三角面片数目n,分配大小为n的节点链表nodelist,大小为n节点分裂队列iqueue和节点分裂队列oqueue,在构建过程如有发生溢出,则对节点链表nodelist、节点分裂队列iqueue和节点分裂队列oqueue的大小扩展一倍;
步骤3:生成树的根节点root,同时对落在根节点root内的所有三角面片的包围盒在三条坐标轴上的投影区域的极大值Emax和极小值Emin所组成的三个序列进行排序,然后把根节点root压入节点链表nodelist和分裂队列iqueue;
步骤4:判断分裂队列是否为空,如果为空,则转移到步骤5,反之转移到步骤6;
步骤5:KD-Tree构造完毕,输出节点链表nodelist,结束;
步骤6:把节点分裂队列iqueue中的待分裂节点,加入到节点链表nodelist中;
步骤7:利用标准并行原语scan并行计算节点分裂队列iqueue中待分裂节点的SAH优化函数,并利用规约原语segmented_reduce选取每一个待分裂节点的最优SAH剖分;
步骤8:根据步骤7中得到的节点分裂队列iqueue中待分裂节点的最优剖分,对节点进行剖分,并且对剖分新生成的节点中的非叶结点,全部添加到节点分裂队列oqueue中;
步骤9:对节点分裂队列oqueue中节点所包含的三角面片的包围盒端点,按照三条坐标轴方向,利用父节点的面片区间一定会覆盖整个子节点的面片区间的原理,进行快速并行排序;
步骤10:交换节点分裂队列iqueue和节点分裂队列oqueue,返回步骤4。
CN2011102414192A 2011-08-22 2011-08-22 图形处理器上的表面积启发式构建kd树并行方法 Pending CN102426710A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN2011102414192A CN102426710A (zh) 2011-08-22 2011-08-22 图形处理器上的表面积启发式构建kd树并行方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN2011102414192A CN102426710A (zh) 2011-08-22 2011-08-22 图形处理器上的表面积启发式构建kd树并行方法

Publications (1)

Publication Number Publication Date
CN102426710A true CN102426710A (zh) 2012-04-25

Family

ID=45960688

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2011102414192A Pending CN102426710A (zh) 2011-08-22 2011-08-22 图形处理器上的表面积启发式构建kd树并行方法

Country Status (1)

Country Link
CN (1) CN102426710A (zh)

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103021018A (zh) * 2012-11-07 2013-04-03 浙江工业大学 基于gpu的构建bvh树并行光线追踪方法
CN104463940A (zh) * 2014-12-23 2015-03-25 中国科学院合肥物质科学研究院 一种基于gpu的混合树并行构建方法
CN106469463A (zh) * 2016-09-27 2017-03-01 上海上大海润信息系统有限公司 一种基于cpu与gpu混合的渲染方法
CN106919728A (zh) * 2015-12-28 2017-07-04 上海核工程研究设计院 一种将dgn模型转化成轻量模型的方法
CN108171785A (zh) * 2018-01-22 2018-06-15 中南大学 用于光线跟踪的sah-kd树设计方法
CN110163791A (zh) * 2019-05-21 2019-08-23 中科驭数(北京)科技有限公司 数据计算流图的gpu处理方法及装置
CN112712581A (zh) * 2021-01-12 2021-04-27 山东大学 一种光线追踪加速方法
CN113204559A (zh) * 2021-05-25 2021-08-03 东北大学 一种gpu上的多维kd树优化方法

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060066616A1 (en) * 2004-09-30 2006-03-30 Intel Corporation Diffuse photon map decomposition for parallelization of global illumination algorithm
CN102037497A (zh) * 2008-03-21 2011-04-27 柯斯提克绘图有限公司 用于光线追踪渲染的并行相交测试及着色的架构

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060066616A1 (en) * 2004-09-30 2006-03-30 Intel Corporation Diffuse photon map decomposition for parallelization of global illumination algorithm
CN102037497A (zh) * 2008-03-21 2011-04-27 柯斯提克绘图有限公司 用于光线追踪渲染的并行相交测试及着色的架构

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
ZHEFENG WU ET AL.: "SAH KD-Tree Construction on GPU", 《HPG 2011》 *
吴哲锋: "GPU上基于SAH的KD-tree构建", 《中国优秀硕士学位论文全文数据库》 *
郭绍忠等: "基于GPU的并行最小生成树算法的设计与实现", 《计算机应用研究》 *

Cited By (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103021018A (zh) * 2012-11-07 2013-04-03 浙江工业大学 基于gpu的构建bvh树并行光线追踪方法
CN103021018B (zh) * 2012-11-07 2015-04-22 浙江工业大学 基于gpu的构建bvh树并行光线追踪方法
CN104463940A (zh) * 2014-12-23 2015-03-25 中国科学院合肥物质科学研究院 一种基于gpu的混合树并行构建方法
CN106919728B (zh) * 2015-12-28 2021-10-12 上海核工程研究设计院 一种将dgn模型转化成轻量模型的方法
CN106919728A (zh) * 2015-12-28 2017-07-04 上海核工程研究设计院 一种将dgn模型转化成轻量模型的方法
CN106469463B (zh) * 2016-09-27 2019-04-30 上海上大海润信息系统有限公司 一种基于cpu与gpu混合的渲染方法
CN106469463A (zh) * 2016-09-27 2017-03-01 上海上大海润信息系统有限公司 一种基于cpu与gpu混合的渲染方法
CN108171785A (zh) * 2018-01-22 2018-06-15 中南大学 用于光线跟踪的sah-kd树设计方法
CN108171785B (zh) * 2018-01-22 2021-12-10 中南大学 用于光线跟踪的sah-kd树设计方法
CN110163791A (zh) * 2019-05-21 2019-08-23 中科驭数(北京)科技有限公司 数据计算流图的gpu处理方法及装置
CN112712581A (zh) * 2021-01-12 2021-04-27 山东大学 一种光线追踪加速方法
CN113204559A (zh) * 2021-05-25 2021-08-03 东北大学 一种gpu上的多维kd树优化方法
CN113204559B (zh) * 2021-05-25 2023-07-28 东北大学 一种gpu上的多维kd树优化方法

Similar Documents

Publication Publication Date Title
CN102426710A (zh) 图形处理器上的表面积启发式构建kd树并行方法
TWI546770B (zh) 圖形處理單元中3d加速結構之完全並列原地建構
CN101826215B (zh) 实时二级光线跟踪的并行渲染方法
KR102197067B1 (ko) 멀티 프레임들의 동일한 영역을 연속으로 렌더링하는 방법 및 장치
CN103106681A (zh) 用于构建加速结构的系统、方法及计算机程序产品
CN105469440B (zh) 用于产生和遍历加速结构的方法和设备
CN106469463B (zh) 一种基于cpu与gpu混合的渲染方法
WO2022121525A1 (zh) 三维场景数据的渲染方法及装置、存储介质、电子装置
CN103021018B (zh) 基于gpu的构建bvh树并行光线追踪方法
CN106776028A (zh) 一种基于gpu的光线跟踪方法
US20060066616A1 (en) Diffuse photon map decomposition for parallelization of global illumination algorithm
US9196079B2 (en) Accelerated compute tessellation by compact topological data structure
JP7481560B2 (ja) グラフィック処理のための方法、コンピュータシステム、及びコンピュータ可読媒体
CN101840565B (zh) 一种基于gpu的八叉树并行构建方法
JP2018073427A (ja) 加速構造を生成する方法及びその装置
Hu et al. Parallel BVH construction using locally density clustering
CN111275806A (zh) 一种基于点的并行化实时渲染系统及方法
CN112712581B (zh) 一种光线追踪加速方法
Nazzaro et al. Decosurf: Recursive geodesic patterns on triangle meshes
CN110379005B (zh) 一种基于虚拟资源管理的三维重建方法
KR20220139880A (ko) 배터리 전력공급형 컴퓨팅 디바이스들을 위한 실시간, 소프트웨어 기반 하이브리드 광선 트레이싱
Ravichandran et al. Parallel divide and conquer ray tracing
van Rossen et al. Real-time constructive solid geometry
CN103679815A (zh) 基于表面搜索的可视外壳生成方法及装置
JP4920775B2 (ja) 画像生成装置及び画像生成プログラム

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C02 Deemed withdrawal of patent application after publication (patent law 2001)
WD01 Invention patent application deemed withdrawn after publication

Application publication date: 20120425