以后地位:S63娱乐网 > S63娱乐宝库 > 信息科技类 > 盘算机使用 > GPU光芒跟踪算法减速构造注释

澳门金沙会员卡查询新闻

泉源:UCS63娱乐网2015-11-07 16:07

择要:

择要:基于GPU的光芒跟踪算法是以后图形学研讨的一个热门,也是未来用于告白、影戏、游戏等娱乐财产的要害技能。本文阐述了怎样对基于GPU的光芒跟踪算法停止完成,以及应用种种

择要:基于GPU的光芒跟踪算法是以后图形学研讨的一个热门,也是未来用于告白、影戏、游戏等娱乐财产的要害技能。本文阐述了怎样对基于GPU的光芒跟踪算法停止完成,以及应用种种减速构造,减速算法完成,进步算法实行服从,并对种种减速构造的结果停止了比拟研讨。

要害词:GPGPU 光芒跟踪 BVH KD-Tree

1.弁言

比年来,CPU无论在运算才能,照旧在可编程性上都失掉了大幅的进步,GPU曾经在需求少量运算的麋集运算范畴发扬了无足轻重的作用。种种基于CPU的麋集运算被移植到GPU上,以应用GPU宏大的运算才能,减速整个算法的运算进程。光芒跟踪算法是天生真实感图形的一种十分紧张的办法,在影戏、游戏、告白等财产,取得普遍的使用,而光芒跟踪算法也是典范的麋集运算算法,应用原始的基于CPU的光芒跟踪渲染一幅图片黑白常耗时的操纵。因而,假如可以将CPU上的光芒跟踪算法,映射到CPU上,减速光芒跟踪算法的实行工夫,将会带来宏大的经济效益。因而,基于CPU的光芒跟踪算法已成为国际内科研职员的研讨热门。

2.基于GPU的光芒跟踪

2.1 相干任务

以后,次要由两种办法应用CPU来减速光芒跟踪算法。第一种是Carr等人提出来的,将CPU转换为一个蛮力的实行光芒一三角形求交的盘算器,而将任何的光芒天生以及着色进程在CPU上完成。这就需求CPU仍然实行绝大局部的渲染任务。C arr等人指出,在ATI Radeon 8500上,每秒最快可以实行1亿2万万次的光芒一三角形求交。同时,作者也指出,由于GPU的单精度浮点的限定,图片上仍然存在一些不太真实的中央。

第二种办法由Purcell等人提出的,改种办法将整个光芒跟踪器都移植到CPU上停止完成。从光芒的发生,减速构造的遍历,到最初的着色进程都在GPU上实行。尔后,有许多相反的项目都是基于Purcell的模子上停止的。

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

将传统的CPU上实行的光芒跟踪算法,映射成为一个GPU帮忙的,或许基于GPU的光芒跟踪器有浩繁办法。上面重点引见Purcell提出的映射模子,以及在本文的完成中提出的一个基于CPU的Whitted模子的光芒跟踪器。该光芒跟踪器的结构如图2.1所示:

在Purcell的S63娱乐中,它将光芒一三角形求交,以及遍历进程别离成两个独立的遍历内核和求交内核。本文的完成中,也依照上述模子图,将光芒跟踪算法剖析成光芒天生,光芒一三角形求交,着色这三个步调。

在对光芒停止跟踪之前,需求天生从视点指向屏幕的原始光芒( primary ray)。在一个GPU上,可以运用光栅器的插值的才能,在一个单一的内核挪用中,发生一切的原始光芒。

给定察看矩形(被采样用于发生图片的投影立体的一局部)的四个角,以及视点,起首盘算出这个视锥体的四条边线。假如让光栅器在这4条光芒之间,依照512×512规格,在这四条光芒之间依照偏向停止插值,终极就可以取得可以发生一幅512×512图片(一个像素一个采样点)的一切原始光芒的偏向。同时可以将这些偏向存储在一个纹理里,并把它作为求交内核的输出。一切的原始光芒具有相反的肇始点,但是依然把它存储在一个同偏向纹理具有相反维度的纹理内。由于当天生暗影光芒或许反射光芒的时分,光芒的原点会发作改动。

求交内核把光芒的原点,偏向,以及场景的描绘作为输出数据。在内核被挪用数次之后,我们关于每一个像素输入一个击中记载。假如一条光芒击中了场景中的某个三角形,前往击中点的3个重心坐标,以及相干的被击中的三角形。别的,还将输入被发明的交点沿光芒的间隔,以及被击中三角形的材质。这就需求运用5个浮点数值构成一个击中记载。纹理只可以支持4个颜色通道( RCBA),以是,假如能把击中记载扩充到4个值,那么将黑白常无益的。

