CN103021018B - 基于gpu的构建bvh树并行光线追踪方法 - Google Patents
基于gpu的构建bvh树并行光线追踪方法 Download PDFInfo
- Publication number
- CN103021018B CN103021018B CN201210441051.9A CN201210441051A CN103021018B CN 103021018 B CN103021018 B CN 103021018B CN 201210441051 A CN201210441051 A CN 201210441051A CN 103021018 B CN103021018 B CN 103021018B
- Authority
- CN
- China
- Prior art keywords
- node
- bvh
- ray
- stackoffset
- gpu
- 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.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 19
- 238000012545 processing Methods 0.000 title abstract description 4
- 238000012546 transfer Methods 0.000 claims description 11
- 238000012360 testing method Methods 0.000 claims description 7
- 241000238876 Acari Species 0.000 claims description 3
- 238000005457 optimization Methods 0.000 abstract description 2
- 230000001133 acceleration Effects 0.000 abstract 1
- 238000004364 calculation method Methods 0.000 abstract 1
- 238000005516 engineering process Methods 0.000 description 2
- 238000003491 array Methods 0.000 description 1
- 230000006854 communication Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 230000005484 gravity Effects 0.000 description 1
- 239000003550 marker Substances 0.000 description 1
- 239000000463 material Substances 0.000 description 1
- 238000005192 partition Methods 0.000 description 1
- 238000002360 preparation method Methods 0.000 description 1
- 238000004088 simulation Methods 0.000 description 1
- 238000010998 test method Methods 0.000 description 1
Landscapes
- Image Generation (AREA)
Abstract
本发明公开了一种GPU上的并行构建BVH树进行光线追踪方法,属于计算机图形学领域。图形学中有些在传统CPU上的串行计算方法已经逐渐转移到采用拥有强大并行计算能力的GPU来处理。本发明的方法为:应用GPU并行特性进行BVH空间划分的数据结构设计;采用SAH机制并行划分空间;利用GPU并行计算射线与图形元相交信息,从而提高光线追踪效率。本发明能够在GPU处理器架构上并行高效地构建输入3D模型的高质量BVH空间划分结构,其效率要比传统CPU串行优化指令SIMD高。特别是在动态光线追踪的情形下,其加速效率要远高于目前比较流行的KD-Tree空间划分方法。
Description
技术领域
本发明属于计算机图形学领域,具体涉及一种利用GPU构建BVH树进行并行光线追踪方法的方法,该技术能够大大降低传统CPU光线追踪的计算时间。
背景技术
光线追踪算法是真实感图形学领域中的重要算法,它通过模拟光线在传播过程中的反射、折射现象,将光线的颜色与物体的材质属性结合建模,能对复杂的三维物体做出较好的仿真,适合绘制表面光洁度高或具有透明表面和镜面的场景。在整个算法中,计算量最大的就是光线与场景图形元的求交过程。若考虑动态光线追踪,还需要加上整个场景空间结构的建立。随着GPU性能正以每年翻倍的速度发展,动态光线追踪生成动画越来越成为工业界的趋势。
在对场景进行空间划分的方法中,最常用的就是KD-tree和BVH-tree。这两种方法都可以完成光线追踪,但是在动态场景当中,BVH-tree性能更加优于KD-tree。同时,实验研究已经表明表面积启发SAH方法可以生成高质量的生成树,但却需要极大的时间开销,这阻碍了BVH-tree的快速构建,且即使通过优化SAH机制还是无法达到动态光线追踪的效果。但是如果利用GPU完成BVH-tree的建立,并用GPU计算SAH函数,就可以大大加快光线追踪前期准备速度,而且利用GPU并行处理求交还可以很好弥补CPU串行计算求交的低效性。
发明内容
本发明要克服先有光线跟踪方法效率较低的缺点,提出一种在GPU上快速高效建立BVH-tree进行并行光线追踪的方法。该方法通过在GPU上高效地建立BVH-tree来加快光线追踪速度,并利用GPU并行计算光射线与图形元相交处的信息,从而提高光线追踪效率。
本发明的技术方案为:
基于GPU的构建BVH树并行光线追踪方法,其步骤为:
1)读取3D场景模型,设置三角形的模型图形元,将这些数据存储在GPU显存中。
2) 创建一个动态增长存储BVH节点的空间。
3) 根据模型图形元,分别求X轴、Y轴和Z轴的跨度,并计算出最大值,以这个最大值的坐标轴使用SAH机制划分空间。
4) 判断由步骤3)分割的子节点当中的三角形数目是否大于1,若大于1则返回到3)。
5) BVH-tree构造完毕,输出线性结构BVHlist数组。
6)根据视点和投影面构造射线。
7)构造一个BVH元素的堆栈,声明变量stackoffset=0。
8)取当前射线与当前所指BVHlist节点做相交测试。
9)如果当前射线与这个BVH节点不相交,而且如果stackoffset为0,表明当前光线与场景无相交,则结束当前射线的光线追踪;反之stackoffset大于0,那么stackoffset减1,并且把当前节点设置为堆栈中偏移量为stackoffset的节点,返回步骤8);如果当前射线与这个BVH节点相交转移到步骤10)。
10)判断该BVH节点中是否有图形元三角形,如果有,说明当前射线与一个BVH树的叶子节点正方体有相交,并继续测试该射线与节点内的三角形是否相交,如果相交就把当前的节点和三角形序号交给该射线。若stackoffset大于0就减1, 并且把当前节点设置为堆栈中偏移量为stackoffset的节点,返回步骤8)。如果BVH节点没有图形元三角形就转移到步骤11)。
11)根据当前节点的右节点标记变量,把右节点序号放入堆栈中,然后stackoffset加1,把当前节点设置为之前节点的左节点,返回步骤8)。
本发明的效果如下:首次在GPU上对3D模型实现了高质量的BVH-Tree的并行构建方法,每次划分空间采用SAH划分机制,这极大提高了BVH-Tree的平衡性。并且通过对光线与模型做并行相交运算,大大减少了原先串行计算的复杂度。
附图说明
图1为本发明的算法流程图
图2为本发明的BVH空间划分图
图3为本发明的射线与正方体求交方法图
图4 为本发明的BHV-tree保存结构图
具体实施方式
以下实施方式结合附图对本发明进行详细的描述,参照附图,本发明包括以下步骤:
1) 读取3D场景模型,并设置三角形的模型图形元,这些数据存储在GPU显存中。这些数据是以DirectX规定的SRV格式保存的,一共有两个SRV。第一个SRV中保存用于遍历的图形元三角形序号数组。第二个SRV中保存图形元三角形的顶点数组。
2) 创建一个动态增长存储BVH节点的空间。若在未来添加节点的时候,发现空间不够,可以把原来创建的BVH空间扩大一定数量,视需求而定。
3) 根据模型图形元,分别求X轴、Y轴Z轴的跨度。这里用2D的情况解释一下具体方法,如图2所示最大的长方形内部的三角形,显然横向跨度为(V2max-V1min )的x值,纵向跨度为(V2max-V1min )的y值,显然这里x比y大,我们以x坐标轴使用SAH机制划分空间。SAH假设光线是随机发射的,因此碰到长方体的几率也是一样的,它保证空间划分的时候尽量保证两个子空间内部的长方体面积相等。这样得到的BVH-tree平衡性较高。
4)为了发挥BVH的最大效率,我们选择每个叶子节点能够容纳的最大一个三角形,以此判断由3)分割的子节点当中的三角形数是否大于1,若大于1返回到步骤3),反之转到步骤5)。
5) BVH-tree构造完毕,输出线性结构BVHlist数组,该数组结构如图3所示。一个BVH节点保存着一个长方体坐标最小点Vmin和一个坐标大点Vmax,这两个点就可以确定一个长方体。我们默认该数组中节点的下一个元素即为节点的左节点,因此必须保存一个该节点的右节点和内部三角形图形元个数。若该节点是叶子节点,那么三角形图形元个数就为0。
6) 设定视点和投影面,为了方便可以设置视点为(0,0,0),投影面的左下角为(-1,-1,2)和右上角为(1,1,2)。
7) 构造一个节点元素堆栈,这个栈的大小也可以默认设定一个值,我们设定初始值为34,当栈溢出的时候可以动态增加一定的值,并且申明变量当前栈标记stackoffset=0。
8) 把当前射线与当前的节点长方体做相交测试。如图4所示,每条射线表示为r=e+t*d,其中e为视点(0,0,0),d为射线的方向,t为射线与某个空间结构相交时的参数。根据图2,首先我们计算射线与直线X=Xmin相交的参数txmin=(Xmin –Xe)/Xd。用相同的方法可以求得txmax,tymin,tymax。这条射线若与这个长方体相交,那么[txmin ,txmax]和[tymin ,tymax]应该相交。
9) 如果当前射线与这个BVH节点不相交,而且如果stackoffset为0,则表明当前光线没有与场景相交,则结束当前射线光线追踪;反之stackoffset大于0,那么stackoffset减1,并且把当前节点设置为栈中偏移量为stackoffset的节点,转移到步骤8)。如果当前射线与这个BVH节点相交则转移到步骤10)。
10) 判断该BVH节点中是否有图形元三角形,如果有,说明当前射线与一个BVH树的叶子节点正方体有相交,并继续用经典的重心交点测试法测试该射线与节点内的三角形是否相交,如果相交就把当前的节点和三角形序号交给该射线。若stackoffset等于0,则结束当前射线的光线追踪;若stackoffset大于0就减1, 并且把当前节点设置为堆栈中偏移量为stackoffset的节点,转移到步骤8)。如果BVH节点没有图形元三角形就转移到步骤11)。
11) 根据当前节点的右节点标记变量,把右节点序号放入栈中,然后stackoffset加1,把当前节点设置为之前节点的左节点。回到步骤8)继续测试。
Claims (1)
1.GPU上构建BVH树并行光线追踪方法,其步骤为:
1)读取3D场景模型,设置三角形的模型图形元,这些图形元三角形数据存储在GPU显存中;
2)创建一个动态增长存储BVH节点的空间;
3)根据模型图形元,分别求X轴、Y轴和Z轴的跨度,并且求出最大值,以这个最大值的坐标轴使用SAH机制划分空间;
4)判断由步骤3)分割的子节点当中的三角形数目是否大于1,若大于1返回到步骤3),反之下一步;
5)BVH-tree构造完毕,输出线性结构BVHlist数组;
6)根据视点和投影面构造射线;
7)构造一个BVH元素的堆栈,声明变量stackoffset=0;
8)取当前射线与当前所指BVHlist节点做相交测试;
9)如果当前射线与这个BVH节点不相交,而且如果stackoffset为0,表明当前光线没有与场景相交,结束当前射线的光线追踪;反之stackoffset大于0,那么stackoffset减1,并且把当前节点设置为栈中偏移量为stackoffset的节点,转移到步骤8);如果当前射线与这个BVH节点相交转移到步骤10);
10)判断该BVH节点中是否有图形元三角形,如果有,说明当前射线与一个BVH树的叶子节点正方体有相交,并继续测试该射线与节点内的三角形是否相交,如果相交就把当前的节点和三角形序号交给该射线;同时若stackoffset等于0,则结束当前射线的光线追踪;若stackoffset大于0就减1,并且把当前节点设置为栈中偏移量为stackoffset的节点,转移到步骤8);如果BVH节点没有图形元三角形就转移到步骤11);
11)根据当前节点的右节点标记变量,把右节点序号放入栈中,然后stackoffset加1,把当前节点设置为之前节点的左节点,转移到步骤8)。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210441051.9A CN103021018B (zh) | 2012-11-07 | 2012-11-07 | 基于gpu的构建bvh树并行光线追踪方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210441051.9A CN103021018B (zh) | 2012-11-07 | 2012-11-07 | 基于gpu的构建bvh树并行光线追踪方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103021018A CN103021018A (zh) | 2013-04-03 |
CN103021018B true CN103021018B (zh) | 2015-04-22 |
Family
ID=47969584
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210441051.9A Active CN103021018B (zh) | 2012-11-07 | 2012-11-07 | 基于gpu的构建bvh树并行光线追踪方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103021018B (zh) |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103279974A (zh) * | 2013-05-15 | 2013-09-04 | 中国科学院软件研究所 | 一种高精度高分辨率卫星成像模拟引擎及实现方法 |
US9984492B2 (en) * | 2015-04-02 | 2018-05-29 | Qualcomm Incorporated | Efficient hierarchy traversal in ray tracing applications |
KR102570584B1 (ko) * | 2015-12-02 | 2023-08-24 | 삼성전자 주식회사 | Bvh 트리를 구성하기 위한 방법 및 시스템 |
US10559125B2 (en) | 2015-12-02 | 2020-02-11 | Samsung Electronics Co., Ltd. | System and method of constructing bounding volume hierarchy tree |
CN106529082A (zh) * | 2016-12-02 | 2017-03-22 | 上海无线电设备研究所 | 一种快速计算电大尺寸目标电磁散射特征的方法 |
CN108230378B (zh) * | 2018-01-29 | 2020-03-20 | 北京航空航天大学 | 一种基于光线追踪的计算全息遮挡处理算法 |
US10885698B2 (en) * | 2018-08-10 | 2021-01-05 | Nvidia Corporation | Method for programmable timeouts of tree traversal mechanisms in hardware |
CN110211197B (zh) * | 2019-05-29 | 2020-10-02 | 山东大学 | 一种基于多边形空间划分的光子映射优化方法、装置及系统 |
CN112712581B (zh) * | 2021-01-12 | 2022-08-12 | 山东大学 | 一种光线追踪加速方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101819675A (zh) * | 2010-04-19 | 2010-09-01 | 浙江大学 | 一种基于gpu的层次包围盒的快速构造方法 |
KR101013784B1 (ko) * | 2009-08-31 | 2011-02-14 | 이화여자대학교 산학협력단 | Cpu와 gpu를 이용한 하이브리드 병렬 연속 충돌 검출 방법 |
CN102426710A (zh) * | 2011-08-22 | 2012-04-25 | 浙江大学 | 图形处理器上的表面积启发式构建kd树并行方法 |
US8284188B1 (en) * | 2007-10-29 | 2012-10-09 | Nvidia Corporation | Ray tracing system, method, and computer program product for simultaneously traversing a hierarchy of rays and a hierarchy of objects |
-
2012
- 2012-11-07 CN CN201210441051.9A patent/CN103021018B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8284188B1 (en) * | 2007-10-29 | 2012-10-09 | Nvidia Corporation | Ray tracing system, method, and computer program product for simultaneously traversing a hierarchy of rays and a hierarchy of objects |
KR101013784B1 (ko) * | 2009-08-31 | 2011-02-14 | 이화여자대학교 산학협력단 | Cpu와 gpu를 이용한 하이브리드 병렬 연속 충돌 검출 방법 |
CN101819675A (zh) * | 2010-04-19 | 2010-09-01 | 浙江大学 | 一种基于gpu的层次包围盒的快速构造方法 |
CN102426710A (zh) * | 2011-08-22 | 2012-04-25 | 浙江大学 | 图形处理器上的表面积启发式构建kd树并行方法 |
Non-Patent Citations (4)
Title |
---|
Raytracing Dynamic Scenes on the GPU Using Grids;Sashidhar Guntury 等;《IEEE TRANSACTIONS ON VISUALIZATION AND COMPUTER GRAPHICS,》;20120131;第18卷(第1期);5-16 * |
Realtime Ray Tracing on GPU with BVH-based Packet Traversal;Johannes Gunther 等;《IEEE/EG Symposium on Interactive Ray Tracing 2007》;20070912;113-118 * |
光线追踪中场景数据的层次包围盒的并行创建及遍历算法;王建阔;《万方学位论文数据库》;20120415;1-40 * |
杨鑫.二级光线跟踪的并行计算.《浙江大学学报(工学版)》.2012,第46卷(第10期),1796-1809. * |
Also Published As
Publication number | Publication date |
---|---|
CN103021018A (zh) | 2013-04-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103021018B (zh) | 基于gpu的构建bvh树并行光线追踪方法 | |
EP3457362A2 (en) | Reduced acceleration structures for ray tracing systems | |
US8570322B2 (en) | Method, system, and computer program product for efficient ray tracing of micropolygon geometry | |
CN109255829A (zh) | 用于光线跟踪的混合层级 | |
CN104361624B (zh) | 一种计算机三维模型中全局光照的渲染方法 | |
JP2009525526A (ja) | ビーム放出によって仮想画像を合成するための方法 | |
KR20170134455A (ko) | 레이 트레이싱 애플리케이션들에서의 효율적인 계층 횡단 | |
CN106683189B (zh) | 一种在三维场景中渲染文字的方法 | |
JP2017188095A (ja) | 光線バンドルの光線に対する差分データを決定する方法及びグラフィックス処理ユニット | |
CN104658033A (zh) | 多光源下的全局光照绘制方法及装置 | |
CN103093499A (zh) | 一种适用于网络传输的城市三维模型数据组织方法 | |
CN107993279B (zh) | 一种场景精确表达方法 | |
CN104407521A (zh) | 一种实现水下机器人实时仿真的方法 | |
CN102402792A (zh) | 一种实时浅水模拟方法 | |
CN101826215A (zh) | 实时二级光线跟踪的并行渲染方法 | |
CN103606184A (zh) | 一种基于二维和三维一体化矢量渲染引擎的装置 | |
CN101853162A (zh) | 一种可编辑的网页三维几何造型渲染方法 | |
CN102426710A (zh) | 图形处理器上的表面积启发式构建kd树并行方法 | |
CN107689078A (zh) | 一种基于链表排序平衡二叉树的层次包围盒树构建方法 | |
CN104700447A (zh) | 基于Intel众核架构的光线追踪并行优化方法 | |
JPWO2011104746A1 (ja) | 画像表示装置 | |
US20240062453A1 (en) | Generation of tight world space bounding regions | |
Doyle et al. | Evaluation of a BVH construction accelerator architecture for high-quality visualization | |
CN103425849A (zh) | 一种动态障碍物影响下流体的仿真方法 | |
Áfra | Improving BVH Ray Tracing Speed Using the AVX Instruction Set. |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |