本發明專利技術公開了一種基于GPU的層次包圍盒快速構造方法,包括:(1)將GPU的活動線程劃分為若干線程塊,通過構建層次包圍盒對模型空間中的場景數據逐級進行劃分,直至達到預定的級數,其中所有的線程塊同時參與同一個場景節點的劃分;(2)每個線程塊分別參與不同的場景節點的劃分,直至劃分到每個節點所含面片數不多于每個線程塊內的線程數;(3)每個線程分別參與不同的場景節點的劃分,直至劃分到每個節點所含面片數不多于5個。本發明專利技術方法可有效利用硬件的并行計算能力,提高加速結構的構造速度和質量。
【技術實現步驟摘要】
本專利技術涉及圖形實時渲染
,尤其涉及一種層次包圍盒的快速構造方法。
技術介紹
在過去的二十年時間里,顯卡性能的巨大提高,尤其是其可編程性的出現,大大促 進了圖形學研究領域的進步。光線跟蹤技術是一種在圖形繪制領域廣泛應用的技術。相比 光柵化技術,光線跟蹤技術有很多優勢,包括物體可見性的自動計算,時間復雜度與場景中 圖元數量呈次線性關系,更適合并行架構處理等。但是,由于光線跟蹤技術模擬的是真實世 界中光的物理路徑,因此它最大的優勢是產生高質量的圖像,繪制出高真實感的平滑的反 射、折射、軟影(soft shadow)等全局光照效果。Whitted最早使用光線跟蹤技術來模擬全 局光照效果。由于光線跟蹤技術需要花費很高的計算量,因此以往這種技術只能應用在非 實時繪制領域中。當前,計算機硬件的計算能力呈指數形式的增長速度已經使交互式的實時光線跟 蹤成為可能。越來越多的研究開始關注光線跟蹤的實時計算,已經出現了一些優秀的研究 成果。然而,盡管這些研究很多都是基于GPU架構設計的,但這些實現仍然未能充分利用當 前GPU強大的并行計算能力。近年來已經出現了一些基于GPU實現的編程方法,例如NVIDIA公司的 CUDA(Compute Unified Device Architecture)編程模型、蘋果公司的 OpenCL,以及一 些底層的框架結構。這些模型允許程序員自己定義合適的數據結構,為編程提供很大的 靈活性和可操作性,包括創建、調度、同步等線程管理操作可以完全由硬件來完成。例如 在CUDA編程模型里,我們可以根據程序的并行特征將程序劃分成幾個順序執行的被稱為 kernel的代碼段,使其在GPU中執行。為了有效地管理大量的線程,kernel使用標量形式 的 SIMT(Single Instruction,Multiple Thread)操作,線程以一種被稱作 warps 的分組形 式根據kernel中的指令來執行。程序員將線程組織成線程塊(block),這些線程塊本質上 可以看成是虛擬的SM多處理器,擁有獨立的寄存器和共享內存(shared memory),各線程 塊間相對獨立的亂序執行。為了獲得GPU的最大計算性能,有兩個問題需要考慮第一,每個線程應該使用 盡量少的硬件寄存器和存儲資源,以保證GPU內部同一時刻運行更多的活動線程,Popov 等的光線跟蹤實現消耗了過多的寄存器,導致GPU利用率還不到33% ;第二,線程的 SIMD(Single Instruction, Multiple Data)操作對程序員來說是透明的,而SIMD的操作 方式對程序的分支執行非常敏感,同一 warp的線程只有執行程序的同一分支才能獲得最 大效益。最近,一些研究開始關注動態場景下的光線跟蹤方法。在光線跟蹤算法中,構造加 速結構是其中重要的一步,通過將面片重新進行組織,可以大大減少無效的光線遍歷操作 和相交操作。由于動態場景下物體間的拓撲結構會發生改變,甚至物體本身都會發生形變, 因此,每一幀都需要重新對加速結構進行重構。然而,加速結構的構造是一個比較耗時的操作,通常無法在繪制一幀的時間內完成,這也是導致當前基于動態場景的實時光線跟蹤研 究進展較慢的主要原因。kd樹可以提供較好的光線跟蹤性能,但是其昂貴的構造時間已滿足不了實時光線 跟蹤的要求;網格結構易于構建,但是其光線跟蹤的性能嚴重依賴于操作的相似性,而這往 往在復雜場景或者二級光線中是不存在的。鑒于光線跟蹤性能以及處理復雜場景和二級光 線各方面的綜合要求,在處理動態場景問題上,BVH(Bounding Volume Hierarchy)看起來 是一個折中的選擇,與kd樹、網格結構按照空間的分割方法不同,BVH是一個按照物體分割 的場景層次分割結構。設計出一種高質量的快速的加速結構構造方法,使其可以充分利用多核處理器強 大的并行處理能力,從而使加速結構建造速度進一步加快,滿足實時性的要求,是一個光線 跟蹤算法能否有效執行的關鍵。目前公認的性能較好的加速結構一般都是一種層次結構, 如 BVH(Bounding VolumeHierarchies)>BSP(Binary Space Partitioning)、BIH(Bounding IntervalHierarchies)、八叉樹(Octree)等結構。然而層次結構自上而下的構造方式使 其很難在構造階段初期充分的利用多核架構中每個核的計算能力,從而造成硬件的低效使 用。已經有一些工作關注于在多核體系下對加速結構的使用。MacDonald等提出了 SAH(surface area heuristic)策略,Wald和Popov分別提出了針對這一策略設計的優化 的構造方法。最近也出現了一些針對并行構造方面的工作,Popov用帶有幾個核的CPU去 構造kd樹,但由于帶寬有限,取得的性能提升并不明顯,Shevtsov同樣用帶有幾個核的CPU 去構造kd樹,盡管取得了不錯的性能,但他的這種算法不能擴展到更多的核進行處理。當 前,隨著硬件并行計算能力的增強,CUDA這樣的編程平臺也開始成熟,因此,應該重新考慮 加速結構的設計。
技術實現思路
本專利技術提供一種基于GPU的層次包圍盒(bvh)并行構建方法,可有效利用硬件的 并行計算能力,提高加速結構的構造速度和質量。一種基于GPU的層次包圍盒的快速構造方法,包括(1)將GPU的活動線程劃分為若干線程塊,通過構建層次包圍盒(BVH),對模型空 間中的場景數據逐層進行劃分,直至達到預定的層數,其中GPU內部所有的線程塊同時參 與同一個場景節點的劃分;劃分時在需要進行渲染的模型空間的三個坐標軸上(相互垂直的X軸、Y軸和Z 軸),分別計算采樣分割點的SAH(surface area heuristic)花費(MacDonald等在文獻 "Heuristics for ray tracing using space subdivision. Visual Computer, 1990.,,中提 出的評估加速結構最優分割點的方法,如公式(a)所示),然后選取三個坐標軸中花費最小 的分割點,將選取的這個分割點作為分割平面,對模型空間中的場景數據進行劃分。將整個場景所形成的包圍盒作為根節點,第一次劃分可以得到兩個子節點,然后 以同樣的方法,按照寬度優先的方式遞歸這個構造過程,逐層進行劃分,直至構造的層數達 到設定值,即此構造的層數是預先設定好的,一般為5層。這種構造方式可以在層次包圍盒構造初期,快速對場景節點進行分割,從而迅速產生出大量數據供成千上萬的GPU線程使用,使它們一直保持滿負荷工作狀態。我們使用公式(a)來計算每個潛在的分割點,另外我們還需要知道每個子結點所 含面片數及其表面積。Wald等 通過使用排序來計算這些數量,為了避免昂貴的排 序操作,我們使用bin方法以減少帶寬的使用。隨著構造層次的加深,處理核所要處 理的數據明顯減少,使計算SAH花費的時間更短,從而使建造速度更快。采樣分割點的SAH 花費<formula>formula see original document page 5</formula>(a)這里,ni和r^分別代表與當前采樣分割本文檔來自技高網...
【技術保護點】
一種基于GPU的層次包圍盒快速構造方法,其特征在于,包括:(1)將GPU的活動線程劃分為若干線程塊,通過構建層次包圍盒對模型空間中的場景數據逐級進行劃分,直至達到預定的級數,其中所有的線程塊同時參與同一個場景節點的劃分;(2)每個線程塊分別參與不同的場景節點的劃分,直至劃分到每個節點所含面片數不多于每個線程塊內的線程數;(3)每個線程分別參與不同的場景節點的劃分,直至劃分到每個節點所含面片數不多于5個;在步驟(2)和步驟(3)中劃分場景數據的具體步驟如下:a)在存儲區域中建立兩個隊列,為第一隊列和第二隊列,分別存放用來存放等待進行劃分的場景節點;b)當GPU存在空閑線程塊或線程時,從第一隊列中依次取等待進行劃分的場景節點進行劃分,并將產生的新的場景節點放入第二隊列;其中對第一隊列中編號為k的場景節點進行劃分所產生的新的場景節點在第二隊列中的編號分別為2×k+t,其中t=0,1;場景節點在隊列中的編號也對應了該場景節點在存儲區域中的位置;c)當第一隊列中等待進行劃分的場景節點處理完畢后,清空第一隊列中的所有節點數據;當GPU存在空閑線程塊或線程時,從第二隊列中依次取等待進行劃分的場景節點進行劃分,并將產生的新的場景節點放入第一隊列,直至第二隊列中等待進行劃分的場景節點都處理完畢;其中對第二隊列中編號為j的場景節點進行劃分所產生的新的場景節點在第一隊列中的編號分別為2×j+t其中t=0,1;場景節點在隊列中的編號也對應了該場景節點在存儲區域中的位置。d)循環步驟b)、步驟c),直至完成相應的場景節點的劃分;當每個隊列中等待進行劃分的場景節點劃分完畢后,通過硬件支持的緊湊操作清除對該隊列中的空場景節點。...
【技術特征摘要】
【專利技術屬性】
技術研發人員:許端清,楊鑫,趙磊,
申請(專利權)人:浙江大學,
類型:發明
國別省市:86[中國|杭州]
還沒有人留言評論。發表了對其他瀏覽者有用的留言會獲得科技券。