搜档网
当前位置:搜档网 › 2010 GPU光线跟踪算法加速结构研究

2010 GPU光线跟踪算法加速结构研究

攮夯硬j!童:——一!兰cHNoLoG!垒翌里垒竺坠兰!

V01.17,No.5,2010

GPU光线跟踪算法加速结构研究

王世元涅柳英

西南石油大学计算机科学学院成都610500

摘要:基于GPU的光线跟踪算法是当前图形学研究的一个热点。也是将来用于广告、电影、游戏等娱乐产业的关键技术。本文论述了如何对基于GPU的光线跟踪算法进行实现,以及利用各种加速结构,加速算法实现,提高算法执行效率,并对各种加速结构的效果进行了比较研究。

关键词:GPGPU光线跟踪BVHKD-1ke

doi:10.3969/j.issn.1006—8554.2010.05.005

ResearchofAccelerationStructuresforGPUBasedRayTracing

Wangshiyuan,Wenliuying

(ComputerScienceCollege,SouthwestPetroleumUniversity,ChengduSichuan,610500)Abstract:TheRaytracingalgorithmbaaedonGPUisahotresearchonComputerGraphics,italsotlnimportanttechnologyforadvertisement,movieandgame.ThispaperdiscusshowtoimplementtheGPURayTracingAlgorithm,andusevariousaccelerationstructurestoacceleratethealgorithm,improvetheefficiencyofexecution,andcomparetheeffectofthethinekindsofaccelerationstructures.

Keywords:GPGPU;RayTracing;BVH;KD-Tree

1.引言

近年来,GPU无论在运算能力,还是在可编程性上都得到了大幅的提高,GPU已经在需要大量运算的密集运算领域发挥了举足轻重的作用。各种基于cPU的密集运算被移植到GPU上,以利用GPU巨大的运算能力,加速整个算法的运算过程。光线跟踪算法是生成真实感图形的一种非常重要的方法,在电影、游戏、广告等产业,获得广泛的应用,而光线跟踪算法也是典型的密集运算算法,利用原始的基于CPU的光线跟踪渲染一幅图片是非常耗时的操作。因此,如果能够将CPU上的光线跟踪算法,映射到GPU上,加速光线跟踪算法的执行时间,将会带来巨大的经济效益。因此,基于GPU的光线跟踪算法已成为国内外科研人员的研究热点。

2.基于GPU的光线跟踪

2.1相关工作

当前,主要由两种方法利用GPU来加速光线跟踪算法。第一种是Carr等人提出来的,将GPU转换为一个蛮力的执行光线一三角形求交的计算器,而将任何的光线生成以及着色过程在CPU上完成。这就需要CPU依然执行绝大部分的渲染工作。Carr-等人指出,在ATIRadeon8500上,每秒最快能够执行l亿2千万次的光线一三角形求交。同时,作者也指出,由于GPU的单精度浮点的限制,图片上依然存在一些不太真实的地方。

第二种方法由Purcell等人提出的,改种方法将整个光线跟踪器都移植到GPU上进行实现。从光线的产生,加速结构的遍历,到最后的着色过程都在GPU上执行。此后,有很多相同的项目都是基TPurcell的模型上进行的。

12

2.2GPU上的光线跟踪算法的映射方式

将传统的CPU上执行的光线跟踪算法,映射成为一个GPU协助的,或者基于GPU的光线跟踪器有众多方法。下面重点介绍Purcell提出的映射模型,以及在本文的实现中提出的一个基于GPU的Whitted模型的光线跟踪器。该光线跟踪器的布局如图2.1所示:

出最终颜色

图2.1基于GPU的光线跟踪的模型

在Purcell的论文中,它将光线一三角形求交,以及遍历过程分离成两个独立的遍历内核和求交内核。本文的实现中,也按照上述模型图,将光线跟踪算法分解成光线生成,光线一三角形求交,着色这三个步骤。

在对光线进行跟踪之前,需要生成从视点指向屏幕的原始光线(primarymy)。在一个GPU上,能够使用光栅器的插值的能力,在一个单一的内核调用中,产生所有的原始光线。

