的所有viewcell和層次viewcell的信息。viewcell 的信息被作為一棵層次樹來組織,包含viewcell的包圍盒邊界。
[0062] 第二步,確定當(dāng)前視點(diǎn)的位置,找到當(dāng)前視點(diǎn)所在viewcell,該步驟可以通過在 層次樹的每個(gè)層次使用視點(diǎn)位置與切分平面比較其所處半空間即可。
[0063] 第三步:根據(jù)當(dāng)前視點(diǎn)所在viewcell(實(shí)質(zhì)是自根結(jié)點(diǎn)至葉結(jié)點(diǎn)的一系列結(jié)點(diǎn) 及其對(duì)應(yīng)的viewcell),加載所有viewcell所對(duì)應(yīng)的PVS和QPVS。
[0064] 第四步,將該葉結(jié)點(diǎn)對(duì)應(yīng)的即最精細(xì)的viewcell的PVS和QPVS中的物體分別放 入不同的隊(duì)列,即將PVS放入內(nèi)存隊(duì)列Q1,將QPVS放入內(nèi)存隊(duì)列Q2。先對(duì)Q1和Q2中的物 體分別進(jìn)行視域體裁剪(viewfrustumculling),如果物體在視域體(viewfrustum)之 外,則將該物體從Q1和Q2中分別刪除;針對(duì)Q1和Q2中剩余的物體,按照距離視點(diǎn)的遠(yuǎn)近 分別排序得到優(yōu)先級(jí)隊(duì)列Q1和Q2,這兩個(gè)優(yōu)先隊(duì)列都保證距離視點(diǎn)最近的物體放在最前 端。
[0065] 第五步,構(gòu)建好優(yōu)先隊(duì)列以后,按照先處理PVS信息后處理QPVS的順序?qū)@兩個(gè) 優(yōu)先級(jí)隊(duì)列進(jìn)行處理。先將Q1中的物體依次取出,設(shè)取出的物體為T,T是明確可見的,則直 接取得T的網(wǎng)格或者面片信息,發(fā)送給顯卡進(jìn)行繪制;然后處理Q2中所包含的物體,按照優(yōu) 先級(jí)順序依次取出的物體為T,則發(fā)送遮擋查詢命令(一般通過硬件遮擋查詢方式實(shí)現(xiàn)), 在Q1隊(duì)列繪制結(jié)果的基礎(chǔ)上對(duì)該物體T的包圍盒進(jìn)行遮擋查詢,查詢比較的對(duì)象就是繪制 Q1中物體所形成的遮擋緩沖。為了進(jìn)一步加快速度,可以在Q1隊(duì)列中物體進(jìn)行繪制的同時(shí) 可進(jìn)行Q2中物體的遮擋查詢,而不需要每次發(fā)送完查詢命令后等待查詢結(jié)果,也就是無需 等待而繼續(xù)處理后面的物體。而在每次處理一個(gè)新物體之前,先查看是否有查詢結(jié)果返回, 如果Q2中的某個(gè)物體的返回結(jié)果為該物體可見,則將該物體的從Q2對(duì)應(yīng)的QPVS中刪除, 加入到Q1所對(duì)應(yīng)的PVS中。自底向上更新所有層次viewcell中的PVS和QPVS信息。同 時(shí),將上述信息更新至外存儲(chǔ)對(duì)應(yīng)viewcell的PVS和QPVS信息。
[0066] 第六步,繼續(xù)漫游,視點(diǎn)更新,轉(zhuǎn)至第二步,循環(huán)第二至第六步的過程。通過對(duì)整個(gè) 三維場(chǎng)景進(jìn)行連續(xù)不斷地漫游(上述步驟中的第二步至第五步皆發(fā)生在場(chǎng)景漫游階段), 同時(shí)在viewcell中反復(fù)進(jìn)行QPVS查詢,相應(yīng)地更新PVS,便可以得到一個(gè)非常接近于 EVS(exactvisibleset)的PVS。當(dāng)PVS在相當(dāng)長(zhǎng)一段時(shí)間之內(nèi)不再進(jìn)行更新,說明PVS 已經(jīng)非常接近EVS,當(dāng)前算法和漫游過程結(jié)束。
【主權(quán)項(xiàng)】
1. 一種大規(guī)模三維場(chǎng)景的新型可見性生成方法,其步驟為: 1) 構(gòu)建待處理三維場(chǎng)景的層次包圍盒結(jié)構(gòu),并將該層次包圍盒結(jié)構(gòu)信息存入存儲(chǔ)結(jié)構(gòu) 中; 2) 將包含該三維場(chǎng)景的三維空間逐層剖分成若干互不重疊的單元viewcell,得到該 三維空間的層次樹; 3) 在該三維空間中生成采樣點(diǎn),并為每一采樣點(diǎn)生成采樣射線;然后根據(jù)采樣射線計(jì) 算出每個(gè)單元viewcell對(duì)應(yīng)的潛在可見集合PVS和候選可見集合QPVS; 4) 加載每個(gè)單元viewcell信息,開始進(jìn)行三維場(chǎng)景的漫游; 5) 在三維場(chǎng)景漫游過程中,首先確定當(dāng)前視點(diǎn)的位置,根據(jù)層次樹找到當(dāng)前視點(diǎn)所在 單元viewcell;然后將該單元viewcell的潛在可見集合PVS和候選潛在可見集合QPVS 中的物體先進(jìn)行視域體裁剪,將PVS中通過視域體裁剪的物體按照距離視點(diǎn)的遠(yuǎn)近進(jìn)行排 列得到一個(gè)優(yōu)先隊(duì)列,將QPVS中通過視域體裁剪的物體按照距離視點(diǎn)的遠(yuǎn)近得到另一個(gè) 優(yōu)先隊(duì)列; 6) 構(gòu)建好兩個(gè)優(yōu)先隊(duì)列以后,先對(duì)與PVS對(duì)應(yīng)的隊(duì)列中的物體按順序繪制,然后對(duì)另 一個(gè)隊(duì)列中的物體的進(jìn)行可見性判斷,得到其可見性信息并相應(yīng)地更新兩個(gè)隊(duì)列; 7) 自底向上更新三維空間層次樹中所有層次viewcell的PVS和QPVS信息,直到漫游 過程結(jié)束。2. 如權(quán)利要求1所述的方法,其特征在于,將該三維場(chǎng)景的三維空間逐層剖分成若干 個(gè)互不重疊的小單元viewcell的方法為:首先采用k-means聚類方法對(duì)該三維場(chǎng)景內(nèi)的 頂點(diǎn)進(jìn)行聚類,聚類的結(jié)果對(duì)應(yīng)得到該三維空間剖分成的多個(gè)子空間;然后對(duì)每一子空間 采用k-means聚類方法再次進(jìn)行聚類并得到相應(yīng)的子空間剖分,重復(fù)上述聚類及剖分過程 直到到達(dá)設(shè)定條件,每一個(gè)剖分得到的子空間對(duì)應(yīng)一個(gè)單元viewcell,根據(jù)多層次單元 viewcell的邏輯關(guān)系得到該三維空間的層次樹。3. 如權(quán)利要求2所述的方法,其特征在于,得到該包含三維場(chǎng)景的三維空間的多個(gè)子 空間的方法為: 31) 隨機(jī)選取該三維場(chǎng)景中的k個(gè)頂點(diǎn)作為k個(gè)類的初始中心點(diǎn); 32) 計(jì)算該三維場(chǎng)景中每個(gè)頂點(diǎn)到k個(gè)初始中心點(diǎn)的距離,將其聚類到距離最近的初 始中心點(diǎn)對(duì)應(yīng)類中; 33) 計(jì)算每一類中所有頂點(diǎn)的均值,作為這一類的新的中心點(diǎn); 34) 得到每一類的新中心點(diǎn)后,重復(fù)步驟32)、33),直到滿足設(shè)定條件,最終每一聚類 結(jié)果對(duì)應(yīng)該三維空間中的一個(gè)子空間,最終將三維模型聚類并剖分三維空間為多個(gè)子空 間。4. 如權(quán)利要求3所述的方法,其特征在于,所述頂點(diǎn)為三維場(chǎng)景中的一個(gè)物體、或者一 塊網(wǎng)格、或者單個(gè)三角面片;所述頂點(diǎn)信息中還包括頂點(diǎn)的顏色信息、紋理信息或者材質(zhì)信 息。5. 如權(quán)利要求4所述的方法,其特征在于,每一頂點(diǎn)的所有信息構(gòu)成一個(gè)復(fù)合向量,兩 個(gè)頂點(diǎn)之間的矢量距離為三維空間的歐式距離或色彩空間中的距離或者紋理信息的距離 或者材質(zhì)信息的距離或者上述距離的按照不同權(quán)重綜合。6. 如權(quán)利要求1或2或3所述的方法,其特征在于,計(jì)算所述潛在可見集合PVS的方法 為:對(duì)于每一條采樣射線,將該射線逐一地在三維場(chǎng)景層次包圍盒結(jié)構(gòu)中搜索,找到在該三 維場(chǎng)景中距離該射線起始點(diǎn)最近的相交物體;然后將該射線在三維空間層次樹中搜索,找 到所有與該射線相交的所有單元viewcell,從而將所有與該射線相交的物體加入到與該 射線相交的所有單位viewcell的潛在可見集合PVS中。7. 如權(quán)利要求6所述的方法,其特征在于,找到在該三維場(chǎng)景中距離該射線起始點(diǎn)最 近的相交物體的方法為:將射線自頂向下、逐層的與層次包圍盒結(jié)構(gòu)的包圍盒求交,如果與 某一層的結(jié)點(diǎn)包圍盒是相交的,則接著向下,與該層結(jié)點(diǎn)的子結(jié)點(diǎn)的包圍盒求交,直到葉節(jié) 點(diǎn)為止;如果射線與某葉結(jié)點(diǎn)相交,則將射線與該葉節(jié)點(diǎn)所包含物體的每個(gè)三角面片求交, 只要該射線與其中任何一個(gè)三角面片相交,則確定該射線與該物體相交并更新當(dāng)前的最短 距離;遍歷完整個(gè)層次包圍盒結(jié)構(gòu)后,得到與該射線相交最近的物體以及最近的距離。8. 如權(quán)利要求1所述的方法,其特征在于,對(duì)PVS隊(duì)列、QPVS隊(duì)列中的物體進(jìn)行可見性 判斷和繪制的方法為:設(shè)取出的物體為T,如果物體T是PVS隊(duì)列中的物體,則直接取得物 體T的網(wǎng)格或面片信息,發(fā)送給顯卡進(jìn)行繪制;如果物體T是QPVS隊(duì)列中的物體,則發(fā)送查 詢命令,對(duì)物體T的包圍盒進(jìn)行遮擋查詢,如果查詢結(jié)果為該物體T可見,則將該物體T的 從QPVS隊(duì)列中刪除并加入到PVS隊(duì)列中。9. 如權(quán)利要求1所述的方法,其特征在于,計(jì)算所述候選潛在可見集合QPVS的方法為: 首先根據(jù)單元viewcell與該單元viewcell的潛在可見集合PVS中每一物體T周圍采樣 射線的數(shù)目確定一設(shè)定距離d,然后查找將該三維場(chǎng)景中與該物體T的距離小于該設(shè)定距 離d的物體,如果該物體不在該單元viewcell的潛在可見集合PVS中,則將該物體加入單 元viewcell的候選潛在可見集合QPVS〇
【專利摘要】本發(fā)明公開了一種大規(guī)模三維場(chǎng)景的新型可見性生成方法。本方法為:1)構(gòu)建待處理三維場(chǎng)景的層次包圍盒結(jié)構(gòu);2)將包含該三維場(chǎng)景的三維空間按照空間特征剖分成若干互不重疊的單元view?cell,得到一層次樹;3)對(duì)該三維空間中采樣射線計(jì)算出每個(gè)單元對(duì)應(yīng)的PVS和QPVS;4)并開始三維場(chǎng)景的漫游,根據(jù)當(dāng)前視點(diǎn)的位置,找到層次樹中所在單元;將該單元的PVS和QPVS分別處理,判斷出利用QPVS所構(gòu)建出隊(duì)列中的物體的可見性,并相應(yīng)地更新PVS信息,自底向上更新三維空間層次樹中所有層次view?cell的PVS和QPVS信息,直至漫游過程結(jié)束。
【IPC分類】G06K9/62, G06T17/05
【公開號(hào)】CN105389850
【申請(qǐng)?zhí)枴緾N201510740102
【發(fā)明人】李勝, 汪國平
【申請(qǐng)人】北京大學(xué)(天津?yàn)I海)新一代信息技術(shù)研究院
【公開日】2016年3月9日
【申請(qǐng)日】2015年11月3日