詹勇(重慶市勘測(cè)院,重慶 400020)
三維城市模型重復(fù)紋理合并方法研究
詹勇?
(重慶市勘測(cè)院,重慶 400020)
摘 要:由于現(xiàn)有三維引擎在處理重復(fù)紋理時(shí),是對(duì)整張紋理進(jìn)行重復(fù),而不是對(duì)紋理中的部分內(nèi)容進(jìn)行重復(fù),因此當(dāng)紋理合并后,原來(lái)被用來(lái)重復(fù)貼圖的單張紋理成了合并后紋理的一部分,而無(wú)法表示正確的重復(fù)貼圖。本文針對(duì)該問(wèn)題,研究了剖分模型、合并重復(fù)貼圖以及RTT(Render To Texture)三種紋理合并方法,開(kāi)展了對(duì)比試驗(yàn)。最后,在三維場(chǎng)景中開(kāi)展了紋理合并實(shí)驗(yàn),驗(yàn)證了合并紋理能有效地提高場(chǎng)景加載與渲染效率。
關(guān)鍵詞:三維模型;重復(fù)紋理;紋理合并;幀率
城市級(jí)的三維模型數(shù)據(jù)通常達(dá)上百GB乃至TB 級(jí),如何實(shí)現(xiàn)海量三維模型數(shù)據(jù)的快速加載與漫游一直是三維技術(shù)應(yīng)用的關(guān)鍵問(wèn)題,現(xiàn)有方法包括模型組織與優(yōu)化、空間索引以及場(chǎng)景調(diào)度方法等[1]。影響三維場(chǎng)景渲染幀率的一個(gè)重要原因是紋理渲染狀態(tài)的切換,圖形處理單元GPU(Graphics Process Unit)是按批次對(duì)三角面進(jìn)行渲染,只有渲染狀態(tài)相同的三角面才會(huì)在同一批次被渲染[2]。因此,減少渲染狀態(tài)的切換能夠充分利用GPU性能。通過(guò)紋理的合并,可以減少場(chǎng)景使用的紋理數(shù)量,從而達(dá)到減少紋理狀態(tài)切換,獲得更高渲染幀率。
在紋理合并方法方面,國(guó)內(nèi)外都有相應(yīng)的研究[3,4],NVIDIA公司提供了texture tools工具箱[5]用于自動(dòng)合并文件夾內(nèi)紋理,戴雪峰[6]等研究了基于貪心算法和模擬退火算法的三維城市模型多紋理合并方法,紋理合并結(jié)果趨于全局最優(yōu),宋歌[2]等利用動(dòng)態(tài)空間分配算法將模型中的紋理以最小空間代價(jià)合并為數(shù)個(gè)大紋理,杜志強(qiáng)[7]等提出了基于超面的建筑物紋理優(yōu)化處理方法等。
本文在開(kāi)展紋理合并的研究過(guò)程中,遇到了重復(fù)紋理的合并問(wèn)題。由于現(xiàn)有三維引擎(如Direct3D和OpenGL等)的原因,紋理重復(fù)都是對(duì)整張紋理進(jìn)行重復(fù),而不是對(duì)紋理中的部分內(nèi)容進(jìn)行重復(fù)。因此當(dāng)紋理合并后,原來(lái)被重復(fù)貼圖的單張紋理成了合并后紋理的一部分,而無(wú)法表示正確的紋理坐標(biāo),因而無(wú)法表示正確的重復(fù)貼圖。本文針對(duì)該問(wèn)題,研究了剖分模型、合并重復(fù)貼圖以及RTT(Render To Texture)三種紋理合并方法,開(kāi)展了對(duì)比試驗(yàn)。最后,在三維場(chǎng)景中開(kāi)展了紋理合并實(shí)驗(yàn),驗(yàn)證了合并紋理能有效地提高場(chǎng)景加載與渲染效率。
本文涉及的部分術(shù)語(yǔ)定義如下:
合并前模型:是指按照一般三維建模規(guī)范建立的三維模型,包含一個(gè)幾何模型及其采用的多張紋理,通常存在重復(fù)紋理貼圖。
圖片合并:僅處理模型圖片,將多張圖片合并成一張或幾張圖。
紋理合并:通過(guò)圖片合并,并結(jié)合修改模型頂點(diǎn)或紋理坐標(biāo)等,減少紋理使用數(shù)量。
重復(fù)紋理:本文所指的重復(fù)紋理不是指一張紋理被多個(gè)模型共用,而是指對(duì)一個(gè)面進(jìn)行紋理貼圖時(shí),使用的紋理圖片進(jìn)行了多次重復(fù)(具體例子見(jiàn)2.2節(jié)),其基本特征是紋理坐標(biāo)超出了[0,1]。
重復(fù)紋理合并:是指模型存在重復(fù)紋理貼圖的情形下的紋理合并。
模型紋理分辨率:與影像的空間分辨率意義一致,描述模型使用紋理的清晰度。
2.1紋理合并及紋理坐標(biāo)表示方法
圖片合并的方法可采用手工、計(jì)算機(jī)自動(dòng)拼圖等方式,這里不做過(guò)多說(shuō)明。難點(diǎn)是如何將合并前貼圖的紋理坐標(biāo),修正成使用合并后貼圖的紋理坐標(biāo)。將圖1中紋理A和紋理B經(jīng)過(guò)圖片合并得到新紋理C,使用紋理C替換紋理A和B時(shí),使用紋理C的模型紋理坐標(biāo)按如下公式進(jìn)行。