给定观察矩形(被采样用于产生图片的投影平丽的一部分)的四个角,以及视点,首先计算出这个视锥体的四条边线。如果让光栅器在这4条光线之间,按照512×512规格,在这四条光线之间按照方向进行插值,最终就可以获得能够产生一幅512×512图片(一个像素一个采样点)的所有原始光线的方向。同时能够将这些方向存储在一个纹理里,并把它作为求交内核的输入。所有的原始光线具有相同的起始点,但是仍然把它存

万方数据

技术与市场赣煮觋凌第17卷第5期2010年

储在一个同方向纹理具有相同维度的纹理内。因为当生成阴影光线或者反射光线的时候,光线的原点会发生改变。

求交内核把光线的原点,方向,以及场景的描述作为输入数据。在内核被调用数次之后,我们对于每一个像素输出—个击中记录。如果一条光线击中了场景中的某个三角形,返回击中点的3个重心坐标,以及相关的被击中的三角形。此外,还将输出被发现的交点沿光线的距离,以及被击中三角形的材质。这就需要使用5个浮点数值组成一个击中记录。纹理只能够支持4个颜色通道(RGBA),所以,如果能把击中记录裁减到4个值,那么将是非常有益的。

观察发现,只需要3个重心坐标的两个,因为在三角形内部,它们相加的和总是1。这就使得在—个单独的RGBA纹理中存储交点记录是可行的,并且它的维度同其它两个光线纹理的维度相同。

Moiler和Trumbom提出了一个高效的光线一三角形求交算法,使用这个算法,并利用GPU在向量计算上的优势来进行求交计算。下面列出了求交的代码,这个代码也展示了如何利用向量指令来提高效率。

,事?审?事?卑宰半?宰掌奉?牛掌??枣?牛簟求;芒程户笋?枣霉掌搴???宰??奎??????宰宰幸●●,

float4Intersects(1loat3a,float3b,float3c,float3O,float3d,tloat3minT,

floatmat_index,tloat4lasthit)

float3el=b-毗

float3e2=c一毗

float3P=cross(a,e2);

