本發(fā)明涉及一種基于法向、幾何、uv因素的網(wǎng)格簡化方法,特別涉及的是基于法向、幾何、uv的網(wǎng)格簡化方法,屬于計算機(jī)三維動畫領(lǐng)域。
背景技術(shù):
網(wǎng)格簡化的目的主要在于通過減少頂點和面來加速繪制,同時保證渲染效果的過程。通過網(wǎng)格簡化可以生成物體模型的不同簡化版本的網(wǎng)格,從而構(gòu)成物體不同的細(xì)節(jié)層次。
現(xiàn)在目前該技術(shù)領(lǐng)域主要有兩種,一是直接使用三維動畫軟件刪減修改不同簡化版本的網(wǎng)格,二是代碼里使用簡單的網(wǎng)格算法自動生成簡化網(wǎng)格。
一采用直接使用三維動畫軟件刪減修改不同簡化版本的網(wǎng)格的基本流程圖如說明書附圖1所示。通過上面的流程圖可以看出上述方案存在以下兩點缺陷:
1.游戲中會存在大量的場景模型和人物模型,根據(jù)具體需求簡化網(wǎng)格的個數(shù)一般至少要一兩個,如果每個模型網(wǎng)格都要讓美術(shù)通過手動方式來進(jìn)行簡化網(wǎng)格,將會大大占用了3D模型美術(shù)的時間,這大量的工作量往往導(dǎo)致游戲工作室拋棄了這個細(xì)節(jié)層次優(yōu)化的方案,從而導(dǎo)致游戲渲染效率的低下。
2.由于沒有自動化生成,簡化后的效果往往需要放入到游戲引擎中看簡化后的網(wǎng)格渲染效果,這種方式會使得制作流程變得冗余而耗時。
二采用代碼里使用簡單的網(wǎng)格算法自動生成簡化網(wǎng)格的基本流程圖如圖2所示。通過上面的流程圖可以看出上述方案存在以下缺陷:
該方案采用比較常用的基于幾何作為誤差度量的網(wǎng)格簡化算法,即基于保持物體體積和簡化后網(wǎng)格到原始網(wǎng)格的距離等等幾何方式來作為誤差度量。這種方式不適用實際游戲應(yīng)用中,因為模型的光照著色的影響是根據(jù)物體頂點和面的法向而不是位置等幾何因素。故采用已有的網(wǎng)格簡化算法會導(dǎo)致渲染效果不夠好。
技術(shù)實現(xiàn)要素:
針對現(xiàn)有技術(shù)的不足,本發(fā)明的技術(shù)方案提供了一種網(wǎng)格簡化方法,其特征在于,該方法包括:S11,獲取網(wǎng)格,進(jìn)而獲取影響網(wǎng)格方面的各項權(quán)重值;S12,計算簡化三角面的三角特征數(shù)據(jù);S13,遍歷網(wǎng)格中的三角面,為每個三角面創(chuàng)建對應(yīng)的二維數(shù)組和一維數(shù)組,以及,創(chuàng)建二維數(shù)組對應(yīng)的頂點刪除列表,所述二維數(shù)組用于表示三角面頂點序號及其收縮變化時的頂點序號,所述一維數(shù)組用于表示三角面端點收縮的最終權(quán)重和;S14,計算所述二維數(shù)組收縮變化時的三角特征數(shù)據(jù),計算每個影響網(wǎng)格方面與對應(yīng)權(quán)重值的乘積,將乘積值進(jìn)行加和并賦予給對應(yīng)的一維數(shù)組;S15,取賦值后的一維數(shù)組的最小值,若該最小值小于預(yù)設(shè) 的權(quán)重預(yù)設(shè)值,則將一維數(shù)組對應(yīng)的二維數(shù)組依照排序向后進(jìn)行收縮并刪除收縮前的前一個頂點序號;S16,遍歷完網(wǎng)格所有三角面后,根據(jù)頂點刪除列表對網(wǎng)格做邊收縮處理,完成一次簡化循環(huán);S17,調(diào)整網(wǎng)格影響方面的權(quán)重值或規(guī)定的權(quán)重閾值,重復(fù)步驟S11到步驟S16,進(jìn)行多次簡化循環(huán)。
根據(jù)所述的網(wǎng)格簡化方法,所述的影響網(wǎng)格方面的各項權(quán)重值包括:每項權(quán)重值都有預(yù)設(shè)的取值范圍,該取值范圍是根據(jù)網(wǎng)格的數(shù)據(jù)特征進(jìn)行動態(tài)調(diào)整的。
根據(jù)所述的網(wǎng)格簡化方法,所述的三角特征數(shù)據(jù)包括:三角面的法向向量、面積、各邊長,三角面各頂點是否自動生成重合數(shù)組,網(wǎng)格總面積,各頂點關(guān)聯(lián)的面中心離網(wǎng)格中心距離,各頂點關(guān)聯(lián)邊的夾角總和及uv總面積。
根據(jù)所述的網(wǎng)格簡化方法,其特征在于:所述二維數(shù)組為對應(yīng)三角面生成的6行2列數(shù)組,a[i][0]存儲的是其三角面中一個頂點序號,a[i][1]存儲的是對應(yīng)頂點收縮后的頂點序號,其中i大于等于0但小于6。
根據(jù)所述的網(wǎng)格簡化方法,其特征在于:所述一維數(shù)組為三角面對應(yīng)的一個長度為6的數(shù)組weight[6],weight[6]數(shù)組存放的是三角面任意一條邊的一個端點收縮到另外一個端點的最終權(quán)重和,即a[i][0]到a[i][1]的最終權(quán)重和。
根據(jù)所述的網(wǎng)格簡化方法,所述步驟S14還包括:計算a[i][0]頂點假設(shè)收縮到a[i][1]頂點后的三角特征數(shù)據(jù),根據(jù)簡化前后的三角特征數(shù)據(jù),計算每個影響網(wǎng)格方面與對應(yīng)權(quán)重值的乘積,最終加起來將值賦值給對應(yīng)的weight[i]。
根據(jù)所述的網(wǎng)格簡化方法,所述步驟S15還包括:取weight[6]數(shù)組中的最小值weight[t],weight[t]值小于預(yù)設(shè)的權(quán)重閾值,存儲a[t][0]到頂點刪除列表中,并將網(wǎng)格三角形數(shù)組中等于a[t][0]的頂點序號改成a[t][1]的頂點序號。
本發(fā)明的技術(shù)方案還包括一種基于法向因素的網(wǎng)格簡化方法,其特征在于,該方法包括:
S81,獲取網(wǎng)格;
S82,對網(wǎng)格進(jìn)行簡化時,對落在模型輪廓上的頂點概率進(jìn)行計算,若簡化后的頂點法向向量與簡化前的頂點法向向量夾角超過指定閾值,則簡化時不刪除對應(yīng)頂點;
S83,對網(wǎng)格進(jìn)行簡化時,對落在模型輪廓上的頂點概率進(jìn)行計算,若簡化后的三角面法向向量與簡化前的頂點三角面向量夾角超過指定閾值,則簡化時不刪除對應(yīng)頂點。
本發(fā)明的技術(shù)方案還包括一種基于幾何因素的網(wǎng)格簡化方法,其特征在于,該方法包括:S91,對網(wǎng)格進(jìn)行簡化時,先導(dǎo)入網(wǎng)格,自動在網(wǎng)格原頂點處生成對應(yīng)的新頂點,新頂點與原頂點的法向向量和uv不一致;S92,為新頂點根據(jù)不同的幾何因素添加對應(yīng)的權(quán)重值。
根據(jù)所述的基于幾何因素的網(wǎng)格簡化方法,其特征在于,所述步驟S92還包括:獲取簡化網(wǎng)格的邊長和三角面面積,對低于預(yù)設(shè)閾值的邊長和三角面面積對應(yīng)的三角面進(jìn)行刪除。
據(jù)所述的基于幾何因素的網(wǎng)格簡化方法,其特征在于,所述步驟S92還包括:獲取簡化前及簡化前后網(wǎng)格的總面積,若簡化前及簡化前后網(wǎng)格的總面積差不超過預(yù)設(shè)閾值,則刪除對應(yīng)的網(wǎng)格頂點。
據(jù)所述的基于幾何因素的網(wǎng)格簡化方法,其特征在于,所述步驟S92還包括:用于對網(wǎng)格簡化前及簡化后的頂點距離網(wǎng)格中心的總距離差進(jìn)行計算,若總距離差低于預(yù)設(shè)閾值,則刪除對應(yīng)的網(wǎng)格頂點。
據(jù)所述的基于幾何因素的網(wǎng)格簡化方法,其特征在于,所述步驟S92還包括:用于對網(wǎng)格簡化前及簡化后的頂點總角度差進(jìn)行計算,若總角度差低于預(yù)設(shè)閾值,則刪除對應(yīng)的網(wǎng)格頂點。
本發(fā)明的技術(shù)方案還一種基于uv因素的網(wǎng)格簡化方法,該方法包括:用于對網(wǎng)格簡化前及簡化后的uv總面積差進(jìn)行計算,若uv總面積差低于預(yù)設(shè)閾值,則刪除對應(yīng)的網(wǎng)格頂點。
本發(fā)明的有益效果為:
1.自動化生成簡化網(wǎng)格從而釋放美術(shù)手動刪減所需占用的大量時間。根據(jù)網(wǎng)格簡化算法編寫簡單的導(dǎo)出網(wǎng)格編輯器,從而實現(xiàn)了在游戲中自動化生成滿足具體需求的簡化網(wǎng)格版本,從而替代了美術(shù)手動操作所占用的大量時間;
2.網(wǎng)格可以根據(jù)不同影響因素權(quán)重修改來生成滿足需求的簡化版本。通過修改基于法向、幾何、uv三大因素相關(guān)的權(quán)重,進(jìn)而影響網(wǎng)格中邊的最終權(quán)重值,從而可以輸出滿足不同權(quán)重值的網(wǎng)格簡化版本;
3.網(wǎng)格在減少頂點和面加速繪制的同時還能夠更好地保留物體的視覺特征。該網(wǎng)格簡化算法不僅可以減少頂點和面使得加速物體渲染,而且算法計算了模型中頂點和面的法向相關(guān)因素,使用相關(guān)公式保留了網(wǎng)格模型中的視覺特征點,從而使得網(wǎng)格簡化后的視覺效果很好。
附圖說明
圖1所示為現(xiàn)有技術(shù)的三維動畫軟件刪減修改不同簡化版本的網(wǎng)格的基本流程圖;
圖2所示為現(xiàn)有技術(shù)的使用簡單的網(wǎng)格算法自動生成簡化網(wǎng)格的基本流程圖;
圖3所示為根據(jù)本發(fā)明實施方式的基本流程圖;
圖4所示為根據(jù)本發(fā)明實施方式的邊收縮簡化流程圖;
圖5所示為根據(jù)本發(fā)明實施方式的邊收縮簡化方法及基于法向、幾何、uv收縮方法的關(guān)系圖。
具體實施方式
為了使本發(fā)明的目的、技術(shù)方案和優(yōu)點更加清楚,下面結(jié)合附圖和具體實施例對本發(fā)明進(jìn)行詳細(xì)描述。本發(fā)明的游戲圖形需求和設(shè)計的系統(tǒng)和方法適用于游戲動畫圖像的開發(fā)。
圖1所示為根據(jù)本發(fā)明實施方式的總體結(jié)構(gòu)圖。在游戲中為了保持物體的光照著色效果, 加入了法向(法向即法線向量)的影響因素。為了保持物體的整體形狀和局部細(xì)節(jié)的效果,加入了幾何的影響因素。由于是在游戲中使用還得考慮到物體的紋理uv的影響,故加入了幾何的影響因素。故該算法受到法向、幾何、uv三大主因素影響,每個主因素又需要基于不同的方面來考慮。其中法向主要考慮的方面有:頂點法向變化、面法向變化,幾何主要考慮的方面有:頂點自動生成、邊長、三角面面積、簡化后網(wǎng)格的總面積差、刪除頂點后離網(wǎng)格中心的距離差、刪除頂點后頂點的總角度差;uv主要考慮的方面有:簡化后uv的總面積差。
考慮到網(wǎng)格影響的方面比較多,故采用為主要影響方面添加權(quán)重值,計算每個影響方面與權(quán)重值的乘積,最終加起來作為邊的最終值,如果小于指定閾值則做收縮邊操作。頂點法向變化的權(quán)重設(shè)為verNormalWeight,面法向變化的權(quán)重設(shè)為areaNormalWeight,頂點自動生成的權(quán)重設(shè)為vertexWeight,邊長和面積的權(quán)重設(shè)為sideLengthWeight,簡化后網(wǎng)格的總面積差的權(quán)重為areaDiffWeight,刪除頂點后離網(wǎng)格中心的距離差的權(quán)重為centerDistanceWeight,刪除頂點后頂點的總角度差的權(quán)重為angleWeight,簡化后uv的總面積差的權(quán)重為uvWeight。采用權(quán)重值有兩個好處是,一是可以根據(jù)需求修改影響方面對應(yīng)的權(quán)重值,從而生成對應(yīng)的網(wǎng)格。比如說希望生成的簡化網(wǎng)格三角面面積變化不要太大,就調(diào)高areaDiffWeight權(quán)重值即可;二是非常方便增刪對網(wǎng)格的影響方面,增加一個方面可以為其增加一個權(quán)重值,刪除一個方面只需要把權(quán)重值調(diào)成0即可。
圖4所示為根據(jù)本發(fā)明實施方式的邊收縮簡化流程圖,詳情如下S401~S407所示:
S401,獲取網(wǎng)格影響方面的各項權(quán)重值(每一個權(quán)重值是實際大量測試從而獲得得一個合理范圍區(qū)間,將該范圍區(qū)間提高給外部來根據(jù)需求進(jìn)行調(diào)整。比如sideLengthWeight的合理范圍區(qū)間是[0,1.5],如果需求想提高邊長和面積的權(quán)重就可以把sideLengthWeight值調(diào)高)。
S402,計算簡化前的頂點法向,各三角面的法向和面積,各邊長,各頂點是否自動生成重合數(shù)組,網(wǎng)格總面積,各頂點關(guān)聯(lián)的面中心離網(wǎng)格中心距離,各頂點關(guān)聯(lián)邊的夾角總和,uv總面積(這些數(shù)據(jù)統(tǒng)稱為三角特征數(shù)據(jù))。
S403,遍歷網(wǎng)格的三角面,為每個三角面生成一個6行2列的二維數(shù)組a[6][2],a[i][0]存儲的是其三角面中一個頂點序號,a[i][1]存儲的是對應(yīng)頂點收縮后的頂點序號,其中0<=i<6。為每個三角面生成一個長度為6的一維數(shù)組weight[6],weight[6]數(shù)組存放的是三角面任意一條邊的一個端點收縮到另外一個端點的最終權(quán)重和,即a[i][0]到a[i][1]的最終權(quán)重和。(比如三角面的三個頂點序號分別為k、m、n,那么二維數(shù)組a[6][2]={{k,m},{m,k},{k,n},{n,k},{m,n},{n,m}}。
S404,計算a[i][0]頂點假設(shè)收縮到a[i][1]頂點后的三角特征數(shù)據(jù),根據(jù)簡化前后的三角特征數(shù)據(jù),計算每個影響網(wǎng)格方面與對應(yīng)權(quán)重值的乘積,最終加起來將值賦值給對應(yīng)的weight[i]。
S405,取weight[6]數(shù)組中的最小值,假設(shè)是weight[t],如果weight[t]值小于規(guī)定的權(quán)重閾值(即后面需要將a[t][0]頂點收縮到a[t][1]頂點),存儲a[t][0]到頂點刪除列表中,并將網(wǎng)格三角形數(shù)組中等于a[t][0]的頂點序號改成a[t][1]的頂點序號。
S406,遍歷完網(wǎng)格所有三角面后,根據(jù)頂點刪除列表對網(wǎng)格做邊收縮處理,完成一次簡化循環(huán)。
S407,根據(jù)需要可以調(diào)整網(wǎng)格影響方面的權(quán)重值或規(guī)定的權(quán)重閾值,重復(fù)步驟1到步驟6,進(jìn)行多次簡化循環(huán)。
圖5所示為根據(jù)本發(fā)明實施方式的邊收縮簡化方法及基于法向、幾何、uv收縮方法的關(guān)系圖。根據(jù)圖5,本發(fā)明的技術(shù)方案進(jìn)一步提供了法向、幾何、uv因素的簡化方法,如下(1)~(3)所示:
(1)法向因素,如下a-b所示,包括
a,頂點法向變化
為了保留網(wǎng)格模型中的視覺特征點,即落在模型輪廓上的概率比較大的點,頂點V落在模型輪廓上的概率Vp的計算方法為其中L={|VVi|},{V,Vi}是頂點V所鄰接的邊,θ=max{θij},θij是頂點V鄰接邊(V,Vi)和(V,Vj)所成的角,i≠j,Vp值越大則視覺特征越大,越不能刪除該頂點。故權(quán)重增加值為Vp*verNormalWeight。
b,面法向變化
為了控制三角形在簡化過程中面法向的變化過大導(dǎo)致渲染效果太大改變,故簡化后的面法向與簡化前的面法向夾角越大,越不能刪除該頂點。
該權(quán)重增加值為,
其中normalFrom是原頂點邊壓縮前的法向,normalTo是邊壓縮后目標(biāo)頂點的法向,Angle求兩個向量的角度(即normalFrom對應(yīng)算法步驟3的a[i][0]的法向,normalTo對應(yīng)a[i][1]的法向)。如果包圍要收縮邊的空間多邊形是凹多邊形時,收縮這條邊可能引起面的法向翻轉(zhuǎn),造成表面折皺。故隨著收縮前后面法向夾角越大,對應(yīng)的areaNormalWeight值也要越高,如果夾角大于90度要將其areaNormalWeight調(diào)到足夠高從而避免壓縮對應(yīng)的邊,從而避免折皺的發(fā)生。
(2)幾何因素,如下a-e所示,包括:
a,頂點自動生成在unity游戲引擎中導(dǎo)入的模型網(wǎng)格,會存在部分頂點在相同位置生成 同樣頂點,區(qū)別僅僅是法向或者uv不一致,這部分頂點是根據(jù)相鄰接面的夾角大于一定閾值,unity會自動生成相同頂點分割不同三角面。對于這部分的頂點因為存在法向或者uv的不一致,刪除該位置的頂點會使得網(wǎng)格視覺特征發(fā)生較大的改變,為了保持這部分頂點大大減少刪除概率,需要增加對應(yīng)的權(quán)重增加值。
權(quán)重增加值為vertexImport*vertexWeight,其中如果頂點自動在同樣生成更多頂點,那么該vertexImport值也會調(diào)的足夠高,減少該頂點被刪除概率。
b,邊長和三角面面積
網(wǎng)格中邊長越長,或者是三角面面積越大,對應(yīng)的權(quán)重增加值越大,這樣可以使得表現(xiàn)物體細(xì)節(jié)的高頻成分可以被消除,如微小的面在距離攝像機(jī)足夠遠(yuǎn)的位置是不怎么明顯的,可以適當(dāng)?shù)叵?/p>
權(quán)重增加值為(normArea+normSideLength)*sideLengthWeight,其中normArea是遍歷當(dāng)前三角面的面積,normSideLength是當(dāng)前三角面對應(yīng)頂點的邊長。
c,簡化后網(wǎng)格的總面積差
通過控制簡化前后網(wǎng)格的總面積差關(guān)聯(lián)的權(quán)重增加值,來避免總面積差過大造成的物體視覺特征較大的改變。
網(wǎng)格的總面積為
其中n是網(wǎng)格三角形面數(shù),k,m,l是分別是三角形中三個頂點的序號,vs是網(wǎng)格的頂點數(shù)組。
簡化前后網(wǎng)格的總面積差totalAreaDiff=abs(totalAreaAfter-totalAreaBefore),abs函數(shù)是取絕對值,totalAreaBeforer是簡化前網(wǎng)格的總面積,totalAreaAfter是簡化后網(wǎng)格的總面積。網(wǎng)格的總面積差越大,越不應(yīng)該刪除該頂點,權(quán)重增加值為totalAreaDiff*totalDiffWeight。
d,刪除頂點后離網(wǎng)格中心的距離差
通過控制刪除頂點前后離網(wǎng)格中心的距離差關(guān)聯(lián)的權(quán)重增加值,來避免距離差過大造成的物體視覺特征較大的改變。
頂點到網(wǎng)格中心的距離是指頂點相鄰接所有面的重心均值到網(wǎng)格中心的距離,即 centerDistance=cd[k]+cd[m]+cd[l],
其中n是網(wǎng)格三角形面數(shù),k,m,l是分別是三角形中三個頂點的序號,cd是存放各個頂點到網(wǎng)格中心距離的數(shù)組。
刪除頂點前后離網(wǎng)格中心的距離差totalCenterDiff=abs(totalCenterAfter-totalCenterBefore),totalCenterBefore是頂點刪除前離網(wǎng)格中心的距離,totalCenterAfter是頂點刪除后收縮到的頂點離網(wǎng)格中心的距離。頂點離網(wǎng)格中心的距離差越大,越不應(yīng)該刪除該頂點,故權(quán)重增加值為totalCenterDiff*centerDistanceWeight。
e,刪除頂點后頂點的總角度差
通過控制刪除頂點前后頂點的總角度差關(guān)聯(lián)的權(quán)重增加值,來避免頂點總角度差過大做出的物體視覺特征較大的改變。頂點的總角度∑θi,j,θij是指頂點V鄰接邊(V,Vi)和(V,Vj)所成的角度之和,i≠j。
計算刪除頂點前后頂點的總角度差為totalAngleDiff=abs(totalAngleAfter-totalAngleBefore)totalAngleDiff,totalAngleBefore是頂點刪除前總角度,totalAngleAfter是頂點刪除后收縮到的頂點的總角度。頂點的總角度差越大,越不應(yīng)該刪除該頂點,故權(quán)重增加值為totalAngleDiff*angleWeight。
(3)uv因素,具體如下所示:
簡化后uv的總面積差通過控制簡化前后uv的總面積差關(guān)聯(lián)的權(quán)重增加值,來避免uv總面積差過大導(dǎo)致物體的紋理視覺發(fā)生很大的改變。uv的總面積為 Area=area(uv[k],uv[m],uv[l]),其中n是網(wǎng)格三角形面數(shù),k,m,l是分別是三角形中三個頂點的序號,uv是網(wǎng)格的uv數(shù)組。計算簡化前后的uv的總面積差totalUvAreaDiff=abs(totalUvAreaAfter-totalUvAreaBefore),totalUvAreaBefore是簡化前的uv總面積,totalUvAreaAfter是簡化后的uv總面積。uv的總面積差越大,越不應(yīng)該刪除該頂點,故權(quán)重增加值為totalUvAreaDiff*uvWeight。
以上所述,只是本發(fā)明的較佳實施例而已,本發(fā)明并不局限于上述實施方式,只要其以相同的手段達(dá)到本發(fā)明的技術(shù)效果,都應(yīng)屬于本發(fā)明的保護(hù)范圍。在本發(fā)明的保護(hù)范圍內(nèi)其技術(shù)方案和/或?qū)嵤┓绞娇梢杂懈鞣N不同的修改和變化。