圖1 紋理合并后的坐標(biāo)表示

其中,u1,v1是模型使用原圖A或B的紋理坐標(biāo), u2,v2是使用紋理C的紋理坐標(biāo)。ustart和vstart是A 或B在紋理C中的起始點(diǎn)位置,width和height分別是在紋理C的寬度和高度。
2.2重復(fù)紋理的坐標(biāo)表示問(wèn)題
例如對(duì)某一地面利用圖1中紋理A,重復(fù)平鋪得到了整個(gè)地面的紋理貼圖,如圖2(a),紋理坐標(biāo)超出了[0,1],即為本文所指的重復(fù)紋理。利用合并后的貼圖(圖1中紋理C)中的右半部分來(lái)表示圖2(a),即為本文所指的重復(fù)紋理坐標(biāo)表示。
當(dāng)紋理坐標(biāo)超出[0,1],即產(chǎn)生紋理重復(fù)時(shí),現(xiàn)有三維引擎(如Direct3D和OpenGL等)都是對(duì)整張紋理進(jìn)行重復(fù),而不會(huì)對(duì)紋理中的部分內(nèi)容進(jìn)行重復(fù),即,利用圖1中紋理C的右半部分,重復(fù)2次來(lái)表示圖2(a),僅修改紋理坐標(biāo)是不可行的,原因是引擎限制,不存在一個(gè)正確的紋理坐標(biāo)實(shí)現(xiàn)紋理中部分內(nèi)容的重復(fù)。若按公式(1)進(jìn)行處理,得到的結(jié)果如圖2(b)所示,與圖2 (a)不同。因此,本文提出以下幾種方法進(jìn)行修正。

圖2 紋理重復(fù)表示法
對(duì)于紋理坐標(biāo)超出[0,1]的重復(fù)紋理,通過(guò)以下方式,將紋理坐標(biāo)修正到[0,1],進(jìn)一步按公式(1)或其他方式計(jì)算出采用新紋理后的紋理坐標(biāo),進(jìn)而實(shí)現(xiàn)重復(fù)紋理合并。
3.1剖分模型法
剖分模型法是將模型按紋理坐標(biāo)的重復(fù)次數(shù)進(jìn)行剖分,保證紋理坐標(biāo)的取值范圍在[0,1]之間,如圖3所示。矩形面重復(fù)了3次紋理單元,剖分模型法將矩形面按紋理坐標(biāo)分成三部分,每部分分別進(jìn)行一次紋理貼圖。

圖3 剖分前后的模型紋理坐標(biāo)
具體方法包括手工和計(jì)算機(jī)處理。將合并前模型進(jìn)行剖分后,在剖分面手工重復(fù)貼圖即可。計(jì)算機(jī)處理則是根據(jù)重復(fù)紋理坐標(biāo)對(duì)模型進(jìn)行自動(dòng)剖分,并采用式(1)進(jìn)行坐標(biāo)處理,達(dá)到紋理合并的目的。
3.2合并重復(fù)貼圖
該方法是不改變模型幾何結(jié)構(gòu),在圖片合并時(shí),先將使用的重復(fù)紋理貼圖進(jìn)行合并后,再進(jìn)一步與其他圖片進(jìn)行合并,如圖4所示。

