關(guān) 閉

新聞中心

EEPW首頁 > 工控自動化 > 設(shè)計應(yīng)用 > GPU光線跟蹤算法加速結(jié)構(gòu)研究

GPU光線跟蹤算法加速結(jié)構(gòu)研究

作者: 時間:2012-06-27 來源:網(wǎng)絡(luò) 收藏

摘要:基于是當(dāng)前圖形學(xué)研究的一個熱點(diǎn),也是將來用于廣告、電影、游戲等娛樂產(chǎn)業(yè)的關(guān)鍵技術(shù)。本文論述了如何對基于進(jìn)行實(shí)現(xiàn),以及利用各種加速結(jié)構(gòu),加速實(shí)現(xiàn),提高算法執(zhí)行效率,并對各種加速結(jié)構(gòu)的效果進(jìn)行了比較研究。

本文引用地址:http://butianyuan.cn/article/202272.htm

關(guān)鍵詞:GP BVH KD-Tree

1.引言

近年來,CPU無論在運(yùn)算能力,還是在可編程性上都得到了大幅的提高,GPU已經(jīng)在需要大量運(yùn)算的密集運(yùn)算領(lǐng)域發(fā)揮了舉足輕重的作用。各種基于CPU的密集運(yùn)算被移植到GPU上,以利用GPU巨大的運(yùn)算能力,加速整個算法的運(yùn)算過程。光線跟蹤算法是生成真實(shí)感圖形的一種非常重要的方法,在電影、游戲、廣告等產(chǎn)業(yè),獲得廣泛的應(yīng)用,而光線跟蹤算法也是典型的密集運(yùn)算算法,利用原始的基于CPU的光線跟蹤渲染一幅圖片是非常耗時的操作。因此,如果能夠?qū)PU上的光線跟蹤算法,映射到CPU上,加速光線跟蹤算法的執(zhí)行時間,將會帶來巨大的經(jīng)濟(jì)效益。因此,基于CPU的光線跟蹤算法已成為國內(nèi)外科研人員的研究熱點(diǎn)。

2.基于GPU的光線跟蹤

2.1 相關(guān)工作

當(dāng)前,主要由兩種方法利用CPU來加速光線跟蹤算法。第一種是Carr等人提出來的,將CPU轉(zhuǎn)換為一個蠻力的執(zhí)行光線一三角形求交的計算器,而將任何的光線生成以及著色過程在CPU上完成。這就需要CPU依然執(zhí)行絕大部分的渲染工作。C arr等人指出,在ATI Radeon 8500上,每秒最快能夠執(zhí)行1億2千萬次的光線一三角形求交。同時,作者也指出,由于GPU的單精度浮點(diǎn)的限制,圖片上依然存在一些不太真實(shí)的地方。

第二種方法由Purcell等人提出的,改種方法將整個光線跟蹤器都移植到CPU上進(jìn)行實(shí)現(xiàn)。從光線的產(chǎn)生,加速結(jié)構(gòu)的遍歷,到最后的著色過程都在GPU上執(zhí)行。此后,有很多相同的項目都是基于Purcell的模型上進(jìn)行的。

2.2 GPU上的光線跟蹤算法的映射方式

將傳統(tǒng)的CPU上執(zhí)行的光線跟蹤算法,映射成為一個GPU協(xié)助的,或者基于GPU的光線跟蹤器有眾多方法。下面重點(diǎn)介紹Purcell提出的映射模型,以及在本文的實(shí)現(xiàn)中提出的一個基于CPU的Whitted模型的光線跟蹤器。該光線跟蹤器的布局如圖2.1所示:

在Purcell的論文中,它將光線一三角形求交,以及遍歷過程分離成兩個獨(dú)立的遍歷內(nèi)核和求交內(nèi)核。本文的實(shí)現(xiàn)中,也按照上述模型圖,將光線跟蹤算法分解成光線生成,光線一三角形求交,著色這三個步驟。

在對光線進(jìn)行跟蹤之前,需要生成從視點(diǎn)指向屏幕的原始光線( primary ray)。在一個GPU上,能夠使用光柵器的插值的能力,在一個單一的內(nèi)核調(diào)用中,產(chǎn)生所有的原始光線。

給定觀察矩形(被采樣用于產(chǎn)生圖片的投影平面的一部分)的四個角,以及視點(diǎn),首先計算出這個視錐體的四條邊線。如果讓光柵器在這4條光線之間,按照512×512規(guī)格,在這四條光線之間按照方向進(jìn)行插值,最終就可以獲得能夠產(chǎn)生一幅512×512圖片(一個像素一個采樣點(diǎn))的所有原始光線的方向。同時能夠?qū)⑦@些方向存儲在一個紋理里,并把它作為求交內(nèi)核的輸入。所有的原始光線具有相同的起始點(diǎn),但是仍然把它存儲在一個同方向紋理具有相同維度的紋理內(nèi)。因為當(dāng)生成陰影光線或者反射光線的時候,光線的原點(diǎn)會發(fā)生改變。