floatdet=dot(p,eD;

boolisHit=det>0.00000lf;

floatinvdet=1.Of/det;

floaL3tvec=o一戤

float11=dot(p,tvec)+invdet;

float3a=crogs(tvec,e1);

floatv=dot(q,d)‘invdet;

floatt=dot(a,e2)*invdet;

isHit=(u>=O.00&&(v>=O.00&&(u+v<=1.OI)&&(t<lasthit.驰&(t>minT);

returnisHit?float4(u,v,t'mat_index):lasthit;

当所有的原始光线都已经计算出了相交的状态的时候,就能够查询着色过程所需要的表而法线和材质的信息。每一个击中记录都存储了—个指向材质纹理的索引,这个材质纹理包含

中记录的中心坐标进行了插值。最终的颜色能够按fⅣ?厶)G进行计算,此处,v是法线,£是光源的方向,c是三角形的颜色。

现在根据击中的三角形所具有的材质的类型(漫反射材质。或者镜面反射材质),需要产生二次光线,以此来计算阴影和反射。

1)如果一条光线射出场景之外,像素就被赋予全局的背景颜色。

2)如果一条光线击中了—个漫反射材质表面,就发射一条阴影射线(shdowray)。这些光线的起始点在击中点,方向为从击中点指向光源。

3)如果一条光线击中了—个镜面反射材质表面。就发射一条镜面反射光线。镜面发射光线的起始点也在击中点,但是它的方向是在击中点处关于入射光线和插值后的法线对称的方向。一个真正的Whined类型的光线跟踪器也支持透明材质,从而能够产生折射光线。但由于主要是研究加速结构,所以在本文的实现中,没有考虑折射光线。

中点之间,存在某个几何体,所以这个像素就应该是黑色(处于

更加关心的是是否存在这样的击中点。因此,当有一个交点被发现,就可以停止整个求交过程,从而加速算法的处理过程。在本文的实现中,以相同的方式跟踪阴影光线和反射光线,因此。就没有使用到这个优化策略。

已经对每一个像素产生了正确二次光线,如果需要,就能够执行另外一趟遍历,求交过程,对上述的二次光线进行跟踪。每一次调用着色程序就能够对每一个像素返回一个颜色值和一条新的光线。着色内核也可以将前一次着色程序的输出当作本次着色程序的输入。这就使得能够在跟踪连续的光线的时候合并这些连续的镜面反射的颜色。

同Carr等人的程序不同,本文所采用的程序不存在浮点精度太低的问题,因为Geforce7300在整个管线中支持真正的32位浮点操作。

3.加速结构的实现和比较

3.1均匀栅格

均匀栅格是第一个在GPU上实现的加速结构。Purcell给出了很多选择均匀栅格作为加速结构的理由,但是Purcell没有详细的说明为什么均匀网格对于硬件实现而言比其它的加速结构要更加的简单。当在探讨了均匀栅格的一些主要特性的时候,更加清晰的知道了均匀栅格为什么会成为一个好的GPU机速结构。

首先,只用使用简单的算术运算,就能够对于每个体素的遍历在常量时间能被定位和存取。这就消除了对树的遍历的需要,以及重复的纹理查找工作,而纹理查找是相当耗时的。

其次,体素的遍历是通过递增算术运算来完成的。这就消除了对堆栈的需要,使得我们能够从光线的起始点开始,以距离递增的顺序访问体素成为可能。

再其次,由于对于体素的访问是沿着光线,以距离递增的方式遍历的,所以。一旦在一个被访问的体素中报道发现有一个交点,就可以停止这条光线对体素的遍历过程,从而提高整个遍历过程的速度。

最后,用于遍历的代码非常适合用向量编写,而向量形式

13

万方数据

整垄壁垒

婴里墅竺箜!垒竺竺垒墨堕

V01.17,No.5,2010

的编码风格又非常适合GPU的指令集。

然而,均匀栅格的缺点就是由于它是空间细分结构的一种特殊情况,多个体素可能包含相同三角形的多个引用。由于无法使用mailbox技术,这就意味着需要对于相同的光线和三角形之间进行不止一次的相交测试。

3.2KD-tree

最近,Havran等人对基于CPU的光线跟踪算法的加速结构进行了比较,得出的结论是对于众多不同类型的测试场景,平

KD—tree的GPU光线跟踪算法,是否也会有相似的结论。

就像均匀栅格一样,KD~晚e也是一种空间细分结构。同均匀网格不同的是,KD-tree利用一个二叉树将场景表示成一个层次结构。

在二叉树中,我们将内部节点和叶子节点区分开。叶子节点用来表示体素和与之相关的保存在该体素内的三角形的引用。一个内部节点用来表示空间区域的某个部分。所以,内部节点包含一个分裂面的两个子树的引用,而叶子节点只包含—个三角形列表。

KD—tree的创建过程从上而下,根据一个评价函数,通过放置—个分离平面,递归的将场景分离成两个体素。我们能够以递归的方式遍历KD—tree,但是由于GPU没有堆栈结构,所以无

着光线前进了多远来向上或者向下遍历树。这种策略消除了需要堆栈的限制,使得用GPU来完成对KD—tree结构的遍历成为可能。

当使用GPU对KD—tree进行遍历的时候,KD—tree像均匀栅格那样被表示成一个纹理的集合。这就意味着有一个保存树数据的纹理,一个保存三角形列表的纹理,和一个保存实际的三角形数据的纹理。GPU的遍历首先调用一个初始化内核,然后按照需要,多次调用合并后的遍历和求交内核。

3.3包围体层次(BVH)

给定一些随机的光线,通过计算遍历包围体层次的平均花费,就可以测量出该包围体层次的质量。迄今为止,还没有构建最优的包围体层次的算法,也就是说,如何准确的测量一个包围体层次的平均遍历时间还不是很明显。

Goldsmith和Salmon提出了一个评价函数,通常被称为表面积启发式函数。他们通过父节点和孩子节点的表面积之比来形式化的表述这个关系,此评价函数如下所示:

P(h/t(c)I柚妇))%昱(3.1)

此处,_Il豇∽是光线击中节点n的情况,&是节点n的表面积,c和p分别表示父节点和孩子节点。

这个评价函数给出了,当用一条随机的光线同层次结构求交的时候,成本上的估计。由于没有最优的方法去有效的构造—个最优的BVH,提出了不同的构造技巧。下面,将列出比较通用的方法。

盒(AABBoAABB易于实现,并且同光线的求交测试非常快。大多数有关BVH的论文在描述BVH的创建的时候,通常分别以

74

Kay和Kajiya,或者Goldsmith和Salmon这两种基本的想法为基础。Kay和Kajiaya建议以自上而下递归的方式进行BVH的创建。

Goldsmith和Salmon提出了一个更加复杂的自底向上的构造方式。Goldsmith和Salmon指出,BVH的质量同作为输入传人的三角形的顺序有关。因此。他们建议在构造BVH之前,随机打乱三角形的顺序。下述算法就是利用l(a妒蜘iya的思想创建某个场景的包围体层次的方法:

/牛事事事?毒牛搴搴?????.‘??*Kay/Kajiya的BVH创建方法????事事●●堆●●●●●,

BVNODEBuildTree(triangles)

Ifwepassedjustonetriallgle

Returnleafholdingthetriangle

Else

Calculatebestsplittingaxisandwheretosplitit

BVNODEresult

Result.1efiChild=BulidTree(trianglesleftofsplit)

Result.rightChild=BulidTree(trianglesfightofsplit)

ResulLboundingBox=boundingboxofaUgiventriangles

Returnresult

4.结束语

本文成功的在GPU上实现了用于光线跟踪算法中的各种加速结构,并对这些加速结构在GPU上的加速效果进行了比

构,也被证明是最慢的,除非是只包含一个单独的物体的场景

于均匀栅格的GPU上的遍历表示,也需要大量的数据。Foley和Sugerman认为,对于大多数场景,KD—tree的效率要比均匀栅格高。但是,在KD—tree的遍历过程中,无论是重置阶段还是回退阶段,片元程序都非常的复杂,但这种复杂性也使得其能够在

BVH被证明在加速效果上要超过均匀栅格和KD—tree,在现阶段,BVH是在GPU上实现的最快的加速结构。并且在GPU上实现BVH=|!JII速结构要比实现其他加速结构更加的简单。

参考文献:

f1】RandimaFemado缡。姚勇,王小琴译.GPU精粹一实时图形缡程的技术,技巧和技艺【M】.北京:人民邮电出版社,2006.【212MattPharr编著。龚敏敏译.GPU精粹2一高性能图形芯片和通用计算编程技巧【M】.北京:清华大学出版社.

p】是思华,柳有权.基于图形处理器(GPU)的通用计算叨.计算机辅助设计与图形学学报,2004,16(5):601-612.

【4】PhilipJ.Sehneider,DavidH.Ebedy著,周长发译.计算机.1tl形学几何工具算法详解【M】.北京:电子工业出版社,2005.【5】MartinChristen.ImplementingraytracingonGPU.Master’s

thesis,UniversityofAppliedSciencesBasel,%tzed锄d’20Q5.

万方数据

GPU光线跟踪算法加速结构研究

作者:王世元, 温柳英, Wang shiyuan, Wen liuying

作者单位:西南石油大学计算机科学学院,成都,610500

刊名:

技术与市场

英文刊名:TECHNOLOGY AND MARKET

年,卷(期):2010,17(5)

被引用次数:0次

参考文献(5条)

1.Randima Fernado.姚勇.王小琴GPU精粹-实时图形编程的技术,技巧和技艺 2006

2.Matt Pharr.龚敏敏GPU精粹2-高性能图形芯片和通用计算编程技巧

3.吴恩华.柳有权基于图形处理器(GPU)的通用计算[期刊论文]-计算机辅助设计与图形学学报 2004(5)

4.Philip J.Sehneider.David H.Eberly.周长发计算机图形学几何工具算法详解 2005

5.Martin Christen Implementing ray tracing on GPU 2005

相似文献(2条)

1.学位论文林鹏基于GPU的光线跟踪及虚拟眼视光学仿真2006

本文是“中国人虚拟眼结构和功能模拟与建模研究”课题的组成部分之一,为建立“中国人虚拟眼”做先期的探索和研究。

作为虚拟眼功能模型研究的组成部分,围绕视光学仿真系统的建立展开了一系列基础研究工作。较为充分地研究了当今热门的GPGPU(基于图形处理器的通用计算)技术概念原理以及实现方法,提出一套GPGPU通用计算框架,在GPU上实现了虚拟眼的光线跟踪算法,并对其进行了分析和一定的改进优化。在视光学仿真方面,集合了众多前期模型研究的成果,以基于GPGPU的光线跟踪技术为核心,提出虚拟眼视光学仿真系统的模型,并实现了初步的系统。

本文的主要研究内容及创新之处:

1.在对GPGPU技术的理论、实施要点以及其局限性进行了较为深入的研究之后,针对科学计算领域GPGPU普及困难以及标准混乱的现状,独创地提出了一套通用的GPGPU计算框架。

2.将光线跟踪算法引入对角膜/晶状体等的光线折射等的研究,从微观角度和仿真计算的手段来研究眼的光学成像机制。研究并实现了基于GPU的虚拟眼光线跟踪算法,相比于CPU算法取得了非常显著的性能提升。

3.突破了传统GuUstrand-Emsley模型眼,结合角膜地形图以及晶状体参数化模型构造了虚拟眼视光学仿真系统,进行了初步的仿真分析研究。在获得比较理想的实验效果的同时最大限度提高了提供了系统的灵活性,也为后续的综合仿真研究打下了良好的基础。

2.学位论文耿钒基于Photon Mapping和GPU的光线跟踪绘制技术研究2007

光线跟踪技术由于其具有原理简单、易于实现、能够逼真地模拟各种视觉效果等优点,因而在近几十年来一直都被视为真实感图形绘制当中一种不可获缺的技术。但是,由于光线跟踪算法本身计算速度相对较慢这一弱点,使得其在实时图形绘制领域中的应用在过去一直是一个空白。直到近几年来,随着计算机硬件性能的不断提高,以及人们对于计算机实时图形绘制的真实度的要求不断提高,使得光线跟踪技术在实时图形绘制当中的应用成为了光线跟踪技术研究领域中的一个新的研究热点。

光子映射算法,是一种在光线跟踪技术中用于对全局光照效果进行模拟的算法。近几年来,由于光子映射算法在绘制图形的效果和计算速度方面的优势,使得其得到了广泛的应用。出于这一原因,论文将光子映射算法作为主要的研究内容,提出了一种改进方法,该方法能够有效的提高光子映射算法的计算速度。除此之外,论文还对采用可编程GPU来实现光线跟踪算法进行了研究和分析。

在论文的第一部分中,首先对光线跟踪图形硬件、交互光线跟踪图形绘制和基于GPU的光线跟踪图形绘制等新的研究热点进行了概括性的总结。此外,对光线跟踪算法的基本思想,以及光线跟踪算法中较为常用的两种加速结构——KD-tree和规则网进行了简要的阐述,同时也对光子映射算法的基本思想及其实现方法进行了分析和探讨。

在论文的第二部分中,详细阐述了论文中所实现的光子映射图形绘制程序的基本架构和各个模块的基本功能。针对光子映射中光强估计过程的计算速度较慢这一缺陷,论文提出了一种改进方法。该方法利用对场景中少量点的光强估计结果通过加权平均的方式来近似地计算出绘制点处的光强值,这样可以在很大程度上减少光强估计计算的次数,从而提高整个光子映射算法的计算速度。实验结果表明在典型场景中该方法的计算速度与原方法相比有3~5倍的提高,并且在绘制图像的质量方面也有令人满意的效果。

在论文的第三部分中,首先概括了可编程GPU的发展历程和基于GPU的通用计算(GPGPu)这一新的研究领域的进展。随后对论文所实现的基于GPU的光线跟踪系统,从基本的设计思想和所采用的相关技术等方面进行了深入地分析和阐述,并给出了相关的实验结果。

本文链接:https://www.sodocs.net/doc/ad3582340.html,/Periodical_jsysc201005005.aspx

授权使用:中科院对地观测与数字地球中心(中科院遥感卫星地面站)(中科院遥感卫星地面站),授权号

:004cbd78-0185-481b-8f14-9e2c0158afe1

下载时间:2010年11月12日

相关主题