本發(fā)明涉及模型合并領(lǐng)域,具體涉及一種三維場景中模型合并的方法及裝置。
背景技術(shù):
計算機在制作包括3D模型文件的時候,記錄的是模型頂點、邊或者面的信息,這些模型并沒有成為實際的像素,在實際3D模型的顯示過程中,材質(zhì)信息,光影信息等都是被獨立計算,然后顯示在屏幕上的。3D渲染就是給場景著色,將場景中的燈光及對象根據(jù)材質(zhì)處理成不同的圖像形式,能把模型表現(xiàn)得更加具體。在3D場景渲染中,主要渲染的部件是模型,而模型的渲染批次在手機等移動GPU上對設(shè)備性能有很大影響,批次越高渲染效率越低。
3D場景渲染所要解決的技術(shù)問題主要有幾個:1)模型加載時對手機等移動GPU運行加載性能要求較高;2)不同3D場景之間,雖然模型差異較大,但有部分公用資源;3)3D模型通過gim和mesh文件加載,模型里面可以有子模型;4)待渲染的3D模型數(shù)量多,而單個模型的尺寸小;5)3D場景里面不同的模型越多,渲染效率越低,6)在3D模型合并操作時,滿足材質(zhì)相同等條件時,才可將模型合并。
目前為了優(yōu)化渲染效率,普遍采用的方式是將大部分小模型通過人工挑選的方式合并到一個大模型中,這樣就減少了不同模型的數(shù)量,使得渲染效率提高。但這種方式有需要人工干預合并方式,管理成本太高;并且可能造成單個場景內(nèi)模型過多,合并后的頂點數(shù)量超出了設(shè)備所能支持的頂點數(shù)量的限制,從而導致無法在場景中創(chuàng)建模型;或者合并后的模型過大,使得加載過慢。
因此,需要一種新的模型合并的方法及裝置。
在所述背景技術(shù)部分公開的上述信息僅用于加強對本發(fā)明的背景的理解,因此它可以包括不構(gòu)成對本領(lǐng)域普通技術(shù)人員已知的現(xiàn)有技術(shù)的信息。
技術(shù)實現(xiàn)要素:
本發(fā)明提供一種三維場景中模型合并的方法以及系統(tǒng),能夠減少人工成本,提高用戶體驗。
本發(fā)明的其他特性和優(yōu)點將通過下面的詳細描述變得顯然,或部分地通過本發(fā)明的實踐而習得。
根據(jù)本發(fā)明的一方面,提供一種三維場景中模型合并的方法,包括:根據(jù)模型材質(zhì)將三維場景中的第一模型分配到至少一個集合中;根據(jù)K-means算法將每個集合中的第一模型分成至少一個聚類;以及將每個聚類中的第一模型合并為第二模型。
根據(jù)本發(fā)明的一實施方式,第一模型包括:多個頂點、多個面及模型材質(zhì)。
根據(jù)本發(fā)明的一實施方式,根據(jù)K-means算法將每個集合中的第一模型分成至少一個聚類包括:根據(jù)K-means算法將每個集合中的第一模型分成K個初始聚類,其中K為正整數(shù);計算每個初始聚類中的均方差、每個初始聚類中的第一模型的頂點的總和及每個初始聚類中的第一模型的面的總和;以及分別將均方差閾值與每個初始聚類中的均方差、頂點閾值與頂點的總和及面閾值與面的總和進行比較,以將每個集合中的第一模型分成至少一個聚類。
根據(jù)本發(fā)明的一實施方式,K=1。
根據(jù)本發(fā)明的一實施方式,步驟a)包括:根據(jù)K-means算法,基于每個集合中的第一模型之間的歐幾里得距離,分成K個初始聚類。
根據(jù)本發(fā)明的一實施方式,步驟c)包括:當每個初始聚類中的均方差大于均方差閾值時,使K=K+1,并重新執(zhí)行步驟a)至步驟c);當每個初始聚類中的均方差小于或等于均方差閾值時,比較頂點的總和與頂點閾值。
根據(jù)本發(fā)明的一實施方式,步驟c)還包括:當頂點的總和大于頂點閾值時,使K=K+1,并重新執(zhí)行步驟a)至步驟c);當所述頂點的總和小于或等于頂點閾值時,比較面的總和與面閾值。
根據(jù)本發(fā)明的一實施方式,步驟c)還包括:當面的總和大于面閾值時,使K=K+1,并重新執(zhí)行步驟a)至步驟c)。
根據(jù)本發(fā)明的一實施方式,還包括:根據(jù)第二模型,更改三維場景中的模型引用關(guān)系。
根據(jù)本發(fā)明的一實施方式,材質(zhì)包括第一模型中使用的繪制方法和貼圖的分類。
根據(jù)本發(fā)明的另一個方面,提供一種三維場景中模型合并的裝置:包括:材質(zhì)分類模塊,用于根據(jù)模型材質(zhì)將三維場景中的第一模型分配到至少一個集合中;模型分類模塊,用于根據(jù)K-means算法將每個集合中的第一模型分成至少一個聚類;模型合并模塊,用于將每個聚類中的第一模型合并為第二模型。
根據(jù)本發(fā)明的一實施方式,第一模型包括:多個頂點、多個面及所述模型材質(zhì)。
根據(jù)本發(fā)明的一實施方式,模型分類模塊還包括:均方差閾值判斷子模塊,用于判斷聚類中的均方差數(shù)值是否超過均方差閾值;頂點閾值判斷子模塊,用于判斷聚類中模型頂點總數(shù)是否超過頂點閾值;面閾值判斷子模塊,用于判斷聚類中模型面總數(shù)是否超過面閾值;K-means算法子模塊,用于根據(jù)K-means算法將集合中的模型分成k個初始聚類。
根據(jù)本發(fā)明的一實施方式,還包括:引用模塊,用于根據(jù)第二模型,更改三維場景中的模型引用關(guān)系。
根據(jù)本發(fā)明三維場景中模型合并的方法,可以無需人工干預地自動化合并模型,減少了人工管理成本。
另外,根據(jù)一些實施例,模型大小可由預先設(shè)定的頂點和面數(shù)上限控制,不會出現(xiàn)模型過大導致的加載問題。
應(yīng)當理解的是,以上的一般描述和后文的細節(jié)描述僅是示例性的,并不能限制本發(fā)明。
附圖說明
通過參照附圖詳細描述其示例實施例,本發(fā)明的上述和其它目標、特征及優(yōu)點將變得更加顯而易見。
圖1是根據(jù)一示例性實施方式示出的一種三維場景中模型合并的方法流程圖。
圖2是根據(jù)一示例性實施方式示出的另一種三維場景中模型合并的方法流程圖。
圖3是根據(jù)一示例性實施方式示出的另一種三維場景中模型合并的方法流程圖。
圖4是根據(jù)一示例性實施方式示出的再一種三維場景中模型合并的方法流程圖。
圖5是根據(jù)一示例性實施方式示出的一種三維場景中模型合并的裝置框圖。
圖6是根據(jù)一示例性實施方式示出的另一種三維場景中模型合并的裝置框圖。
具體實施方式
現(xiàn)在將參考附圖更全面地描述示例實施方式。然而,示例實施方式能夠以多種形式實施,且不應(yīng)被理解為限于在此闡述的范例;相反,提供這些實施方式使得本發(fā)明的描述將更加全面和完整,并將示例實施方式的構(gòu)思全面地傳達給本領(lǐng)域的技術(shù)人員。附圖僅為本發(fā)明的示意性圖解,并非一定是按比例繪制。圖中相同的附圖標記表示相同或類似的部分,因而將省略對它們的重復描述。
此外,所描述的特征、結(jié)構(gòu)或特性可以以任何合適的方式結(jié)合在一個或更多實施方式中。在下面的描述中,提供許多具體細節(jié)從而給出對本發(fā)明的實施方式的充分理解。然而,本領(lǐng)域技術(shù)人員將意識到,可以實踐本發(fā)明的技術(shù)方案而省略所述特定細節(jié)中的一個或更多,或者可以采用其它的方法、組元、步驟等。在其它情況下,不詳細示出或描述公知結(jié)構(gòu)、方法、實現(xiàn)或者操作以避免喧賓奪主而使得本發(fā)明的各方面變得模糊。
圖1是根據(jù)一示例性實施方式示出的一種三維場景中模型合并的方法的流程圖。如圖1所示,該合并方法10包括:
在步驟S102中,根據(jù)模型材質(zhì)將三維場景中的第一模型分配到至少一個集合中。
在三維場景渲染中,主要渲染的部件是第一模型,例如場景模型。在一個場景渲染中,包含很多個第一模型,這些第一模型數(shù)量多而單個第一模型的尺寸又很小,本實施例將數(shù)量眾多的第一模型,根據(jù)材質(zhì)的不同,分配到不同的集合中。在本實施例中,每個第一模型均包括:多個頂點、多個面及一個模型材質(zhì)。模型材質(zhì)包括模型中使用的繪制方法和貼圖的分類。如果兩個不同模型使用了同一種繪制方法和相同的一張或多張貼圖,就可以認為是使用了相同的材質(zhì)。在本實施例中,繪制方法是有限的分類集合。例如,三維場景中第一模型共有3種材質(zhì),在計算時,該三維場景中的第一模型將會被分成3個集合,分別為第一集合、第二集合以及第三集合。
在步驟S104中,根據(jù)K-means算法將每個集合中的第一模型分成至少一個聚類。
K-means算法又稱為聚類算法,算法目的是把相似的東西分到同一個聚類中,是很典型的基于距離聚類的算法,采用距離作為相似性的評價指標,即認為兩個對象的距離越近,其相似度就越大。聚類算法認為簇是由距離靠近的對象組成的,因此把得到緊湊且獨立的簇作為最終目標。在K-means算法中,因為距離所分成的不同小簇稱為聚類。
在本實施例中,對上文所述的不同的集合,分別利用K-means算法進行分類,將每一個集合再分成若干個聚類。例如,三維場景中第一模型共有3種材質(zhì),在計算時,該三維場景中的第一模型將會被分成3個集合,分別為第一集合、第二集合以及第三集合。在本步驟中,將會對第一集合、第二集合以及第三集合分別利用K-means算法進行計算,逐一將上述三個集合再分成若干個聚類。
在步驟S106中,將每個聚類中的第一模型合并為第二模型。
將上文所述的聚類中的模型進行合并,每一個聚類中所有的第一模型均合并在一起,合并生成一個第二類模型。在模型的合并中,合并表示將相同材質(zhì)但屬性不同的相同或不同第一模型,重新組織模型的表示方式。模型屬性包括,例如:模型的坐標、朝向、縮放比例。多個第一模型合并之后為第二模型。在對三維場景模型的實際的合并操作中,第一模型的合并是將多個第一模型的邊進行合并,頂點也進行合并。
利用本實施例的方法,通過K-means算法進行第一模型的分類,通過分類后的聚類,后續(xù)合并算法而可以無需人工干預地自動化合并模型,減少了人工管理成本。
應(yīng)清楚地理解,本發(fā)明描述了如何形成和使用特定示例,但本發(fā)明的原理不限于這些示例的任何細節(jié)。相反,基于本發(fā)明公開的內(nèi)容的教導,這些原理能夠應(yīng)用于許多其它實施方式。
圖2是根據(jù)一示例性實施方式示出的另一種三維場景中模型合并的方法的流程圖。該合并方法20是對圖1所示的合并方法10中步驟S104的進一步說明,即步驟S104進一步包括:
在步驟S202中,根據(jù)K-means算法將每個集合中的第一模型分成K個初始聚類。
根據(jù)K-means算法,基于每個集合中的第一模型之間的歐幾里得距離,將集合中的第一模型分成K個初始聚類。歐幾里得距離,也稱為歐幾里得度量(euclidean metric),是一個通常采用的距離定義,是指在m維空間中兩個點之間的真實距離,或者向量的自然長度(即該點到原點的距離)。在二維和三維空間中的歐氏距離就是兩點之間的實際距離。
在步驟S204中,計算每個初始聚類中的均方差、每個初始聚類中的第一模型的頂點的總和及每個初始聚類中的第一模型的面的總和。
計算每個聚類中的均方差(MSE,Mean Squared Error),MSE為各測量值的誤差平方和SSE(Sum of Squared Error)的平均值的平方根,即誤差平方和的算術(shù)平方根,MSE=sqrt(SSE/n)。計算每個初始聚類中第一模型的頂點的總和。頂點總和指的是合并后單個模型的頂點總數(shù),即一個聚類中所有第一模型的頂點個數(shù)的總和。計算每個初始聚類中第一模型的面的總和。面總和指的是合并后單個模型的面總數(shù),即一個聚類中所有第一模型的面數(shù)的總和。
在步驟S206中,分別將均方差閾值與每個初始聚類中的均方差、頂點閾值與頂點的總和及面閾值與面的總和進行比較,以將每個集合中的第一模型分成所述至少一個聚類。
將均方差閾值與每個初始聚類中的均方差、頂點閾值與頂點的總和及面閾值與面的總和進行比較,以將每個集合中的第一模型分成不同的聚類。
利用本實施例的方法,第一模型合并之后形成的第二模型的大小可由預先設(shè)定的頂點和面數(shù)上限控制,不會出現(xiàn)模型過大導致的加載問題。而且,根據(jù)本實施例的方法,使用了均方差閾值和K-means方法來控制合并的區(qū)域,使得合并的區(qū)域都是足夠靠近的,這樣就可以實現(xiàn)分區(qū)域異步加載,提高用戶體驗。
圖3是根據(jù)一示例性實施方式示出的另一種三維場景中模型合并的方法流程圖。該合并方法30是對圖1所示的合并方法10中步驟S104的進一步說明,即步驟S104進一步包括:
在步驟S302中,根據(jù)K-means算法將每個集合中的第一模型分成K個初始聚類。
公式為在本實施例中,變量K為K-means算法中,集合被分成的聚類數(shù)量,k為正整數(shù)。K的初始值為1。即為,本實施例K-means算法進行的第一步,每個集合被分成了一個聚類。
根據(jù)后續(xù)算法的迭代演算,當k>1時,例如,k=3時,K-means算法的基本思想是:首先從集合的第一模型中選取3個第一模型作為初始聚類的中心,而對于該集合中所剩下其它第一模型,則根據(jù)它們與這些聚類中心(選取出的第一模型)的相似度(距離遠近),分別將它們分配到與其最相似的(聚類中心所代表的)聚類中。
在步驟S304中,計算每個初始聚類中的均方差。
計算每個聚類中的均方差MSE,它是用來度量聚類效果的一個指標。MSE計算的就是一個聚類中的每個第一模型到作為聚類中心的第一模型的平方差,它可以度量聚類的好壞。MSE越小,聚類效果越好。
在步驟S306中,每個初始聚類中的均方差是否大于均方差閾值。
判斷每個初始聚類中的均方差是否大于均方差閾值,如果該集合中任意一個聚類的均方差大于均方差閾值,則進行步驟S318;如果該集合的所有的聚類的均方差均不大于均方差閾值則進行步驟S308。均方差閾值為一個預先設(shè)定的數(shù)值,可根據(jù)不同的三維場景以及所運行不同軟硬件環(huán)境設(shè)定。
在步驟S308中,計算每個初始聚類中第一模型的頂點的總和。
計算每個初始聚類中第一模型的頂點的總和。頂點總和指的是合并后單個模型的頂點總數(shù),即一個聚類中所有第一模型的頂點個數(shù)的總和。
在步驟S310中,判斷每個初始聚類中頂點的總和是否大于頂點閾值
頂點閾值為一個聚類中所有:指的是合并后單個模型的頂點上限,即一個聚類中各個第一模型的頂點個數(shù)的總和的上限。如果該集合中任一個聚類中頂點總數(shù)大于頂點閾值,則進行步驟S318;如果該集合的所有聚類中頂點總數(shù)均不大于頂點閾值則進行步驟S312。頂點閾值為一個預先設(shè)定的數(shù)值,可根據(jù)不同的三維場景以及所運行不同軟硬件環(huán)境設(shè)定。
在步驟S312中,計算每個初始聚類中第一模型的面的總和。
計算每個初始聚類中第一模型的面的總和。面總和指的是合并后單個模型的面總數(shù),即一個聚類中所有第一模型的面數(shù)的總和。
在步驟S314中,判斷每個初始聚類中面的總和是否大于面閾值
面閾值指的是一個聚類中所有第一模型的面數(shù)的總和的上限。如果該集合的任一個聚類中面總數(shù)大于面閾值,則進行步驟S318;如果該集合的所有聚類中面總數(shù)均不大于面閾值則進行步驟S316。面閾值為一個預先設(shè)定的數(shù)值,可根據(jù)不同的三維場景以及所運行不同軟硬件環(huán)境設(shè)定。
在步驟S316中,用k-means算法計算每一個集合。
對一個集合的第一模型進行上述的計算,最終將集合中的模型分成k的聚類。對于同一個場景下,不同的集合分別利用上述方法進行計算,得到最終的聚類。如圖1實施例所述,三維場景模型中第一模型共有3種材質(zhì),在計算時,將會分成3個集合,分別為第一集合、第二集合以及第三集合。在本步驟中,將會對第一集合、第二集合以及第三集合分別利用K-means算法進行計算。例如第一集合按照k-means算法分成了3個聚類,第二集合按照k-means算法分成了2個聚類,第三集合按照k-means算法分成了4個聚類,則最終結(jié)果是,在該三維場景中,一共存在9個聚類。
在步驟S318中,k=k+1
當不滿足相應(yīng)的而判斷準則時,將k值增加后,返回步驟S302重新進行k-means算法的計算。
圖4是根據(jù)一示例性實施方式示出的再一種三維場景中模型合并的方法的流程圖。在合并方法10、20及30之后,合并方法40還可以進一步包括:在步驟S402中,根據(jù)第二模型,更改三維場景中的模型引用關(guān)系。
在K-means算法計算前三維場景中,模型的引用關(guān)系均為指向第一模型的引用關(guān)系。在模型合并結(jié)束后,更改模型的引用關(guān)系。例如,如果一個三維場景中,最初引用的是a,b,c,d,e這5個第一模型,在利用本發(fā)明所述方法進行第一模型分類并合并后,a、c合并為第二模型A,b、d合并為第二模型B,e沒有進行合并。這時將這個三維場景中,對第一模型a、c的引用關(guān)系改為引用第二模型A;將這個三維場景中,對第一模型b、d的引用關(guān)系改為引用第二模型B;第一模型e由于沒有進行合并,所以第一模型e的引用關(guān)系不變。在利用本發(fā)明方法計算之后的三維場景中,模型引用關(guān)系可為引用第一模型,也可為引用第二模型。
本領(lǐng)域技術(shù)人員可以理解實現(xiàn)上述實施方式的全部或部分步驟被實現(xiàn)為由CPU執(zhí)行的計算機程序。在該計算機程序被CPU執(zhí)行時,執(zhí)行本發(fā)明提供的上述方法所限定的上述功能。所述的程序可以存儲于一種計算機可讀存儲介質(zhì)中,該存儲介質(zhì)可以是只讀存儲器,磁盤或光盤等。
此外,需要注意的是,上述附圖僅是根據(jù)本發(fā)明示例性實施方式的方法所包括的處理的示意性說明,而不是限制目的。易于理解,上述附圖所示的處理并不表明或限制這些處理的時間順序。另外,也易于理解,這些處理可以是例如在多個模塊中同步或異步執(zhí)行的。
下述為本發(fā)明裝置實施例,可以用于執(zhí)行本發(fā)明方法實施例。對于本發(fā)明裝置實施例中未披露的細節(jié),請參照本發(fā)明方法實施例。
圖5是根據(jù)一示例性實施方式示出的一種三維場景中模型合并的裝置的框圖。三維場景中模型合并的裝置50包括:材質(zhì)分類模塊502、模型分類模塊504、模型合并模塊506以及引用模塊508。
其中,材質(zhì)分類模塊502,用于根據(jù)模型材質(zhì)將三維場景中的第一模型分配到至少一個集合中。
模型分類模塊504,用于根據(jù)K-means算法將每個集合中的所述第一模型分成至少一個聚類。
模型合并模塊506,用于將每個聚類中的所述第一模型合并為第二模型。
利用本實施例的方法,通過K-means算法進行第一模型的分類,通過分類后的聚類,后續(xù)合并算法而可以無需人工干預地自動化合并模型,減少了人工管理成本。
圖6是根據(jù)一示例性實施方式示出的另一種三維場景中模型合并的裝置的框圖。與圖5所示的裝置50的不同之處僅在于,圖6所示的裝置60的模型分類模塊604包括:均方差閾值判斷子模塊642、面閾值判斷子模塊644、頂點閾值判斷子模塊646以及K-means算法子模塊648。
均方差閾值判斷子模塊642,用于判斷聚類中的均方差數(shù)值是否超過均方差閾值;
頂點閾值判斷子模塊644,用于判斷聚類中模型頂點總數(shù)是否超過頂點閾值;
面閾值判斷子模塊646,用于判斷聚類中模型面總數(shù)是否超過面閾值;
K-means算法子模塊648,用于根據(jù)K-means算法將所述集合中的模型分成k個初始聚類。
利用本實施例的方法,第一模型合并之后形成的第二模型的大小可由預先設(shè)定的頂點和面數(shù)上限控制,不會出現(xiàn)模型過大導致的加載問題。而且,根據(jù)本實施例的方法,使用了均方差閾值和K-means方法來控制合并的區(qū)域,使得合并的區(qū)域都是足夠靠近的,這樣就可以實現(xiàn)分區(qū)域異步加載,提高用戶體驗。
需要注意的是,上述附圖中所示的框圖是功能實體,不一定必須與物理或邏輯上獨立的實體相對應(yīng)??梢圆捎密浖问絹韺崿F(xiàn)這些功能實體,或在一個或多個硬件模塊或集成電路中實現(xiàn)這些功能實體,或在不同網(wǎng)絡(luò)和/或處理器裝置和/或微控制器裝置中實現(xiàn)這些功能實體。
通過以上的實施方式的描述,本領(lǐng)域的技術(shù)人員易于理解,這里描述的示例實施方式可以通過軟件實現(xiàn),也可以通過軟件結(jié)合必要的硬件的方式來實現(xiàn)。因此,根據(jù)本發(fā)明實施方式的技術(shù)方案可以以軟件產(chǎn)品的形式體現(xiàn)出來,該軟件產(chǎn)品可以存儲在一個非易失性存儲介質(zhì)(可以是CD-ROM,U盤,移動硬盤等)中或網(wǎng)絡(luò)上,包括若干指令以使得一臺計算設(shè)備(可以是個人計算機、服務(wù)器、移動終端、或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行根據(jù)本發(fā)明實施方式的方法。
本領(lǐng)域技術(shù)人員在考慮說明書及實踐這里公開的發(fā)明后,將容易想到本發(fā)明的其它實施方案。本申請旨在涵蓋本發(fā)明的任何變型、用途或者適應(yīng)性變化,這些變型、用途或者適應(yīng)性變化遵循本發(fā)明的一般性原理并包括本發(fā)明未公開的本技術(shù)領(lǐng)域中的公知常識或慣用技術(shù)手段。說明書和實施例僅被視為示例性的,本發(fā)明的真正范圍和精神由下面的權(quán)利要求指出。
應(yīng)當理解的是,本發(fā)明并不局限于上面已經(jīng)描述并在附圖中示出的精確結(jié)構(gòu),并且可以在不脫離其范圍進行各種修改和改變。本發(fā)明的范圍僅由所附的權(quán)利要求來限制。