求交內(nèi)核把光線的原點(diǎn),方向,以及場景的描述作為輸入數(shù)據(jù)。在內(nèi)核被調(diào)用數(shù)次之后,我們對于每一個像素輸出一個擊中記錄。如果一條光線擊中了場景中的某個三角形,返回?fù)糁悬c(diǎn)的3個重心坐標(biāo),以及相關(guān)的被擊中的三角形。此外,還將輸出被發(fā)現(xiàn)的交點(diǎn)沿光線的距離,以及被擊中三角形的材質(zhì)。這就需要使用5個浮點(diǎn)數(shù)值組成一個擊中記錄。紋理只能夠支持4個顏色通道( RCBA),所以,如果能把擊中記錄裁減到4個值,那么將是非常有益的。

觀察發(fā)現(xiàn),只需要3個重心坐標(biāo)的兩個,因為在三角形內(nèi)部,它們相加的和總是1。這就使得在一個單獨(dú)的RGBA紋理中存儲交點(diǎn)記錄是可行的,并且它的維度同其它兩個光線紋理的維度相同。

Moller和Trumbore提出了一個高效的光線一三角形求交算法,使用這個算法,并利用CPU在向量計算上的優(yōu)勢來進(jìn)行求交計算。下面列出了求交的代碼,這個代碼也展示了如何利用向量指令來提高效率。

當(dāng)所有的原始光線都已經(jīng)計算出了相交的狀態(tài)的時候,就能夠查詢著色過程所需要的表面法線和材質(zhì)的信息。每一個擊中記錄都存儲了一個指向材質(zhì)紋理的索引,這個材質(zhì)紋理包含了三角形的法線,材質(zhì)顏色以及類型。三個頂點(diǎn)的法線根據(jù)擊中記錄的中心坐標(biāo)進(jìn)行了插值。最終的顏色能夠按(N-L)C進(jìn)行計算,此處Ⅳ是法線,L是光源的方向,G是三角形的顏色。

現(xiàn)在根據(jù)擊中的三角形所具有的材質(zhì)的類型(漫反射材質(zhì),或者鏡面反射材質(zhì)),需要產(chǎn)生二次光線,以此來計算陰影和反射。

1)如果一條光線射出場景之外,像素就被賦予全局的背景顏色。

2)如果一條光線擊中了一個漫反射材質(zhì)表面,就發(fā)射一條陰影射線( shdow ray)。這些光線的起始點(diǎn)在擊中點(diǎn),方向為從擊中點(diǎn)指向光源。

3)如果一條光線擊中了一個鏡面反射材質(zhì)表面。就發(fā)射一條鏡面反射光線。鏡面發(fā)射光線的起始點(diǎn)也在擊中點(diǎn),但是它的方向是在擊中點(diǎn)處關(guān)于入射光線和插值后的法線對稱的方向。一個真正的Whitted類型的光線跟蹤器也支持透明材質(zhì),從而能夠產(chǎn)生折射光線。但由于主要是研究加速結(jié)構(gòu),所以在本文的實(shí)現(xiàn)中,沒有考慮折射光線。

4)如果陰影光線擊中了某個幾何體,這就說明在光源和擊中點(diǎn)之間,存在某個幾何體,所以這個像素就應(yīng)該是黑色(處于陰影中)。

當(dāng)跟蹤陰影光線的時候,不關(guān)心最近的那個擊中點(diǎn),更加關(guān)心的是是否存在這樣的擊中點(diǎn)。因此,當(dāng)有一個交點(diǎn)被發(fā)現(xiàn),就可以停止整個求交過程,從而加速算法的處理過程。在本文的實(shí)現(xiàn)中,以相同的方式跟蹤陰影光線和反射光線,因此,就沒有使用到這個優(yōu)化策略。

已經(jīng)對每一個像素產(chǎn)生了正確二次光線,如果需要,就能夠執(zhí)行另外一趟遍歷/求交過程,對上述的二次光線進(jìn)行跟蹤。每一次調(diào)用著色程序就能夠?qū)γ恳粋€像素返回一個顏色值和一條新的光線。著色內(nèi)核也可以將前一次著色程序的輸出當(dāng)作本次著色程序的輸入。這就使得能夠在跟蹤連續(xù)的光線的時候合并這些連續(xù)的鏡面反射的顏色。


上一頁 1 2 下一頁

評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