BVH加速結構在GPU上的加速效果
來(lái)源:投稿網(wǎng) 時(shí)間:2024-01-05 10:00:08
實(shí)現和比較加速結構。
3.1均勻格柵。
均勻網(wǎng)格是GPU上實(shí)現的第一個(gè)加速結構。Purcell給出了許多選擇均勻網(wǎng)格作為加速結構的原因,但Purcell并沒(méi)有詳細解釋為什么均勻網(wǎng)格比其他加速結構更容易實(shí)現硬件。在討論均勻網(wǎng)格的一些主要特性時(shí),我們更清楚地知道為什么均勻網(wǎng)格成為一個(gè)好的GPU速度結構。
首先,只有使用簡(jiǎn)單的算術(shù)操作,每個(gè)元素的常規時(shí)間才能定位和訪(fǎng)問(wèn)。這消除了對樹(shù)木的常規需求和重復的紋理搜索工作,而紋理搜索相當耗時(shí)。
其次,體素的遍歷是通過(guò)遞增算術(shù)操作完成的。這消除了對堆棧的需求,使我們有可能從光線(xiàn)的起點(diǎn)和距離增加的順序訪(fǎng)問(wèn)體素。
其次,由于對體素的訪(fǎng)問(wèn)是沿著(zhù)光線(xiàn)通過(guò)距離增加的,一旦在被訪(fǎng)問(wèn)的體素中發(fā)現交叉點(diǎn),就可以停止光對體素的全過(guò)程,從而提高全過(guò)程的速度。
最后,用于遍歷的代碼非常適合向量編寫(xiě),而向量形式的編碼風(fēng)格非常適合GPU指令集。
然而,均勻格柵的缺點(diǎn)是它是空間細分結構的一種特殊情況,多個(gè)元素可能包含同一三角形的多個(gè)參考。由于不能使用mailbox技術(shù),這意味著(zhù)需要不止一次測試同一光線(xiàn)和三角形之間的交叉。
3.2KD-treee。
最近,Havran和其他人比較了基于CPU的光跟蹤算法的加速結構。結論是,對于許多不同類(lèi)型的測試場(chǎng)景,平均而言,KD-tree是最快的。因此,有必要檢查基于KD-tree的GPU光跟蹤算法是否會(huì )有類(lèi)似的結論。
就像均勻網(wǎng)格一樣,KD-tree也是一種空間細分結構。與均勻網(wǎng)格不同,KD-tree使用二叉樹(shù)將場(chǎng)景表示為層次結構。
在二叉樹(shù)中,我們將內部節點(diǎn)與葉片節點(diǎn)區分開(kāi)來(lái)。葉節點(diǎn)用于表示保存在體素中的體素和三角形引用。一個(gè)內部節點(diǎn)用于表示空間區域的某個(gè)部分。因此,內部節點(diǎn)包括一個(gè)分裂面的兩個(gè)子樹(shù)的引用,而葉節點(diǎn)只包含一個(gè)三角形列表。
KD-tree的創(chuàng )建過(guò)程是從上到下的。根據評估函數,場(chǎng)景通過(guò)放置分離平面將遞歸分為兩個(gè)元素。我們可以通過(guò)遞歸的方式遍歷KD-tree,但由于GPU沒(méi)有堆棧結構,遞歸策略無(wú)法應用。相反,我們可以記住我們沿著(zhù)光線(xiàn)向上或向下穿越樹(shù)木的距離。該策略消除了堆棧的限制,使用CPU完成KD-tree結構的全過(guò)程成為可能。
當使用GPU對KD-tree進(jìn)行遍歷時(shí),KD-tree被表示為像均勻格柵一樣的紋理集合。這意味著(zhù)有一種保存樹(shù)數據的紋理,一種保存三角形列表的紋理,以及保存實(shí)際三角形數據的紋理。GPU的遍歷首先調用初始核,然后根據需要多次調用合并后的遍歷并要求交付核。
3.3包圍層(BVH)
給出一些隨機光,通過(guò)計算包圍層的平均成本,可以測量包圍層的質(zhì)量。到目前為止,還沒(méi)有構建最佳的包圍層算法,也就是說(shuō),如何準確測量包圍層的平均包圍時(shí)間并不明顯。
Goldsmith和Salmon提出了一個(gè)評價(jià)函數,通常稱(chēng)為表面積啟發(fā)函數。他們通過(guò)父節點(diǎn)和兒童節點(diǎn)的表面積之比來(lái)形式化這種關(guān)系,如下:
在這里,hit(n)是光線(xiàn)擊中節點(diǎn)n的情況,Sn是節點(diǎn)n的表面積,c和p分別表示父子節點(diǎn)。
這個(gè)評價(jià)函數給出了成本估計,當用隨機光線(xiàn)支付同級結構時(shí)。由于沒(méi)有最好的方法來(lái)有效地構建最好的BVH,因此提出了不同的結構技能。下面將列出更常見(jiàn)的方法。
在實(shí)踐中,最廣泛應用于包圍體的是軸對齊包圍盒(AABB)。AABB容易實(shí)現,同光的求交測試非???。在描述BVH的創(chuàng )建時(shí),大多數關(guān)于BVH的論文通?;贙ay和Kajiya、Goldsmith和Salmon兩個(gè)基本想法。Kay和Kajiaya建議自上而下創(chuàng )建BVH。
Goldsmith和Salmon提出了更復雜的自下而上的結構方法。Goldsmith和Salmon指出,BVH的質(zhì)量與三角形作為輸入傳人的順序有關(guān)。因此,他們建議在構建BVH之前隨機擾亂三角形的順序。以下算法是利用Kay/Kajiya的思想創(chuàng )建一個(gè)場(chǎng)景的包圍層次:
本文成功地在GPU上實(shí)現了用于光跟蹤算法的各種加速結構,并比較了這些加速結構在GPU上的加速效果。作為CPU上第一個(gè)光跟蹤器的加速結構,也被證明是最慢的,除非它只包含一個(gè)單獨的物體場(chǎng)景。均勻網(wǎng)格不適用于幾何密度很高的場(chǎng)景。此外,對于均勻網(wǎng)格的CPU上的遍歷,還需要大量的數據。Foley和Sugerman認為,對于大多數場(chǎng)景,KD-tree的效率高于均勻網(wǎng)格。然而,在KD-tree的遍歷過(guò)程中,無(wú)論是重置階段還是回歸階段,片元程序都非常復雜,但這種復雜性也使其在改變場(chǎng)景幾何密度時(shí)能夠做出適當的調整。本文實(shí)現的BVH是最快的加速結構。BVH加速結構在GPU上比其他加速結構更容易實(shí)現。