CN102426710A - 图形处理器上的表面积启发式构建kd树并行方法 - Google Patents
图形处理器上的表面积启发式构建kd树并行方法 Download PDFInfo
- 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
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
技术领域
本发明涉及图形处理器并行计算领域,尤其涉及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。
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)
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)
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 | 柯斯提克绘图有限公司 | 用于光线追踪渲染的并行相交测试及着色的架构 |
-
2011
- 2011-08-22 CN CN2011102414192A patent/CN102426710A/zh active Pending
Patent Citations (2)
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)
Title |
---|
ZHEFENG WU ET AL.: "SAH KD-Tree Construction on GPU", 《HPG 2011》 * |
吴哲锋: "GPU上基于SAH的KD-tree构建", 《中国优秀硕士学位论文全文数据库》 * |
郭绍忠等: "基于GPU的并行最小生成树算法的设计与实现", 《计算机应用研究》 * |
Cited By (13)
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 |