本發(fā)明涉及計算機圖形學領域,尤其涉及一種面向GPU包圍盒碰撞檢測方法。
背景技術:
碰撞檢測是計算機圖像、虛擬現(xiàn)實、計算機游戲、動畫、計算機輔助設計、機器人及虛擬制造等領域中的一個重要研究課題。碰撞檢測技術是檢測物體之間是否發(fā)生接觸或穿透,如果發(fā)生了這種情況就要采取相應的相應措施,而自碰撞檢測是可變形體模擬過程中最耗時的環(huán)節(jié)。而,現(xiàn)有算法大多是為單核CPU設計的,無法有效擴展到大規(guī)模并行處理器上。隨著多核圖形處理器(Graphics Processing Unit,簡稱GPU)的快速發(fā)展,基本上所有的計算機上都配置有GPU,設計新的并行算法有望利用GPU的計算資源提高碰撞檢測算法的效率。
因此,本領域的技術人員致力于開發(fā)一種面向GPU包圍盒碰撞檢測方法,在保證高度交互式更新率的前提下,快速準確地檢測兩個嚴重變形模型的所有基元對之間的相交。
技術實現(xiàn)要素:
有鑒于現(xiàn)有技術的上述缺陷,本發(fā)明所要解決的技術問題是開發(fā)一種面向GPU包圍盒碰撞檢測方法,在保證高度交互式更新率的前提下,快速準確地檢測兩個嚴重變形模型的所有基元對之間的相交。
為了獲得GPU的最大計算性能,需要考慮兩個問題:1、每個線程應使用盡量少的硬件寄存器和存儲資源,以保證GPU內(nèi)部同一時刻可以運行更多的活動線程;2、線程的單指令多數(shù)據(jù)操作對程序的分支執(zhí)行非常敏感,統(tǒng)一線程組內(nèi)的線程只有執(zhí)行程序的同一分支才能獲得最大性能。
為實現(xiàn)上述目的,本發(fā)明提供了一種面向GPU包圍盒碰撞檢測方法,包括以下三個階段:
階段1、包圍盒層次結(jié)構(gòu)構(gòu)造階段;
階段2、軸對齊包圍盒(AABB)碰撞檢測階段;
階段3、包圍盒層次結(jié)構(gòu)更新階段;
其中,
階段1具體為包括步驟11、在GPU上分階段構(gòu)造BVH樹;
階段2具體為包括步驟21、在GPU上進行AABB重疊測試;
步驟22、在GPU上進行基元三角形相交測試;
階段3具體為包括步驟31、使用包圍盒修整的方式更新BVH樹結(jié)構(gòu)。
進一步地,步驟11具體為:采用表面積啟發(fā)式算法策略來確定最優(yōu)的分割點,進而形成包圍盒的節(jié)點。
進一步地,計算每個潛在的分割點,然后采用寬度優(yōu)先的方式計算各個采樣分割點的表面積啟發(fā)式算法花費,以確定加速結(jié)構(gòu)中一個節(jié)點包圍盒的最優(yōu)分割點位置。
進一步地,計算每個潛在分割點的具體步驟為:Cp被設置為選取當前采樣點后進行遍歷和相交操作所可能產(chǎn)生的花費;nl和nr分別被設置為相應左子節(jié)點、右子節(jié)點所含的面片數(shù)量;S(Nl)、S(Nr)分別被設置為與當前采樣分割點相鄰的左子節(jié)點、右子節(jié)點的表面積,S(N)被設置為當前采樣分割點的父節(jié)點的表面積,KT被設置為對當前采樣分割點的父節(jié)點進行遍歷所產(chǎn)生的花費,KI被設置為對當前采樣分割點進行相交操作所產(chǎn)生的花費,利用公式Cp=KT+Kl[nlS(Nl)+nrS(Nr)]/S(N)得到的最小的Cp所對應的點即為最優(yōu)分割點。
進一步地,在包圍盒碰撞檢測階段,首先在GPU上進行全局的AABB重疊測試,接著在GPU上進行大規(guī)模并行重疊測試,在模型的全局AABB對之間檢測相交,找出存在相交的模型對。
進一步地,步驟31具體為,首先更新葉子節(jié)點,再更新兩個孩子節(jié)點,最后更新中間節(jié)點。
進一步地,步驟1還包括減少GPU計算資源浪費的步驟,具體為:
步驟12、在全局存儲區(qū)域中建立2個隊列,第1隊列和第2隊列分別用來存放等待進行劃分的包圍盒;
步驟13、當GPU存在空閑線程塊時,依次從第1隊列中取等待進行劃分的包圍盒節(jié)點進行劃分,并將產(chǎn)生的新的包圍盒節(jié)點放入第2隊列;
步驟14、當?shù)?隊列中所有等待進行劃分的包圍盒節(jié)點處理完畢后,清空第1隊列中的所有節(jié)點數(shù)據(jù);當GPU存在空閑線程塊時,依次從第2隊列中取等待進行劃分的包圍盒節(jié)點進行劃分,并將產(chǎn)生的新的包圍盒節(jié)點放入第1隊列,直至第2隊列中等待進行劃分的包圍盒節(jié)點都處理完畢;
步驟15、循環(huán)執(zhí)行步驟14和步驟15,直至完成相應的包圍盒節(jié)點的劃分。
進一步地,構(gòu)造BVH樹的中期,使用一個block處理一個BVH節(jié)點。
進一步地,步驟1分別對模型X和模型Y構(gòu)造BVH樹。
技術效果
本發(fā)明的一種面向GPU包圍盒碰撞檢測方法能夠有效地利用GPU可多線程并行的特點,在GPU上構(gòu)建BVH樹結(jié)構(gòu),在GPU上執(zhí)行大規(guī)模并行AABB包圍盒重疊測試,在GPU上進行造包圍盒層次結(jié)構(gòu)的更新,有效地將復雜的變形體碰撞檢測在GPU下進行大規(guī)模并行流計算的方式實現(xiàn),在保證高度交互率的前提下,快速準確檢測兩個嚴重變形模型的所有基元對之間的相交。
以下將結(jié)合附圖對本發(fā)明的構(gòu)思、具體結(jié)構(gòu)及產(chǎn)生的技術效果作進一步說明,以充分地了解本發(fā)明的目的、特征和效果。
附圖說明
圖1是本發(fā)明的一個較佳實施例的一種面向GPU包圍盒碰撞檢測方法的流程示意圖。
圖2是本發(fā)明的一個較佳實施例的一種面向GPU包圍盒碰撞檢測方法的BVH樹構(gòu)造過程示意圖。
具體實施方式
如圖1所示,本發(fā)明的一較佳實施例提供了一種面向GPU包圍盒碰撞檢測方法,以檢測模型X、模型Y之間發(fā)生碰撞的三角形基元對為例,對發(fā)明的一種面向GPU包圍盒碰撞檢測方法進行詳細說明,在本發(fā)明的較佳實施例中,輸入流為根據(jù)模型X和Y構(gòu)造的BVH樹結(jié)構(gòu)構(gòu)成的兩個軸對齊包圍盒(Axis Aligned Bounding Box,簡稱AABB),面向GPU包圍盒碰撞檢測方法的步驟主要是:
階段1、包圍盒層次結(jié)構(gòu)構(gòu)造階段;
階段2、軸對齊包圍盒碰撞檢測階段;
階段3、包圍盒層次結(jié)構(gòu)更新階段;
具體地,步驟如下:
階段1具體為包括
步驟11、在GPU上分階段構(gòu)造BVH樹;
步驟11、在GPU上分階段構(gòu)造BVH樹的具體步驟是,分別對模型X、Y創(chuàng)建初始的BVH樹。
采用表面積啟發(fā)式算法(SAH)策略來確定最優(yōu)的分割點,進而形成包圍盒節(jié)點。GPU線程計算單元都用以計算各個采樣分割點的SAH花費進而快速確定加速結(jié)構(gòu)中一個節(jié)點包圍盒的最優(yōu)分割點位置。采用寬度優(yōu)先的方式,在3個坐標軸上分別計算采樣分割點的SAH花費,然后選取每個坐標軸上花費最小的分割點。
計算每個潛在分割點的具體步驟為:Cp被設置為選取當前采樣點后進行遍歷和相交操作所可能產(chǎn)生的花費;nl和nr分別被設置為相應左子節(jié)點、右子節(jié)點所含的面片數(shù)量;S(Nl)、S(Nr)分別被設置為與當前采樣分割點相鄰的左子節(jié)點、右子節(jié)點的表面積,S(N)被設置為當前采樣分割點的父節(jié)點的表面積,KT被設置為對當前采樣分割點的父節(jié)點進行遍歷所產(chǎn)生的花費,KI被設置為對當前采樣分割點進行相交操作所產(chǎn)生的花費,利用公式Cp=KT+KI[nlS(Nl)+nrS(Nr)]/S(N)得到的最小的Cp所對應的點即為最優(yōu)分割點。
根據(jù)BVH樹在不同構(gòu)造階段的特點采用不同的構(gòu)造策略,解決在構(gòu)造初期線程塊間因任務不均而使空閑線程塊出現(xiàn)等待狀況的問題。在加速構(gòu)造初期,可以將GPU中全部線程計算單元都用以計算各個采樣分割點的SAH花費,進而快速確定加速結(jié)構(gòu)中一個結(jié)點包圍盒的最優(yōu)分割點位置。
因此,步驟1還包括減少GPU計算資源浪費的步驟,具體為:
步驟12、在全局存儲區(qū)域中建立2個隊列,第1隊列和第2隊列分別用來存放等待進行劃分的包圍盒;
步驟13、當GPU存在空閑線程塊時,依次從第1隊列中取等待進行劃分的包圍盒節(jié)點進行劃分,并將產(chǎn)生的新的包圍盒節(jié)點放入第2隊列;對于第1隊列中編號為k的包圍盒節(jié)點進行劃分后所產(chǎn)生的新的包圍盒節(jié)點,使其在第2隊列中的編號分別為2k+t(t=0,1);包圍盒節(jié)點在隊列中的編號對應該包圍盒節(jié)點在存儲區(qū)域中的位置。
步驟14、當?shù)?隊列中所有等待進行劃分的包圍盒節(jié)點處理完畢后,清空第1隊列中的所有節(jié)點數(shù)據(jù);當GPU存在空閑線程塊時,依次從第2隊列中取等待進行劃分的包圍盒節(jié)點進行劃分,并將產(chǎn)生的新的包圍盒節(jié)點放入第1隊列,直至第2隊列中等待進行劃分的包圍盒節(jié)點都處理完畢;對于第2隊列中編號為j的包圍盒節(jié)點進行劃分后所產(chǎn)生的新的包圍盒節(jié)點,使其在第1隊列中的編號分別為2j+t(t=0,1);包圍盒節(jié)點在隊列中的編號對應該包圍盒節(jié)點在存儲區(qū)域中的位置。
步驟15、循環(huán)執(zhí)行步驟14和步驟15,直至完成相應的包圍盒節(jié)點的劃分。
如圖2所示,在層次包圍盒的構(gòu)造初期,包圍盒內(nèi)部包含大量需要計算的采樣分割點,而這些計算都是相互獨立并且能夠快速實現(xiàn),因此將GPU中全部線程單元看作是線程池,并行地計算各個采樣分割點的SAH花費。
當每個隊列中等待進行劃分的包圍盒節(jié)點劃分完畢后,通過硬件支持的緊湊操作清除該隊列中的空節(jié)點。t的具體取值可以在線程塊內(nèi)速度更快的共享存儲區(qū)里計算.在當前層次的子結(jié)點全部計算完畢后,通過計算壓縮,即使用壓縮操作將空節(jié)點去掉,形成新的父節(jié)點隊列。因此將BVH結(jié)構(gòu)中每個節(jié)點所包含的面片放入單個的線程中,避免出現(xiàn)計算資源閑置的情況。
其中,構(gòu)造BVH樹的中期,使用一個線程塊處理一個BVH節(jié)點。隨著結(jié)構(gòu)構(gòu)造層次的加深,BVH結(jié)構(gòu)每個節(jié)點所含的面片數(shù)越來越少,甚至少于一個線程塊的線程數(shù)。為充分利用GPU的資源,到構(gòu)造后期,GPU的每個線程要逐個計算節(jié)點內(nèi)各采樣點的SAH花費,然后選取最優(yōu)的采樣點作為該節(jié)點的分割點。
用同樣的方法,創(chuàng)建Y的BVH樹結(jié)構(gòu)。之后利用軸對齊包圍盒包含著BVH樹的葉子節(jié)點,利用軸對齊包圍盒進行碰撞檢測。
階段2、軸對齊包圍盒碰撞檢測階段的具體為包括:
步驟21、在GPU上進行AABB重疊測試;
步驟22、在GPU上進行基元三角形相交測試;
其中,首先在GPU上進行全局AABB重疊測試,接著在GPU上進行大規(guī)模并行重疊測試;
在模型的全局AABB對之間檢測相交,找出存在相交的模型對執(zhí)行下一步驟;
在GPU進行AABB重疊測試,計算兩個AABB重疊非常簡單,用坐標軸最小和最大的兩個點來表示一個AABB。片段著色器完成向量的最小和最大分量的計算。調(diào)用一個GPU上的片段程序,通過單指令多數(shù)據(jù)流(Single Instruction Multiple Data,簡稱SIMD)對相應的AABB間進行基礎的重疊測試。假設包圍盒A和B的最大點和最小點分別是(aabbMinA,aabbMaxA)和(aabbMinB,aabbMaxB),無碰撞的條件是aabbMinA.x大于aabbMaxB.x或者aabbMaxA.x小于aabbMinB.x或者aabbMinA.y大于aabbMaxB.y或者aabbMaxA.y小于aabbMinB.y或者aabbMinA.z大于aabbMaxB.z或者aabbMaxA.z小于aabbMinB.z。比較AABB的上界和下界值,若無相交值,則立即報告不存在碰撞;若有相交,則在GPU上對所有發(fā)生了相交的AABB進行三角形基元相交測試。
利用測試AABB碰撞的方法,測試相交的AABB包圍盒內(nèi)的三角形是否存在碰撞;由上一步計算得到的發(fā)生碰撞的AABB流,取出其中包含的三角形基元,在GPU上調(diào)用一個片段程序,同樣利用單指令多數(shù)據(jù)流對三角形進行相交測試。
準備AABB重疊測試時,利用GPU可多線程并行的特點,將包圍盒存儲到一個2D的數(shù)組存儲結(jié)構(gòu)中,對包含限定三角形個數(shù)的AABB進行邊界檢測;將發(fā)生碰撞的AABB的三角形基元存儲到2D數(shù)組結(jié)構(gòu)里,對三角形基元直接進行重疊測試。
階段3、包圍盒層次結(jié)構(gòu)更新階段。具體為包括步驟31、使用包圍盒修整的方式更新BVH樹結(jié)構(gòu)?;疽?guī)則是:葉子節(jié)點首先更新,中間節(jié)點等兩個孩子節(jié)點都更新后,在進行更新。這種更新可逐層同時進行,是一種適合并行的算法。
綜上所述,本發(fā)明的一種面向GPU包圍盒碰撞檢測方法能夠有效地利用GPU可多線程并行的特點,在GPU上構(gòu)建BVH樹結(jié)構(gòu),在GPU上執(zhí)行大規(guī)模并行AABB包圍盒重疊測試,在GPU上進行造包圍盒層次結(jié)構(gòu)的更新,有效地將復雜的變形體碰撞檢測在GPU下進行大規(guī)模并行流計算的方式實現(xiàn),在保證高度交互率的前提下,快速準確檢測兩個嚴重變形模型的所有基元對之間的相交。
以上詳細描述了本發(fā)明的較佳具體實施例。應當理解,本領域的普通技術人員無需創(chuàng)造性勞動就可以根據(jù)本發(fā)明的構(gòu)思作出諸多修改和變化。因此,凡本技術領域中技術人員依本發(fā)明的構(gòu)思在現(xiàn)有技術的基礎上通過邏輯分析、推理或者有限的實驗可以得到的技術方案,皆應在由權利要求書所確定的保護范圍內(nèi)。