察看发明,只需求3个重心坐标的两个,由于在三角形外部,它们相加的和总是1。这就使得在一个独自的RGBA纹理中存储交点记载是可行的,而且它的维度同别的两个光芒纹理的维度相反。
Moller和Trumbore提出了一个高效的光芒一三角形求交算法,运用这个算法,并应用CPU在向量盘算上的劣势来停止求交盘算。上面列出了求交的代码,这个代码也展现了怎样应用向量指令来进步服从。

当一切的原始光芒都曾经盘算出了相交的形态的时分,就可以盘问着色进程所需求的外表法线和材质的信息。每一个击中记载都存储了一个指向材质纹理的索引,这个材质纹理包括了三角形的法线,材质颜色以及范例。三个极点的法线依据击中记载的中央坐标停止了插值。终极的颜色可以按(N-L)C停止盘算,此处Ⅳ是法线,L是光源的偏向,G是三角形的颜色。

如今依据击中的三角形所具有的材质的范例(漫反射材质,或许镜面反射材质),需求发生二次光芒,以此来盘算暗影和反射。

1)假如一条光芒射进场景之外,像素就被付与全局的配景颜色。

2)假如一条光芒击中了一个漫反射材质外表,就发射一条暗影射线( shdow ray)。这些光芒的肇始点在击中点,偏向为从击中点指向光源。

3)假如一条光芒击中了一个镜面反射材质外表。就发射一条镜面反射光芒。镜面发射光芒的肇始点也在击中点,但是它的偏向是在击中点处关于入射光芒和插值后的法线对称的偏向。一个真正的Whitted范例的光芒跟踪器也支持通明材质,从而可以发生折射光芒。但由于次要是研讨减速构造,以是在本文的完成中,没有思索折射光芒。

4)假如暗影光芒击中了某个多少体,这就阐明在光源和击中点之间,存在某个多少体,以是这个像素就应该是玄色(处于暗影中)。当跟踪暗影光芒的时分,不关怀近来的谁人击中点,愈加关怀的是能否存在如许的击中点。因而,当有一个交点被发明,就可以中止整个求交进程,从而减速算法的处置进程。在本文的完成中,以相反的方法跟踪暗影光芒和反射光芒,因而,就没有运用到这个优化战略。

曾经对每一个像素发生了准确二次光芒,假如需求,就可以实行别的一趟遍历/求交进程,对上述的二次光芒停止跟踪。每一次挪用着色顺序就可以对每一个像素前往一个颜色值和一条新的光芒。着色内核也可以将前一次着色顺序的输入看成本次着色顺序的输出。这就使得可以在跟踪延续的光芒的时分兼并这些延续的镜面反射的颜色。

同Carr等人的顺序差别,本文所接纳的顺序不存在浮点精度太低的题目,由于Ceforce 7300在整个管线中支持真正的32位浮点操纵。

3.减速构造的完成和比拟

3.1平均栅格

平均栅格是第一个在GPU上完成的减速构造。Purcell给出了许多选择平均栅格作为减速构造的来由,但是Purcell没有细致的阐明为什么平均网格关于硬件完成而言比别的的减速构造要愈加的复杂。当在讨论了平均栅格的一些次要特性的时分,愈加明晰的晓得了平均栅格为什么会成为一个好的GPU机速构造。

起首,只用运用复杂的算术运算,就可以关于每集体素的遍历在常量工夫能被定位和存取。这就消弭了对树的遍历的需求,以及反复的纹理查找任务,而纹理查找是相称耗时的。

其次,体素的遍历是经过递增算术运算来完成的。这就消弭了对货仓的需求,使得我们可以从光芒的肇始点开端,以间隔递增的次序拜访体素成为能够。

再其次,由于关于体素的拜访是沿着光芒,以间隔递增的方法遍历的,以是,一旦在一个被拜访的体素中报道发明有一个交点,就可以中止这条光芒对体素的遍历进程,从而进步整个遍历进程的速率。

最初,用于遍历的代码十分合适用向量编写,而向量方式的编码作风又十分合适GPU的指令集。

但是,平均栅格的缺陷便是由于它是空间细分构造的一种特别状况,多集体素能够包括相反三角形的多个援用。由于无法运用mailbox技能,这就意味着需求关于相反的光芒和三角形之间停止不止一次的相交测试。

3.2 KD-tree

近来,Havran等人对基于CPU的光芒跟踪算法的减速构造停止了比拟,得出的结论是关于浩繁差别范例的测试场景,均匀而言,KD-tree是最快的。以是,有须要调查一下关于基于KD-tree的GPU光芒跟踪算法,能否也会有类似的结论。
就像平均栅格一样,KD-tree也是一种空间细分构造。同平均网格差别的是,KD-tree应用一个二叉树将场景表现成一个条理构造。

