一種混合cpu和gpu的大規(guī)模物體群的碰撞剔除方法
【專利摘要】本發(fā)明公開了一種混合CPU和GPU的大規(guī)模物體群的碰撞剔除方法,其步驟:1)把物體群分成小形狀物體群和大形狀物體群兩類;2)將小形狀物體群存入GPU的Global內(nèi)存中,在GPU中建立改進(jìn)的LBVH樹,再用并行SaP算法進(jìn)行葉子節(jié)點(diǎn)內(nèi)和葉子節(jié)點(diǎn)間的碰撞剔除計(jì)算;3)在CPU上用并行SaP算法完成基于檢測粒度的共享工作隊(duì)列的多線程的大形狀物體群之間的碰撞剔除計(jì)算,再協(xié)同GPU同步計(jì)算的LBVH小形狀物體群的碰撞剔除結(jié)果,用兩次并行SaP算法進(jìn)行大形狀物體群和小形狀物體群之間的碰撞剔除計(jì)算;4)建立協(xié)同CPU和GPU同步碰撞檢測的計(jì)算模型;5)分析比較不同數(shù)量級物體群的碰撞剔除計(jì)算時(shí)間。本發(fā)明在百萬級以下的物體群規(guī)模情況下,比現(xiàn)有傳統(tǒng)并行算法快10-30倍。
【專利說明】一種混合CPU和GPU的大規(guī)模物體群的碰撞剔除方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及三維模型碰撞檢測【技術(shù)領(lǐng)域】,尤其是指一種混合CPU和GPU的大規(guī)模 物體群的碰撞剔除方法。
【背景技術(shù)】
[0002] 隨著三維電影、動畫和游戲等的快速發(fā)展,面向復(fù)雜三維場景的快速碰撞檢 測問題已成為人們探索的研究熱點(diǎn)之一。碰撞檢測問題是三維圖形中的經(jīng)典問題, 包括基于包圍盒的檢測,基于時(shí)間或空間連貫性的檢測等。隨著多核CPUs的出現(xiàn)和 GPGPU (General-Purpose Computation on Graphics Processing Units)的興起,碰撞檢測 在多核處理器上的研究也有一些成果,但是大多數(shù)研究是基于GPU計(jì)算的。CPU和GPU具有 不同的運(yùn)算特性,如何充分發(fā)揮各自的運(yùn)算能力,協(xié)作CPU和GPU的并行處理任務(wù)是目前碰 撞檢測問題新的研究領(lǐng)域。所以,需要建立一些新的方法,用于大規(guī)模物體群的碰撞檢測和 剔除。
【發(fā)明內(nèi)容】
[0003] 本發(fā)明的目的在于克服現(xiàn)有技術(shù)的不足,提供一種混合CPU和GPU的大規(guī)模物體 群的碰撞剔除方法,運(yùn)用了多核技術(shù)和同步并行計(jì)算,尤其適用于由少量的大形狀和大量 的小形狀組成的物體群,對于復(fù)雜三維場景的快速碰撞剔除計(jì)算具有重要意義。
[0004] 為實(shí)現(xiàn)上述目的,本發(fā)明所提供的技術(shù)方案為:一種混合CPU和GPU的大規(guī)模物體 群的碰撞剔除方法,包括以下步驟:
[0005] 1)大規(guī)模物體群分類預(yù)處理,由CPU完成所有輸入物體的聚類分析,把物體群分 成小形狀物體群和大形狀物體群兩類;
[0006] 2)將小形狀物體群存入GPU的Global內(nèi)存中,在GPU中建立改進(jìn)的LBVH樹,再用 并行SaP算法進(jìn)行葉子節(jié)點(diǎn)內(nèi)和葉子節(jié)點(diǎn)間的碰撞剔除計(jì)算;
[0007] 3)在CPU上用并行SaP算法完成基于檢測粒度的共享工作隊(duì)列的多線程的大形狀 物體群之間的碰撞剔除計(jì)算,再協(xié)同GPU同步計(jì)算的LBVH小形狀物體群的碰撞剔除結(jié)果, 用兩次并行SaP算法進(jìn)行大形狀物體群和小形狀物體群之間的碰撞剔除計(jì)算;
[0008] 4)建立協(xié)同CPU和GPU同步碰撞檢測的計(jì)算模型,實(shí)現(xiàn)混合多核的同步并行計(jì) 算;
[0009] 5)分析比較不同數(shù)量級物體群的碰撞剔除計(jì)算時(shí)間。
[0010] 在所述步驟1)中,提出用物體AABB包圍盒的對角線長度作為統(tǒng)計(jì)量,并向有序列 表的兩端聚集,最后確定大形狀物體群和小形狀物體群的分割點(diǎn)。
[0011] 所述步驟2)包括以下過程:
[0012] 2. 1)在GPU上進(jìn)行小形狀物體群的碰撞剔除計(jì)算,包括:提出改進(jìn)的LBVH算法, 對物體群進(jìn)行空間劃分,再用并行SaP算法計(jì)算LBVH葉子上的各劃分空間的物體位置關(guān) 系;
[0013] 2. 2)在并行SaP計(jì)算中,要確定SaP的掃描方向,提出用與最大方差軸夾角最小的 空間主軸作為并行SaP的掃描方向,以減少任何形狀包圍體投影后的重構(gòu)工作量;其中,最 大方差軸方向w為:
【權(quán)利要求】
1. 一種混合CPU和GPU的大規(guī)模物體群的碰撞剔除方法,其特征在于,包括以下步驟: 1) 大規(guī)模物體群分類預(yù)處理,由CPU完成所有輸入物體的聚類分析,把物體群分成小 形狀物體群和大形狀物體群兩類; 2) 將小形狀物體群存入GPU的Global內(nèi)存中,在GPU中建立改進(jìn)的LBVH樹,再用并行 SaP算法進(jìn)行葉子節(jié)點(diǎn)內(nèi)和葉子節(jié)點(diǎn)間的碰撞剔除計(jì)算; 3) 在CPU上用并行SaP算法完成基于檢測粒度的共享工作隊(duì)列的多線程的大形狀物體 群之間的碰撞剔除計(jì)算,再協(xié)同GPU同步計(jì)算的LBVH小形狀物體群的碰撞剔除結(jié)果,用兩 次并行SaP算法進(jìn)行大形狀物體群和小形狀物體群之間的碰撞剔除計(jì)算; 4) 建立協(xié)同CPU和GPU同步碰撞檢測的計(jì)算模型,實(shí)現(xiàn)混合多核的同步并行計(jì)算; 5) 分析比較不同數(shù)量級物體群的碰撞剔除計(jì)算時(shí)間。
2. 根據(jù)權(quán)利要求1所述的一種混合CPU和GPU的大規(guī)模物體群的碰撞剔除方法,其特 征在于,在所述步驟1)中,提出用物體AABB包圍盒的對角線長度作為統(tǒng)計(jì)量,并向有序列 表的兩端聚集,最后確定大形狀物體群和小形狀物體群的分割點(diǎn)。
3. 根據(jù)權(quán)利要求1所述的一種混合CPU和GPU的大規(guī)模物體群的碰撞剔除方法,其特 征在于,所述步驟2)包括以下過程: 2. 1)在GPU上進(jìn)行小形狀物體群的碰撞剔除計(jì)算,包括:提出改進(jìn)的LBVH算法,對物 體群進(jìn)行空間劃分,再用并行SaP算法計(jì)算LBVH葉子上的各劃分空間的物體位置關(guān)系; 2. 2)在并行SaP計(jì)算中,要確定SaP的掃描方向,提出用與最大方差軸夾角最小的空間 主軸作為并行SaP的掃描方向,以減少任何形狀包圍體投影后的重構(gòu)工作量;其中,最大方 差軸方向w為:
式中,X為輸入物體群的坐標(biāo)數(shù)據(jù)集,argmax(w)為w方向各分量的最大值;因此,掃描 方向s為:
2. 3)在構(gòu)造LBVH樹時(shí),即進(jìn)行物體群的空間劃分時(shí),為了提高并行SaP的計(jì)算密度,葉 子內(nèi)包含的物體數(shù)量應(yīng)該足夠多,并且葉子內(nèi)物體的分布方向應(yīng)與SaP掃描方向一致,以 降低并行SaP的冗余檢測計(jì)算,因此,提出對原來LBVH的Morton編碼方式做以下改進(jìn):(i) 增加非掃描方向坐標(biāo)的表示位,增加精度;(ii)減少掃描方向的坐標(biāo)表示位;(iii)將掃描 方向的坐標(biāo)表7]^位移向低位; 2. 4)改進(jìn)后的Morton編碼仍保持最小點(diǎn)或最大點(diǎn)不變性,所以,在構(gòu)造LBVH樹時(shí)可以 使用物體包圍盒的最小點(diǎn),從而減少包圍盒其它頂點(diǎn)定位的空間搜索計(jì)算; 2. 5)葉子內(nèi)物體的碰撞剔除檢測就是完成一個(gè)劃分子空間的碰撞剔除檢測,采用并行SaP算法; 2. 6)葉子間物體的碰撞剔除檢測,在構(gòu)造LBVH樹時(shí),空間劃分不是嚴(yán)格地分離物體, 一些物體可能跨越兩個(gè)子空間,所以要判斷跨越葉子的物體是否與葉子內(nèi)的物體有碰撞, 在此提出用向后、向前的二次并行SaP掃描方法,執(zhí)行下面步驟2. 6. 1)至步驟2. 6. 3): 2.6. 1)查找跨越葉子的物體,稱作跨越物體,即檢查每個(gè)物體最大點(diǎn)的編碼是否超出 其所在區(qū)間,查找的復(fù)雜度是O(logN),N為物體個(gè)數(shù); 2. 6. 2)判斷跨越物體與葉子的碰撞情況; 2.6.3)兩次使用并行SaP算法求跨越物體與碰撞葉子內(nèi)的物體的碰撞檢測:第一次是 按照投影最小值排序后進(jìn)行向后掃描,求跨越物體之后的物體碰撞檢測;第二次是按照投 影最大值排序后進(jìn)行向前掃描,求跨越物體之前的物體碰撞檢測;最后還需刪除重復(fù)的碰 撞對。
4. 根據(jù)權(quán)利要求1所述的一種混合CPU和GPU的大規(guī)模物體群的碰撞剔除方法,其特 征在于:在步驟3)中,由于CPU的線程數(shù)相對于GPU的線程數(shù)是很少的,但是線程的運(yùn)算相 對GPU要獨(dú)立,所以,大形狀物體群之間的碰撞檢測算法采用共享工作隊(duì)列的任務(wù)分組的 檢測策略,即每個(gè)線程從共享工作隊(duì)列中獲取一組任務(wù)進(jìn)行碰撞檢測,這里,一組任務(wù)的大 小稱作檢測粒度,假設(shè)共享工作隊(duì)列的物體個(gè)數(shù)為n,即隊(duì)列長度,檢測粒度為w,線程數(shù)為 t,第i個(gè)線程的共享工作隊(duì)列的任務(wù)索引為Pi,大形狀物體群碰撞檢測算法包括以下步驟 3. 1.l)-3. 1. 5): 3. 1. 1)初始化各線程的任務(wù)索引Pi= 0(i= 1,2,…,t); 3. 1. 2)啟動SaP工作線程,每個(gè)線程并行執(zhí)行以下步驟; 3. 1. 3)如果i>n,則當(dāng)前線程結(jié)束; 3. 1. 4)對m=min(Pi+w,n) _Pi個(gè)隊(duì)列元素進(jìn)行SaP碰撞檢測; 3. 1. 5)更新任務(wù)索引值Pi=minh+w,n),執(zhí)行上面步驟3. 1. 3); 大形狀物體群和小形狀物體群之間的碰撞剔除計(jì)算也是用基于檢測粒度的共享工作 隊(duì)列的多線程方法,主要有以下三個(gè)步驟: 3. 2. 1)CPU獲取GPU中計(jì)算得到的較小物體的LBVH層次結(jié)構(gòu); 3. 2. 2)對每一個(gè)大形狀物體,在LBVH層次中檢測與之相交的葉子節(jié)點(diǎn); 3. 2. 3)兩次使用并行SaP算法求大形狀物體與碰撞葉子內(nèi)的物體的碰撞對。
5. 根據(jù)權(quán)利要求1所述的一種混合CPU和GPU的大規(guī)模物體群的碰撞剔除方法,其特 征在于,所述步驟4)包括以下過程: 4. 1)當(dāng)CPU上完成大規(guī)模物體群的聚類分析時(shí),同步進(jìn)行大形狀物體群的CPU碰撞檢 測,以及小形狀物體群的GPU上的LBVH構(gòu)造、葉子內(nèi)物體的投影和排序計(jì)算; 4.2) 當(dāng)上面步驟4. 1)中的CPU檢測和GPU計(jì)算完成時(shí),同步進(jìn)行大形狀和小形狀物體 群的CPU上向后并行SaP檢測,以及小形狀物體群的GPU上葉子內(nèi)SaP檢測和葉子間向后 并行SaP檢測和向前SaP投影和排序計(jì)算; 4.3) 當(dāng)上面步驟4. 2)中的CPU檢測和GPU計(jì)算完成時(shí),同步進(jìn)行大形狀和小形狀物體 群的CPU上向前并行SaP檢測,以及小形狀物體群的GPU上葉子間向前SaP檢測,最后,CPU 和GPU分別檢測重復(fù)的碰撞對,完成全部碰撞剔除檢測。
【文檔編號】G06T1/20GK104408685SQ201410713568
【公開日】2015年3月11日 申請日期:2014年11月28日 優(yōu)先權(quán)日:2014年11月28日
【發(fā)明者】楊喬杰, 陳澤琳 申請人:華南理工大學(xué)