詹勇(重慶市勘測院,重慶 400020)
三維城市模型重復(fù)紋理合并方法研究
詹勇?
(重慶市勘測院,重慶 400020)
摘 要:由于現(xiàn)有三維引擎在處理重復(fù)紋理時,是對整張紋理進行重復(fù),而不是對紋理中的部分內(nèi)容進行重復(fù),因此當(dāng)紋理合并后,原來被用來重復(fù)貼圖的單張紋理成了合并后紋理的一部分,而無法表示正確的重復(fù)貼圖。本文針對該問題,研究了剖分模型、合并重復(fù)貼圖以及RTT(Render To Texture)三種紋理合并方法,開展了對比試驗。最后,在三維場景中開展了紋理合并實驗,驗證了合并紋理能有效地提高場景加載與渲染效率。
關(guān)鍵詞:三維模型;重復(fù)紋理;紋理合并;幀率
城市級的三維模型數(shù)據(jù)通常達上百GB乃至TB 級,如何實現(xiàn)海量三維模型數(shù)據(jù)的快速加載與漫游一直是三維技術(shù)應(yīng)用的關(guān)鍵問題,現(xiàn)有方法包括模型組織與優(yōu)化、空間索引以及場景調(diào)度方法等[1]。影響三維場景渲染幀率的一個重要原因是紋理渲染狀態(tài)的切換,圖形處理單元GPU(Graphics Process Unit)是按批次對三角面進行渲染,只有渲染狀態(tài)相同的三角面才會在同一批次被渲染[2]。因此,減少渲染狀態(tài)的切換能夠充分利用GPU性能。通過紋理的合并,可以減少場景使用的紋理數(shù)量,從而達到減少紋理狀態(tài)切換,獲得更高渲染幀率。
在紋理合并方法方面,國內(nèi)外都有相應(yīng)的研究[3,4],NVIDIA公司提供了texture tools工具箱[5]用于自動合并文件夾內(nèi)紋理,戴雪峰[6]等研究了基于貪心算法和模擬退火算法的三維城市模型多紋理合并方法,紋理合并結(jié)果趨于全局最優(yōu),宋歌[2]等利用動態(tài)空間分配算法將模型中的紋理以最小空間代價合并為數(shù)個大紋理,杜志強[7]等提出了基于超面的建筑物紋理優(yōu)化處理方法等。
本文在開展紋理合并的研究過程中,遇到了重復(fù)紋理的合并問題。由于現(xiàn)有三維引擎(如Direct3D和OpenGL等)的原因,紋理重復(fù)都是對整張紋理進行重復(fù),而不是對紋理中的部分內(nèi)容進行重復(fù)。因此當(dāng)紋理合并后,原來被重復(fù)貼圖的單張紋理成了合并后紋理的一部分,而無法表示正確的紋理坐標,因而無法表示正確的重復(fù)貼圖。本文針對該問題,研究了剖分模型、合并重復(fù)貼圖以及RTT(Render To Texture)三種紋理合并方法,開展了對比試驗。最后,在三維場景中開展了紋理合并實驗,驗證了合并紋理能有效地提高場景加載與渲染效率。
本文涉及的部分術(shù)語定義如下:
合并前模型:是指按照一般三維建模規(guī)范建立的三維模型,包含一個幾何模型及其采用的多張紋理,通常存在重復(fù)紋理貼圖。
圖片合并:僅處理模型圖片,將多張圖片合并成一張或幾張圖。
紋理合并:通過圖片合并,并結(jié)合修改模型頂點或紋理坐標等,減少紋理使用數(shù)量。
重復(fù)紋理:本文所指的重復(fù)紋理不是指一張紋理被多個模型共用,而是指對一個面進行紋理貼圖時,使用的紋理圖片進行了多次重復(fù)(具體例子見2.2節(jié)),其基本特征是紋理坐標超出了[0,1]。
重復(fù)紋理合并:是指模型存在重復(fù)紋理貼圖的情形下的紋理合并。
模型紋理分辨率:與影像的空間分辨率意義一致,描述模型使用紋理的清晰度。
2.1紋理合并及紋理坐標表示方法
圖片合并的方法可采用手工、計算機自動拼圖等方式,這里不做過多說明。難點是如何將合并前貼圖的紋理坐標,修正成使用合并后貼圖的紋理坐標。將圖1中紋理A和紋理B經(jīng)過圖片合并得到新紋理C,使用紋理C替換紋理A和B時,使用紋理C的模型紋理坐標按如下公式進行。
圖1 紋理合并后的坐標表示
其中,u1,v1是模型使用原圖A或B的紋理坐標, u2,v2是使用紋理C的紋理坐標。ustart和vstart是A 或B在紋理C中的起始點位置,width和height分別是在紋理C的寬度和高度。
2.2重復(fù)紋理的坐標表示問題
例如對某一地面利用圖1中紋理A,重復(fù)平鋪得到了整個地面的紋理貼圖,如圖2(a),紋理坐標超出了[0,1],即為本文所指的重復(fù)紋理。利用合并后的貼圖(圖1中紋理C)中的右半部分來表示圖2(a),即為本文所指的重復(fù)紋理坐標表示。
當(dāng)紋理坐標超出[0,1],即產(chǎn)生紋理重復(fù)時,現(xiàn)有三維引擎(如Direct3D和OpenGL等)都是對整張紋理進行重復(fù),而不會對紋理中的部分內(nèi)容進行重復(fù),即,利用圖1中紋理C的右半部分,重復(fù)2次來表示圖2(a),僅修改紋理坐標是不可行的,原因是引擎限制,不存在一個正確的紋理坐標實現(xiàn)紋理中部分內(nèi)容的重復(fù)。若按公式(1)進行處理,得到的結(jié)果如圖2(b)所示,與圖2 (a)不同。因此,本文提出以下幾種方法進行修正。
圖2 紋理重復(fù)表示法
對于紋理坐標超出[0,1]的重復(fù)紋理,通過以下方式,將紋理坐標修正到[0,1],進一步按公式(1)或其他方式計算出采用新紋理后的紋理坐標,進而實現(xiàn)重復(fù)紋理合并。
3.1剖分模型法
剖分模型法是將模型按紋理坐標的重復(fù)次數(shù)進行剖分,保證紋理坐標的取值范圍在[0,1]之間,如圖3所示。矩形面重復(fù)了3次紋理單元,剖分模型法將矩形面按紋理坐標分成三部分,每部分分別進行一次紋理貼圖。
圖3 剖分前后的模型紋理坐標
具體方法包括手工和計算機處理。將合并前模型進行剖分后,在剖分面手工重復(fù)貼圖即可。計算機處理則是根據(jù)重復(fù)紋理坐標對模型進行自動剖分,并采用式(1)進行坐標處理,達到紋理合并的目的。
3.2合并重復(fù)貼圖
該方法是不改變模型幾何結(jié)構(gòu),在圖片合并時,先將使用的重復(fù)紋理貼圖進行合并后,再進一步與其他圖片進行合并,如圖4所示。
圖4 合并重復(fù)貼圖后貼圖
利用手工制作重復(fù)合并后的圖,需要耗費較大的人工,增加了紋理合并的難度,因而在實際生產(chǎn)中運用較少,下文的RTT方法與該方法類似。
3.3RTT(Render to Texture)
RTT,即渲染至紋理技術(shù)。與合并重復(fù)貼圖方法不同在于,前者是合并原始使用的紋理貼圖,而RTT是計算出模型的每個幾何面的紋理,然后通過排列算法,得到最終合并貼圖。利用RTT技術(shù)合并紋理[8]有兩個優(yōu)點,一是程序自動處理,二是可將光照信息也同時渲染到貼圖中去,整個模型只有一張紋理,此時模型紋理坐標范圍為[0,1]。
使用RTT技術(shù),通常產(chǎn)生一張合并的貼圖。由于該圖尺寸固定,會存在模型紋理分辨率較低的問題,而為了不損失原紋理的分辨率,則需要渲染出更大尺度的貼圖,如4096?4096。當(dāng)三維場景中出現(xiàn)大量大尺寸貼圖時,又會出現(xiàn)加載卡頓等問題。因此在模型制作階段,需要限制單個模型的表面積和,保證有限的出圖尺寸下,獲得一定的模型紋理分辨率。
對一個原始模型(如圖5所示,一棟20層建筑,重復(fù)貼圖20次),分別按剖分模型法和RTT方法進行比較(合并重復(fù)貼圖方法與RTT方法從一定程度上說是類似的,此處僅采用RTT方法)。合并前模型的紋理為0.05 m,剖分模型法與RTT方法的模型紋理分辨率為0.05 m和0.07 m,保證了模型外觀效果,圖5是不同方法對應(yīng)的幾何模型與合并后紋理的效果。
進一步的,為模擬現(xiàn)實場景,便于比較不同方法的優(yōu)劣,需要一定的數(shù)據(jù)規(guī)模。通過重命名模型名以及紋理名,設(shè)定每個模型與紋理不相同,同時設(shè)定模型和紋理不被共享(若共享為一個實例,失去數(shù)據(jù)規(guī)模的意義,與本實驗?zāi)康牟幌喾?,通過平移,得到20?20格網(wǎng)下,共400棟建筑。
實驗平臺采用重慶市勘測院自主研發(fā)的集景三維數(shù)字城市平臺,使用計算機處理器為Intel(R) Core (TM)2 Duo CPU E8400.3.00GHZ,顯卡為NVIDIA Ge-Force GTX 285,內(nèi)存2GB進行測試,采用動態(tài)加載方式,實驗場景如圖6所示。
圖5 不同方法對應(yīng)的幾何模型與合并后紋理
圖6 實驗場景
在保證加載方式相同的情況下,得到實驗結(jié)果如表1所示。
實驗結(jié)果 表1
可得出以下結(jié)論:
(1)合并紋理后的數(shù)據(jù)總量變大,特別是RTT方法,是合并前的6倍,主要是存在重復(fù)紋理,每個模型都被20次重復(fù)貼圖,同時畫布的留白也導(dǎo)致數(shù)據(jù)量上升,具體如圖4所示。
(2)合并紋理后的場景幀率得到了提高。加載完場景模型后,兩種方法的幀率都提高到60幀,證明了減少紋理個數(shù)對提高場景渲染效率的有效性,特別是剖分模型法,在加載時間、加載過程中以及加載完成后的幀率都獲得了提升。
(3)RTT方法在模型加載過程的幀率降低,且加載時間長的原因是由于數(shù)據(jù)量增加導(dǎo)致了系統(tǒng)IO消耗,影響了場景加載效率。
與剖分模型法相比,RTT技術(shù)由計算機自動完成,極大減少人工作量,應(yīng)在實際生產(chǎn)中優(yōu)先采用。在實際環(huán)境中,如上述實驗中所展現(xiàn)的高重復(fù)貼圖率較少,同時,由于數(shù)碼相機獲取的紋理清晰度很高,在應(yīng)用中并不需要如此高的紋理分辨率,一般達到0.1 m以上即能滿足應(yīng)用需求,從而使得在RTT過程中可減小合并后的紋理尺寸,達到減小總數(shù)據(jù)量的目的。因此,本文進一步開展了在實際三維大場景中,利用RTT技術(shù)合并重復(fù)貼圖實驗。
數(shù)據(jù)來源為重慶某場景的三維城市模型,范圍為2.2 km2。合并前每個模型平均使用約5張紋理,合并后為1張紋理。合并前后的模型紋理分辨率都不低于0.1 m。實驗的加載場景如圖7所示,結(jié)果如表2所示,經(jīng)測試,發(fā)現(xiàn)合并前后的渲染狀態(tài)數(shù)從4 926降低到930個,加載當(dāng)前場景的時間從38 s縮短到13 s,幀率從14幀提高到30幀。
實驗結(jié)果 表2
圖7 三維大場景中使用紋理合并方法
本文研究了重復(fù)紋理的合并原理,給出了三種重復(fù)紋理的合并方法,開展了紋理合并實驗,驗證了合并紋理對于提升場景幀率的有效性。此外,在紋理合并方法的選擇和應(yīng)用上,還需進一步考慮:
對于城市級的三維模型,數(shù)據(jù)的集成量通常達到上百GB,紋理的數(shù)據(jù)量通常占到70%以上,因此在自動化的算法選擇上,需要考慮到算法的效率;
在紋理更新方面,由于紋理的合并,在需要更新未合并前的某個小紋理時,需要同步更新合并后的大紋理,更新復(fù)雜度增加。
最后,合并紋理的方式是提高三維場景加載和渲染效率的方法之一,還可以從模型的LOD建立、場景的調(diào)度組織等方面提高三維場景的加載效率。
參考文獻
[1] 馮琰,郭容寰,汪旻琦等.三維城市模型數(shù)據(jù)組織與管理方法研究[J].測繪科學(xué),2011,36(1):215~217.
[2] 宋歌,楊紅雨.基于紋理集的大規(guī)模場景模型優(yōu)化算法[J].計算機工程與設(shè)計,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] 戴雪峰,熊漢江,龔健雅.一種三維城市模型多紋理自動合并方法[J].武漢大學(xué)學(xué)報·信息科學(xué)版,2015,40 (3):347~353.
[7] 杜志強,羅盼,朱曉玲等.基于超面的建筑物紋理優(yōu)化處理方法[J].武漢大學(xué)學(xué)報·信息科學(xué)版,2014,39(12): 1401~1406.
[8] 李芳.3ds max6標準教材[M].北京:中國電力出版社, 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
文章編號:1672-8262(2015)06-17-04中圖分類號:P208.1
文獻標識碼:A
收稿日期:?2015—07—22
作者簡介:詹勇(1987—),男,工程師,碩士,主要從事三維地理信息系統(tǒng)原理及應(yīng)用研究工作。
基金項目:重慶市應(yīng)用開發(fā)計劃項目(cstc2014yykfB40004)