資源描述:
《gpu光線跟蹤算法加速結構研究》由會員上傳分享,免費在線閱讀,更多相關內容在學術論文-天天文庫。
1、GPU光線跟蹤算法加速結構研究:基于GPU的光線跟蹤算法是當前圖形學研究的一個熱點,也是將來用于廣告、電影、游戲等娛樂產業(yè)的關鍵技術。本文論述了如何對基于GPU的光線跟蹤算法進行實現(xiàn),以及利用各種加速結構,加速算法實現(xiàn),提高算法執(zhí)行效率,并對各種加速結構的效果進行了比較研究。關鍵詞:GPGPU光線跟蹤BVHKD-Treedoi:10.3969/j.issn.1006-8554.2010.05.0051.引言近年來,CPU無論在運算能力,還是在可編程性上都得到了大幅的提高,GPU已經在需要大量運算的密集運算領域發(fā)揮了舉足輕重的作用。各種基于CPU的
2、密集運算被移植到GPU上,以利用GPU巨大的運算能力,加速整個算法的運算過程。光線跟蹤算法是生成真實感圖形的一種非常重要的方法,在電影、游戲、廣告等產業(yè),獲得廣泛的應用,而光線跟蹤算法也是典型的密集運算算法,利用原始的基于CPU的光線跟蹤渲染一幅圖片是非常耗時的操作。因此,如果能夠將CPU上的光線跟蹤算法,映射到CPU上,加速光線跟蹤算法的執(zhí)行時間,將會帶來巨大的經濟效益。因此,基于CPU的光線跟蹤算法已成為國內外科研人員的研究熱點。2.基于GPU的光線跟蹤2.1相關工作當前,主要由兩種方法利用CPU來加速光線跟蹤算法。第一種是Carr等人提出來
3、的,將CPU轉換為一個蠻力的執(zhí)行光線一三角形求交的計算器,而將任何的光線生成以及著色過程在CPU上完成。這就需要CPU依然執(zhí)行絕大部分的渲染工作。Carr等人指出,在ATIRadeon8500上,每秒最快能夠執(zhí)行1億2千萬次的光線一三角形求交。同時,也指出,由于GPU的單精度浮點的限制,圖片上依然存在一些不太真實的地方。第二種方法由Purcell等人提出的,改種方法將整個光線跟蹤器都移植到CPU上進行實現(xiàn)。從光線的產生,加速結構的遍歷,到最后的著色過程都在GPU上執(zhí)行。此后,有很多相同的項目都是基于Purcell的模型上進行的。2.2GPU上的光
4、線跟蹤算法的映射方式將傳統(tǒng)的CPU上執(zhí)行的光線跟蹤算法,映射成為一個GPU協(xié)助的,或者基于GPU的光線跟蹤器有眾多方法。下面重點介紹Purcell提出的映射模型,以及在本文的實現(xiàn)中提出的一個基于CPU的oller和Trumbore提出了一個高效的光線一三角形求交算法,使用這個算法,并利用CPU在向量計算上的優(yōu)勢來進行求交計算。下面列出了求交的代碼,這個代碼也展示了如何利用向量指令來提高效率。當所有的原始光線都已經計算出了相交的狀態(tài)的時候,就能夠查詢著色過程所需要的表面法線和材質的信息。每一個擊中記錄都存儲了一個指向材質紋理的索引,這個材質紋理包含
5、了三角形的法線,材質顏色以及類型。三個頂點的法線根據擊中記錄的中心坐標進行了插值。最終的顏色能夠按(N-L)C進行計算,此處Ⅳ是法線,L是光源的方向,G是三角形的顏色?,F(xiàn)在根據擊中的三角形所具有的材質的類型(漫反射材質,或者鏡面反射材質),需要產生二次光線,以此來計算陰影和反射。1)如果一條光線射出場景之外,像素就被賦予全局的背景顏色。2)如果一條光線擊中了一個漫反射材質表面,就發(fā)射一條陰影射線(shdoailbox技術,這就意味著需要對于相同的光線和三角形之間進行不止一次的相交測試。3.2KD-tree最近,Havran等人對基于CPU的光線跟
6、蹤算法的加速結構進行了比較,得出的結論是對于眾多不同類型的測試場景,平均而言,KD-tree是最快的。所以,有必要考察一下對于基于KD-tree的GPU光線跟蹤算法,是否也會有相似的結論。就像均勻柵格一樣,KD-tree也是一種空間細分結構。同均勻X格不同的是,KD-tree利用一個二叉樹將場景表示成一個層次結構。在二叉樹中,我們將內部節(jié)點和葉子節(jié)點區(qū)分開。葉子節(jié)點用來表示體素和與之相關的保存在該體素內的三角形的引用。一個內部節(jié)點用來表示空間區(qū)域的某個部分。所以,內部節(jié)點包含一個分裂面的兩個子樹的引用,而葉子節(jié)點只包含一個三角形列表。KD-tre
7、e的創(chuàng)建過程從上而下,根據一個評價函數(shù),通過放置一個分離平面,遞歸的將場景分離成兩個體素。我們能夠以遞歸的方式遍歷KD-tree,但是由于GPU沒有堆棧結構,所以無法應用遞歸的策略。取而代之的是,我們能夠通過記住我們沿著光線前進了多遠來向上或者向下遍歷樹。這種策略消除了需要堆棧的限制,使得用CPU來完成對KD-tree結構的遍歷成為可能。當使用GPU對KD-tree進行遍歷的時候,KD-tree像均勻柵格那樣被表示成一個紋理的集合。這就意味著有一個保存樹數(shù)據的紋理,一個保存三角形列表的紋理,和一個保存實際的三角形數(shù)據的紋理。GPU的遍歷首先調用一
8、個初始化內核,然后按照需要,多次調用合并后的遍歷和求交內核。3.3包圍體層次(BVH)給定一些隨機的光線,通過計算遍歷包圍體層次的平均花