圖4 合并重復(fù)貼圖后貼圖
利用手工制作重復(fù)合并后的圖,需要耗費(fèi)較大的人工,增加了紋理合并的難度,因而在實(shí)際生產(chǎn)中運(yùn)用較少,下文的RTT方法與該方法類(lèi)似。
3.3RTT(Render to Texture)
RTT,即渲染至紋理技術(shù)。與合并重復(fù)貼圖方法不同在于,前者是合并原始使用的紋理貼圖,而RTT是計(jì)算出模型的每個(gè)幾何面的紋理,然后通過(guò)排列算法,得到最終合并貼圖。利用RTT技術(shù)合并紋理[8]有兩個(gè)優(yōu)點(diǎn),一是程序自動(dòng)處理,二是可將光照信息也同時(shí)渲染到貼圖中去,整個(gè)模型只有一張紋理,此時(shí)模型紋理坐標(biāo)范圍為[0,1]。
使用RTT技術(shù),通常產(chǎn)生一張合并的貼圖。由于該圖尺寸固定,會(huì)存在模型紋理分辨率較低的問(wèn)題,而為了不損失原紋理的分辨率,則需要渲染出更大尺度的貼圖,如4096?4096。當(dāng)三維場(chǎng)景中出現(xiàn)大量大尺寸貼圖時(shí),又會(huì)出現(xiàn)加載卡頓等問(wèn)題。因此在模型制作階段,需要限制單個(gè)模型的表面積和,保證有限的出圖尺寸下,獲得一定的模型紋理分辨率。
對(duì)一個(gè)原始模型(如圖5所示,一棟20層建筑,重復(fù)貼圖20次),分別按剖分模型法和RTT方法進(jìn)行比較(合并重復(fù)貼圖方法與RTT方法從一定程度上說(shuō)是類(lèi)似的,此處僅采用RTT方法)。合并前模型的紋理為0.05 m,剖分模型法與RTT方法的模型紋理分辨率為0.05 m和0.07 m,保證了模型外觀效果,圖5是不同方法對(duì)應(yīng)的幾何模型與合并后紋理的效果。
進(jìn)一步的,為模擬現(xiàn)實(shí)場(chǎng)景,便于比較不同方法的優(yōu)劣,需要一定的數(shù)據(jù)規(guī)模。通過(guò)重命名模型名以及紋理名,設(shè)定每個(gè)模型與紋理不相同,同時(shí)設(shè)定模型和紋理不被共享(若共享為一個(gè)實(shí)例,失去數(shù)據(jù)規(guī)模的意義,與本實(shí)驗(yàn)?zāi)康牟幌喾?,通過(guò)平移,得到20?20格網(wǎng)下,共400棟建筑。
實(shí)驗(yàn)平臺(tái)采用重慶市勘測(cè)院自主研發(fā)的集景三維數(shù)字城市平臺(tái),使用計(jì)算機(jī)處理器為Intel(R) Core (TM)2 Duo CPU E8400.3.00GHZ,顯卡為NVIDIA Ge-Force GTX 285,內(nèi)存2GB進(jìn)行測(cè)試,采用動(dòng)態(tài)加載方式,實(shí)驗(yàn)場(chǎng)景如圖6所示。

圖5 不同方法對(duì)應(yīng)的幾何模型與合并后紋理

圖6 實(shí)驗(yàn)場(chǎng)景
在保證加載方式相同的情況下,得到實(shí)驗(yàn)結(jié)果如表1所示。

實(shí)驗(yàn)結(jié)果 表1
可得出以下結(jié)論:
(1)合并紋理后的數(shù)據(jù)總量變大,特別是RTT方法,是合并前的6倍,主要是存在重復(fù)紋理,每個(gè)模型都被20次重復(fù)貼圖,同時(shí)畫(huà)布的留白也導(dǎo)致數(shù)據(jù)量上升,具體如圖4所示。
(2)合并紋理后的場(chǎng)景幀率得到了提高。加載完場(chǎng)景模型后,兩種方法的幀率都提高到60幀,證明了減少紋理個(gè)數(shù)對(duì)提高場(chǎng)景渲染效率的有效性,特別是剖分模型法,在加載時(shí)間、加載過(guò)程中以及加載完成后的幀率都獲得了提升。
(3)RTT方法在模型加載過(guò)程的幀率降低,且加載時(shí)間長(zhǎng)的原因是由于數(shù)據(jù)量增加導(dǎo)致了系統(tǒng)IO消耗,影響了場(chǎng)景加載效率。
與剖分模型法相比,RTT技術(shù)由計(jì)算機(jī)自動(dòng)完成,極大減少人工作量,應(yīng)在實(shí)際生產(chǎn)中優(yōu)先采用。在實(shí)際環(huán)境中,如上述實(shí)驗(yàn)中所展現(xiàn)的高重復(fù)貼圖率較少,同時(shí),由于數(shù)碼相機(jī)獲取的紋理清晰度很高,在應(yīng)用中并不需要如此高的紋理分辨率,一般達(dá)到0.1 m以上即能滿(mǎn)足應(yīng)用需求,從而使得在RTT過(guò)程中可減小合并后的紋理尺寸,達(dá)到減小總數(shù)據(jù)量的目的。因此,本文進(jìn)一步開(kāi)展了在實(shí)際三維大場(chǎng)景中,利用RTT技術(shù)合并重復(fù)貼圖實(shí)驗(yàn)。
數(shù)據(jù)來(lái)源為重慶某場(chǎng)景的三維城市模型,范圍為2.2 km2。合并前每個(gè)模型平均使用約5張紋理,合并后為1張紋理。合并前后的模型紋理分辨率都不低于0.1 m。實(shí)驗(yàn)的加載場(chǎng)景如圖7所示,結(jié)果如表2所示,經(jīng)測(cè)試,發(fā)現(xiàn)合并前后的渲染狀態(tài)數(shù)從4 926降低到930個(gè),加載當(dāng)前場(chǎng)景的時(shí)間從38 s縮短到13 s,幀率從14幀提高到30幀。