在二叉树中,我们将外部节点和叶子节点区离开。叶子节点用来表现体素和与之相干的保管在该体素内的三角形的援用。一个外部节点用来表现空间地区的某个局部。以是,外部节点包括一个破裂面的两个子树的援用,而叶子节点只包括一个三角形列表。

KD-tree的创立进程从上而下,依据一个评价函数,经过安排一个别离立体,递归的将场景别离成两集体素。我们可以以递归的方法遍历KD-tree,但是由于GPU没有货仓构造,以是无法使用递归的战略。取而代之的是,我们可以经过记着我们沿着光芒行进了多远来向上或许向下遍历树。这种战略消弭了需求货仓的限定,使得用CPU来完成对KD-tree构造的遍历成为能够。

当运用GPU对KD-tree停止遍历的时分,KD-tree像平均栅格那样被表现成一个纹理的聚集。这就意味着有一个保管树数据的纹理,一个保管三角形列表的纹理,和一个保管实践的三角形数据的纹理。GPU的遍历起首挪用一个初始化内核,然后依照需求,屡次挪用兼并后的遍历和求交内核。

3.3 解围体条理(BVH)

给定一些随机的光芒,经过盘算遍历解围体条理的均匀破费,就可以丈量出该解围体条理的质量。迄今为止,还没有构建最优的解围体条理的算法,也便是说,怎样精确的丈量一个解围体条理的均匀遍历工夫还不是很分明。

Goldsmith和Salmon提出了一个评价函数,通常被称为外表积启示式函数。他们经过父节点和孩子节点的外表积之最近方式化的表述这个干系,此评价函数如下所示:

此处,hit(n)是光芒击中节点n的状况,Sn是节点n的外表积,c和p辨别表现父节点和孩子节点。

这个评价函数给出了,当用一条随机的光芒同条理构造求交的时分,本钱上的估量。由于没有最优的办法去无效的结构一个最优的BVH,提出了差别的结构本领。上面,将列出比拟通用的办法。

在理论中,关于解围体使用的最普遍的便是轴对齐解围盒(AABB)。AABB易于完成,而且同光芒的求交测试十分快。大少数有关BVH的S63娱乐在描绘BVH的创立的时分,通常辨别以Kay和Kajiya,或许Goldsmith和Salmon这两种根本的想法为根底。Kay和Kajiaya发起以自上而下递归的方法停止BVH的创立。

Goldsmith和Salmon提出了一个愈加庞大的自底向上的结构方法。Goldsmith和Salmon指出,BVH的质量同作为输出传人的三角形的次序有关。因而,他们发起在结构BVH之前,随机打乱三角形的次序。下述算法便是应用Kay/Kajiya的头脑创立某个场景的解围体条理的办法:

4.完毕语

本文乐成的在GPU上完成了用于光芒跟踪算法中的种种减速构造,并对这些减速构造在GPU上的减速结果停止了比拟。平均栅格作为第一个在CPU上完成的光芒跟踪器的减速构造,也被证明是最慢的,除非是只包括一个独自的物体的场景的状况。平均栅格不合适多少体的密度十分高的场景。别的,关于平均栅格的CPU上的遍历表现,也需求少量的数据。Foley和Sugerman以为,关于大少数场景,KD-tree的服从要比平均栅格高。但是,在KD-tree的遍历进程中,无论是重置阶段照旧回退阶段,片元顺序都十分的庞大,但这种庞大性也使得其可以在场景的多少体的密度改动的时分做出得当的调解。本文完成的BVH被证明在减速结果上要超越平均栅格和KD-tree,在现阶段,BVH是在GPU上完成的最快的减速构造。而且在GPU上完成BVH减速构造要比完成其他减速构造愈加的复杂。

参考文献:

[1]Randima Femado编,姚勇,王小琴译.GPU精炼一及时图形编程的技能,本领和武艺[M].北京:人民邮电出书社,2006.

[2] Matt Pharr编著,龚敏敏译.GPU精炼2-高功能图形芯片和通用盘算编程本领[M].北京:清华大学出书社.

[3]昊恩华,柳有权.基于图形处置器(GPU)的通用盘算叨.盘算机辅佐设计与图形学学报,2004,16(5): 601-612.

中心期刊引荐


宣布范例: S63娱乐宣布 S63娱乐投稿
标题: *
姓名: *
手机: * (填写数值)
Email:
QQ: * (填写数值)
文章:
要求: