程良勇,李南江
(1. 天津市勘察院,天津 300191; 2. 星際空間(天津)科技發(fā)展有限公司,天津 300384)
三維數(shù)字城市通過(guò)虛擬現(xiàn)實(shí)技術(shù)和地理信息技術(shù)精確表達(dá)城市空間形態(tài)、布局、色彩、天際輪廓等重要信息,利用其強(qiáng)大的空間數(shù)據(jù)組織、管理與空間分析能力為用戶提供信息查詢、空間分析、信息統(tǒng)計(jì)、數(shù)據(jù)挖掘等功能技術(shù)服務(wù)。隨著計(jì)算機(jī)技術(shù)和網(wǎng)絡(luò)通信技術(shù)的不斷成熟與發(fā)展,以及各專業(yè)領(lǐng)域業(yè)務(wù)需求的提升,三維數(shù)字城市逐漸從單機(jī)走向了網(wǎng)絡(luò)Web前端。由于其空間數(shù)據(jù)庫(kù)的海量特性,以及計(jì)算機(jī)存儲(chǔ)、網(wǎng)絡(luò)帶寬等硬件資源限制,需要從軟件、數(shù)據(jù)庫(kù)層次突破技術(shù)瓶頸來(lái)解決此問題。
近年來(lái),三維數(shù)字城市建設(shè)發(fā)展迅速,但由于受硬件的限制,海量高精度模型的大范圍應(yīng)用一直是網(wǎng)絡(luò)三維數(shù)字城市應(yīng)用的一個(gè)瓶頸。LOD是解決三維高精細(xì)模型數(shù)據(jù)瀏覽和應(yīng)用的基本方法,如何自動(dòng)構(gòu)建低級(jí)別的LOD模型,是LOD模型庫(kù)構(gòu)建的關(guān)鍵。模型結(jié)構(gòu)的簡(jiǎn)化算法比較成熟,已有算法基本思路是重構(gòu)模型的三角面,但模型面重構(gòu)會(huì)引起模型紋理坐標(biāo)的變化,導(dǎo)致紋理錯(cuò)亂,因此,已有算法難以真正應(yīng)用于貼附紋理的三維數(shù)字城市模型中。目前,國(guó)內(nèi)外比較知名的軟件如Skyline、CityMaker等,僅對(duì)模型的紋理進(jìn)行自動(dòng)壓縮生成低級(jí)別的LOD紋理,并沒有減少模型的三角面數(shù),導(dǎo)致海量數(shù)據(jù)量減少有限。
本文提出三維模型自適應(yīng)面刪除簡(jiǎn)化法和地形單面片生成法相結(jié)合的技術(shù)路線實(shí)現(xiàn)高精度三維模型面簡(jiǎn)化LOD模型庫(kù)的自動(dòng)建庫(kù),模型和紋理同時(shí)進(jìn)行簡(jiǎn)化和壓縮,在同等三維數(shù)字城市場(chǎng)景效果前提條件下,最大程度地節(jié)省計(jì)算機(jī)硬件資源,可解決海量三維數(shù)字城市高精度模型網(wǎng)絡(luò)大范圍瀏覽和應(yīng)用問題。本文優(yōu)化后的三維模型自適應(yīng)面刪除簡(jiǎn)化法可以根據(jù)設(shè)置條件自動(dòng)計(jì)算域值并刪除三角面,同時(shí)由于沒有對(duì)模型結(jié)構(gòu)重構(gòu),紋理不會(huì)發(fā)生錯(cuò)亂,可以自動(dòng)生成模型面簡(jiǎn)化的可用LOD模型庫(kù)。同時(shí),采用構(gòu)建單面片模型生成法自動(dòng)構(gòu)建最低級(jí)別地形LOD模型庫(kù)。該方法是將地形場(chǎng)景通過(guò)分塊、正視截圖并自動(dòng)生成單面片模型,可將數(shù)十萬(wàn)面的地形模型直接生成只有一個(gè)四邊形的單面片模型,在保證視覺效果的同時(shí),大幅度減少地形模型的三角面和紋理數(shù)量[1-4]。
模型自適應(yīng)面刪除簡(jiǎn)化算法根據(jù)LOD模型不同級(jí)別的要求,設(shè)定簡(jiǎn)化條件并自動(dòng)計(jì)算域值,降低級(jí)別模型,進(jìn)行自動(dòng)簡(jiǎn)化。算法流程如圖1所示[5-11]。
詳細(xì)流程步驟如下:
(1) 讀取模型點(diǎn)信息。遍歷讀取模型的所有頂點(diǎn),將頂點(diǎn)按次序存儲(chǔ)于隊(duì)列中,同時(shí)按照頂點(diǎn)數(shù)據(jù)和屬性一一對(duì)應(yīng)的關(guān)系,將法線坐標(biāo)、紋理坐標(biāo)、顏色坐標(biāo)也按次序存儲(chǔ)于隊(duì)列中。
(2) 根據(jù)模型自身特點(diǎn)自適應(yīng)計(jì)算刪除條件。
(3) 逐一獲取每個(gè)頂點(diǎn),判斷每個(gè)頂點(diǎn)的類型,判斷準(zhǔn)則是依據(jù)該頂點(diǎn)與相鄰頂點(diǎn)、該頂點(diǎn)與鄰邊之間的空間關(guān)系,計(jì)算頂點(diǎn)類型和影響代價(jià)值,判斷是否刪除。
(4) 從代價(jià)值小的頂點(diǎn)及對(duì)應(yīng)的屬性數(shù)據(jù)開始刪除,并重新計(jì)算相鄰頂點(diǎn)的類型和代價(jià)值,直至沒有符合條件的頂點(diǎn)可以刪除[12]。
定義:特征邊是指共享該邊的兩個(gè)三角形法線之間的夾角大于特征角的邊。
由于模型的每一個(gè)頂點(diǎn)刪除后對(duì)模型的影響不同,本文定義頂點(diǎn)對(duì)模型的影響代價(jià)值為α,α代表該點(diǎn)刪除后對(duì)模型影響程度的大小。在刪除模型頂點(diǎn)時(shí),優(yōu)先刪除影響代價(jià)值較小的點(diǎn),具體過(guò)程如下:
(1) 普通頂點(diǎn)影響代價(jià)值計(jì)算方法[13-15]。普通頂點(diǎn)是指不在特征邊的頂點(diǎn),如圖2中A點(diǎn)。該點(diǎn)所在的面起伏不大,接近為平面,定義該頂點(diǎn)到接近平面的平均平面的距離d為刪除后對(duì)模型的影響代價(jià)值α。平均平面為這些相鄰三角面所有法線的平均法線方向?qū)?yīng)的面。
假設(shè)頂點(diǎn)為O(x,y,z),求出的平均平面P的法線為normal(xn,yn,zn),該面上某點(diǎn)為point(xp,yp,zp),則當(dāng)前點(diǎn)O的影響代價(jià)值α即為當(dāng)前點(diǎn)到P的距離d,計(jì)算方法如下
(1)
(2)
d=|xn×(x-xp)+yn×(y-yp)+zn×(z-zp)|
(3)
式中,count為當(dāng)前點(diǎn)O相鄰三角形的個(gè)數(shù);TNi為當(dāng)前點(diǎn)O相鄰的第i個(gè)三角形的法線向量;CPi為當(dāng)前點(diǎn)O相鄰的第i個(gè)三角形的中心點(diǎn)坐標(biāo);TAi為當(dāng)前點(diǎn)O相鄰的第i個(gè)三角形的面積。
(2) 特征點(diǎn)影響代價(jià)值計(jì)算方法。特征點(diǎn)是指邊線點(diǎn)和角點(diǎn),如圖3所示。
該頂點(diǎn)到該頂點(diǎn)被刪除后所形成的新邊的距離d為刪除后對(duì)模型的影響代價(jià)值α。當(dāng)前點(diǎn)O(x,y,z)的相鄰兩邊點(diǎn)分別為A(x0,y0,z0)、B(x1,y1,z1),則O的影響代價(jià)值α即為點(diǎn)O到空間直線AB的距離d,計(jì)算方法如下
(4)
式中
(5)
(6)
(7)
m=-ax0-by0-cz0
本文刪除法中需計(jì)算出模型所有頂點(diǎn)的影響代價(jià)值α,并按照升序排序存儲(chǔ)到列表Array中。
(3) LOD各級(jí)模型頂點(diǎn)刪除自適應(yīng)閾值計(jì)算[16-17]。經(jīng)過(guò)大量模型面刪除模型簡(jiǎn)化試驗(yàn),推導(dǎo)出本文模型面刪除簡(jiǎn)化方法效果最佳的頂點(diǎn)刪除閾值自適應(yīng)的計(jì)算方法
(8)
式中,P為模型的面刪除簡(jiǎn)化比例(即需要?jiǎng)h除的面占總面數(shù)的百分比);Lmax為L(zhǎng)OD模型庫(kù)構(gòu)建的最大層級(jí)數(shù),本文Lmax=4,即建筑模型共分為4個(gè)層級(jí);L為當(dāng)前需要簡(jiǎn)化的LOD的層級(jí);Fn為當(dāng)前簡(jiǎn)化模型的總面數(shù),最大值不超過(guò)100萬(wàn)。
根據(jù)模型的面刪除比例P計(jì)算模型的刪除閾值為
α=Array(CArray×P)
(9)
式中,α為模型頂點(diǎn)刪除的自適應(yīng)閾值;Array為上文中提到的模型頂點(diǎn)影響代價(jià)值α按照升序排列生成的列表;CArray為Array列表的元素總數(shù)目,即模型頂點(diǎn)數(shù)目。
針對(duì)地塊的特點(diǎn),本文提出了模型快照的方法,將復(fù)雜的模型地塊模型生成單紋理單面片模型。具體為采用視點(diǎn)定位截圖對(duì)完整的地塊地形模型自動(dòng)進(jìn)行定位定范圍截圖,生成地塊地形模型的正視圖片,將正視圖片自動(dòng)制作成單面片的圖片地形模型。由于經(jīng)正射投影的物體具有大小尺寸不變的效果特點(diǎn),因此生成正視圖片時(shí)采用正射投影,即將標(biāo)準(zhǔn)分塊的模型數(shù)據(jù)的世界坐標(biāo)通過(guò)視點(diǎn)變換、投影變換和視口變換等系統(tǒng)矩陣投影變換操作最終正射投影到二維屏幕窗口。
(1) 視點(diǎn)變換。將模型的實(shí)際坐標(biāo)值(x0,y0,z0)經(jīng)過(guò)視點(diǎn)矩陣變換視點(diǎn)坐標(biāo)系下的坐標(biāo)值(x1,y1,z1),即
(10)
式中,描述攝像機(jī)向右的方向向量(rx,ry,rz)=(1,0,0);描述攝像機(jī)向前的方向向量(lx,ly,lz)=(0,0,-1);描述攝像機(jī)垂直向上的方向向量(ux,uy,uz)=(0,1,0);攝像機(jī)的位置向量為(px,py,pz)。
(2) 正射投影變換。視點(diǎn)攝像機(jī)的正射投影矩陣相當(dāng)于設(shè)置了一個(gè)正射的長(zhǎng)方體正射投影,通過(guò)投影變換將場(chǎng)景對(duì)象投影到投影體的鏡頭平面上,假設(shè)得到的投影坐標(biāo)為(x2,y2,z2),即
(11)
其中,正射投影視域體是包含被投影物體的長(zhǎng)方形體,它由兩對(duì)三維坐標(biāo)點(diǎn)進(jìn)行描述,即(l,b,n)→(r,t,f)。
(3) 視口變換。經(jīng)過(guò)視口矩陣變換,將投影坐標(biāo)(x2,y2,z2)最終投影為二維屏幕窗口坐標(biāo)(x3,y3,z3),即
(12)
視口矩陣主要是由視口的范圍決定的,設(shè)視口的起點(diǎn)為(xv,yv),寬和高分別為w和h,視域體的遠(yuǎn)近裁減面的z值分別為f和n,x軸向右為正,y軸向下為正。
(4) 單面片模型定點(diǎn)定位快照截圖生成單面片模型原理。通過(guò)上述的模型正射投影到屏幕窗口的方法將場(chǎng)景模型正射、完整地投影到給定的二維窗口上,同時(shí)利用相機(jī)截圖的方法,將模型在二維窗口上的投影生成二維圖片,將圖片自動(dòng)進(jìn)行壓縮處理,并由程序自動(dòng)構(gòu)建單面片的場(chǎng)景模型。
得到模型在場(chǎng)景中投影的正視紋理圖片后,利用程序生成單面片模型,并將紋理貼圖,生成最終的單面片地塊場(chǎng)景模型。單塊地塊模型運(yùn)用單面片自動(dòng)生成法后的前后效果對(duì)比如圖4所示,(a)為簡(jiǎn)化前的地塊三維模型,面數(shù)為6.2萬(wàn),(b)為生成的單面片地塊模型。
本文將自適應(yīng)面刪除簡(jiǎn)化法和地形單面片生成法應(yīng)用于天津市網(wǎng)絡(luò)三維數(shù)字城市項(xiàng)目試驗(yàn),采用具有面簡(jiǎn)化效果的LOD模型庫(kù)來(lái)實(shí)現(xiàn)高精度海量數(shù)據(jù)的Web瀏覽與應(yīng)用問題。
本文將建筑模型分為L(zhǎng)0、L1、L2、L3四級(jí),采用自適應(yīng)面刪除簡(jiǎn)化法計(jì)算所有頂點(diǎn)對(duì)模型的影響。根據(jù)硬件的配置條件和經(jīng)驗(yàn)值計(jì)算出系統(tǒng)能夠流暢運(yùn)行的總面數(shù),根據(jù)該面數(shù)確定模型LOD庫(kù)各級(jí)別的簡(jiǎn)化參數(shù)。簡(jiǎn)化參數(shù)對(duì)不同面數(shù)的模型設(shè)置不同的簡(jiǎn)化域值,然后對(duì)模型進(jìn)行自動(dòng)面簡(jiǎn)化處理。
本文在以上簡(jiǎn)化參數(shù)的基礎(chǔ)上進(jìn)行簡(jiǎn)化處理,效果比較如圖5所示。其中(a)為簡(jiǎn)化前數(shù)據(jù),(b)為本文方法簡(jiǎn)化后的數(shù)據(jù),在滿足視覺效果和應(yīng)用需求的同時(shí),場(chǎng)景中建筑模型的面數(shù)明顯減少。簡(jiǎn)化前后效果對(duì)比見表1。
表1 建筑簡(jiǎn)化前后對(duì)比
采用地形單面片生成法來(lái)實(shí)現(xiàn)地塊模型的LOD模型庫(kù)生成,大范圍三維數(shù)字城市場(chǎng)景模型運(yùn)用單面片生成法前后效果對(duì)比如圖6所示。(a)為原始地形數(shù)據(jù),(b)為應(yīng)用單面片模型生成法后的地形數(shù)據(jù),簡(jiǎn)化前后效果對(duì)比見表2。
表2 地形簡(jiǎn)化前后對(duì)比
采用地形單面片生成法后,在保證視覺效果的同時(shí),極大地簡(jiǎn)化了高精細(xì)地形的三角面數(shù)和紋理數(shù)據(jù)量,解決了特大三維數(shù)字城市建設(shè)中高精細(xì)三維場(chǎng)景模型大范圍瀏覽與應(yīng)用的難題。
本文將面刪除簡(jiǎn)化法和單面片生成法應(yīng)用于天津市三維數(shù)字城市網(wǎng)絡(luò)三維系統(tǒng)的建設(shè),結(jié)合紋理壓縮技術(shù),結(jié)果如圖7所示。將原始每平方千米500 MB、200萬(wàn)面的數(shù)據(jù),最低級(jí)別LOD模型壓縮簡(jiǎn)化為每平方千米60 MB、40萬(wàn)面,滿足了三維數(shù)據(jù)在100 Mbps帶寬網(wǎng)絡(luò)環(huán)境下瀏覽和應(yīng)用的要求。
本文利用三維模型自適應(yīng)面刪除簡(jiǎn)化法和地形模型單面片生成法相結(jié)合實(shí)現(xiàn)了城市高精度三維模型自動(dòng)構(gòu)建LOD模型庫(kù),解決了目前只能手工生成面簡(jiǎn)化的LOD模型的窘境,有效解決了網(wǎng)絡(luò)海量高精度三維模型大范圍應(yīng)用問題。但是,本文提出的面刪除簡(jiǎn)化算法如果參數(shù)設(shè)置不當(dāng),可能導(dǎo)致有些模型存在明顯的面鏤空的現(xiàn)象,因此需要根據(jù)經(jīng)驗(yàn)和模型數(shù)據(jù)的實(shí)際情況制定相應(yīng)的自適應(yīng)簡(jiǎn)化系數(shù)方案。下一步將進(jìn)一步改進(jìn)面刪除簡(jiǎn)化算法和地塊單面片生成法,并將其推廣應(yīng)用到更大的范圍和更復(fù)雜地形的三維數(shù)字城市系統(tǒng)建設(shè)和應(yīng)用中。