實(shí)驗(yàn)結(jié)果 表2

圖7 三維大場(chǎng)景中使用紋理合并方法
本文研究了重復(fù)紋理的合并原理,給出了三種重復(fù)紋理的合并方法,開(kāi)展了紋理合并實(shí)驗(yàn),驗(yàn)證了合并紋理對(duì)于提升場(chǎng)景幀率的有效性。此外,在紋理合并方法的選擇和應(yīng)用上,還需進(jìn)一步考慮:
對(duì)于城市級(jí)的三維模型,數(shù)據(jù)的集成量通常達(dá)到上百GB,紋理的數(shù)據(jù)量通常占到70%以上,因此在自動(dòng)化的算法選擇上,需要考慮到算法的效率;
在紋理更新方面,由于紋理的合并,在需要更新未合并前的某個(gè)小紋理時(shí),需要同步更新合并后的大紋理,更新復(fù)雜度增加。
最后,合并紋理的方式是提高三維場(chǎng)景加載和渲染效率的方法之一,還可以從模型的LOD建立、場(chǎng)景的調(diào)度組織等方面提高三維場(chǎng)景的加載效率。
參考文獻(xiàn)
[1] 馮琰,郭容寰,汪旻琦等.三維城市模型數(shù)據(jù)組織與管理方法研究[J].測(cè)繪科學(xué),2011,36(1):215~217.
[2] 宋歌,楊紅雨.基于紋理集的大規(guī)模場(chǎng)景模型優(yōu)化算法[J].計(jì)算機(jī)工程與設(shè)計(jì),2011,32(9):3120~3122.
[3] Carr N A,John H.Meshed atlases for real-time procedural solid texturing[J].ACM transactions on graphics,2002,21 (2):106~131.
[4] Buchholz H,Dollner J.View-dependent rendering of multiresolution texture-atlases[C].Minneapolis,MN,USA:IEEE COMPUTER SOC,2005.
[5] http:/ / www.nvidia.cn/ object/ nv _ texture _ tools.html.2015:2015.
[6] 戴雪峰,熊漢江,龔健雅.一種三維城市模型多紋理自動(dòng)合并方法[J].武漢大學(xué)學(xué)報(bào)·信息科學(xué)版,2015,40 (3):347~353.
[7] 杜志強(qiáng),羅盼,朱曉玲等.基于超面的建筑物紋理優(yōu)化處理方法[J].武漢大學(xué)學(xué)報(bào)·信息科學(xué)版,2014,39(12): 1401~1406.
[8] 李芳.3ds max6標(biāo)準(zhǔn)教材[M].北京:中國(guó)電力出版社, 2004.
Research on Method of Merging Texture for 3D City Models
Zhan Yong
(Chongqing Survey Institute,Chongqing 400020,China)
Abstract:When 3D engine process repeated texture,it repeats the whole one,not the parts of texture.so when textures merged,the original single one which used to repeat becomes part of the merged texture.In this situation,the correct repeat cannot be expressed.To solve the problem,this paper introduces three merging methods for 3D city models, such as splitting model,combining repeated textures and rendering to texture,and the differences of these three methods are compared.At last,experiments on texture merging are carried out in large 3D city scene,and results show that texture merging can effectively improves the efficiency of models loading and rending.
Key words:three-dimensional model;repeated texture;texture merging;frame rate
文章編號(hào):1672-8262(2015)06-17-04中圖分類(lèi)號(hào):P208.1
文獻(xiàn)標(biāo)識(shí)碼:A
收稿日期:?2015—07—22
作者簡(jiǎn)介:詹勇(1987—),男,工程師,碩士,主要從事三維地理信息系統(tǒng)原理及應(yīng)用研究工作。
基金項(xiàng)目:重慶市應(yīng)用開(kāi)發(fā)計(jì)劃項(xiàng)目(cstc2014yykfB40004)