熊 英
(廣東華南水電高新技術(shù)開發(fā)有限公司,廣東 廣州 510611)
隨著技術(shù)的發(fā)展和用戶需求的提高,三維GIS逐漸受到越來(lái)越多學(xué)者的關(guān)注。同時(shí),無(wú)人機(jī)的應(yīng)用開始越來(lái)越大眾化,使大范圍三維模型的生成變得更加容易,這也進(jìn)一步地促進(jìn)了三維GIS的廣泛應(yīng)用[1]。為了推進(jìn)三維GIS的快速發(fā)展,許多學(xué)者、從業(yè)者做了相關(guān)方面的研究工作。吳風(fēng)華、張亞寧[2]在基于SuperMap iServer 6R和3ds Max建設(shè)的二三維一體化系統(tǒng)中,為了解決三維數(shù)據(jù)量大、運(yùn)行緩慢的問題,將3DS 模型轉(zhuǎn)換為 SuperMap 提供的一種三維模型存儲(chǔ)格式(SGM 格式)進(jìn)行加載,在一定程度上提高了模型的加載速度和顯示效果。陳鵬等[3]通過Skyline 與SuperMap6R分別構(gòu)建了二三維一體化系統(tǒng),并對(duì)其性能、效果等進(jìn)行對(duì)比。其中,Skyline性能顯著較優(yōu),因?yàn)槠湓谌S場(chǎng)景優(yōu)化上采用了比較先進(jìn)的LOD 技術(shù),地形地貌數(shù)據(jù)采用金字塔分級(jí)技術(shù),顯示效率基本可以達(dá)到與數(shù)據(jù)量無(wú)關(guān)、模型顯示上采用了4 級(jí)LOD 分級(jí)顯示,同時(shí)通過視場(chǎng)靈活調(diào)度模型的顯示和剔除。曹晶等人[4]使用了一款Terra Vista軟件進(jìn)行三維建模,并采用開源庫(kù)OSG實(shí)現(xiàn)三維地圖的漫游,實(shí)現(xiàn)了大范圍城市三維系統(tǒng)的快速建模及流暢漫游。但OSG僅對(duì)地形及地表影像提供LOD支持,對(duì)模型不支持。王子啟等[5]通過Skyline構(gòu)建了具有紋理金字塔的xpl2 格式模型。它是一組在貼圖上進(jìn)行層次細(xì)節(jié)分級(jí)顯示的模型金字塔格式,顯示時(shí)可以根據(jù)視距遠(yuǎn)近控制顯示紋理精細(xì)度,從而有效地降低系統(tǒng)內(nèi)存占用率,減少系統(tǒng)啟動(dòng)時(shí)間,提高可視范圍內(nèi)模型的讀取速度。李俊金[6]對(duì) Cesium與無(wú)人機(jī)傾斜攝影技術(shù)結(jié)合應(yīng)用在三維城市建模進(jìn)行了初步探討。朱栩逸、苗放[7]討論了Cesium框架與Cesium下地形數(shù)據(jù)處理方法,提出了利用Cesium搭建開源三維GIS方案,并實(shí)現(xiàn)了Web GIS系統(tǒng)中的部分基本功能,并未對(duì)三維模型部分進(jìn)行研究。任宏康等[8]利用HTML5 與WebGL 第三方類庫(kù)Three.js 技術(shù),基于瓦片信息對(duì)真實(shí)三維地形進(jìn)行了設(shè)計(jì)與實(shí)現(xiàn),并采用Three.js提供的接口功能創(chuàng)建組織了4 層LOD 模型。Three.js作為一套經(jīng)常與Cesium.js相提并論的開源三維客戶端技術(shù),也不失為一套行之有效并具備開放、免插件、跨平臺(tái)等優(yōu)點(diǎn)的3DWebGIS 方案。
綜合以上研究成果可見,三維GIS方面軟件工具眾多,有功能齊備、操作簡(jiǎn)便的商業(yè)化軟件,如Skyline、SuperMap等,也有接口豐富、擴(kuò)展性強(qiáng)的開源庫(kù),如Cesium.js、Three.js、OSG等。在三維地形建模方面研究成果較多,技術(shù)也較為成熟,大部分均能提供三維地形的LOD能力。但在三維模型的LOD研究方面成果明顯較少,尤其是在開源庫(kù)、WebGL等基礎(chǔ)上的三維模型分級(jí)加載研究。本文通過在該方面的探索性研究和應(yīng)用為廣大學(xué)者、從業(yè)者在技術(shù)選型與比較等方面提供了借鑒和參考。
a) OpenGL等相關(guān)技術(shù)。OpenGL為用于渲染2D、3D矢量圖形的跨語(yǔ)言、跨平臺(tái)的應(yīng)用程序編程接口(API)[9]。OpenGL ES(OpenGL for Embedded Systems)則為OpenGL的子集,針對(duì)手機(jī)、PDA和游戲主機(jī)等嵌入式設(shè)備而設(shè)計(jì)[10]。WebGL是一項(xiàng)利用JavaScript API渲染交互式3D電腦圖形和2D圖形的技術(shù),可兼容任何的網(wǎng)頁(yè)瀏覽器,無(wú)需加裝插件。通過WebGL的技術(shù),只需要編寫網(wǎng)頁(yè)代碼即可實(shí)現(xiàn)3D圖像的展示。WebGL的規(guī)格尚在發(fā)展中,由非營(yíng)利的Khronos Group管理。
b) Cesium技術(shù)[11]。Cesium是一個(gè)基于JavaScript編寫的使用WebGL的地圖引擎,一款開源3D GIS的javascript庫(kù)。Cesium支持3D、2D、2.5D形式的地圖展示,可以自行繪制圖形,高亮區(qū)域,并提供良好的觸摸支持,且支持絕大多數(shù)的瀏覽器和mobile。但是由于Cesium基于WebGL來(lái)渲染3D的,所以瀏覽器必須支持WebGL才可以運(yùn)行。
c) 3D Tiles技術(shù)[12]。Cesium團(tuán)隊(duì)2016年推出的數(shù)據(jù)規(guī)范,在glTF基礎(chǔ)上提供了LOD能力,定位是Web環(huán)境下海量三維模型數(shù)據(jù)的加載。該規(guī)范于2016年9月30日已開始了OGC標(biāo)準(zhǔn)化進(jìn)程,在將來(lái)的三維模型數(shù)據(jù)加載中將占領(lǐng)重要的地位。
本文研究的整體技術(shù)路線見圖1。通過三維建模軟件構(gòu)建得到的模型一般為.dae格式,為了在網(wǎng)絡(luò)上進(jìn)行傳輸進(jìn)而支撐信息化應(yīng)用,需要通過轉(zhuǎn)換工具[13]轉(zhuǎn)換為glTF格式。glTF(GL Transmission Format)是專為3D模型的網(wǎng)絡(luò)傳輸而設(shè)計(jì)的格式。它的核心是一個(gè)JSON文件,通過該文件描述了三維模型的結(jié)構(gòu)、組成等。JSON文件中的一級(jí)節(jié)點(diǎn)包括scenes、nodes、cameras、animations、meshes、textures、images、samplers、buffers、bufferViewers、accessors、materials、techniques、programs、shaders、skins。其中,scenes、nodes、cameras、animations描述了模型整個(gè)場(chǎng)景的結(jié)構(gòu);meshes、textures、images、samplers則主要用來(lái)描述場(chǎng)景中的三維物體,如節(jié)點(diǎn)、紋理等;buffers、bufferViewers、accessors則是核心數(shù)據(jù),buffers中存儲(chǔ)了所有的二進(jìn)制數(shù)據(jù),bufferViewers、accessors均建立在buffers基礎(chǔ)上;materials、techniques、programs、shaders則屬于OpenGL中的概念,通過它們完成對(duì)三維模型的渲染。
圖1 技術(shù)路線
一般標(biāo)準(zhǔn)的glTF是文本格式,在對(duì)二進(jìn)制數(shù)據(jù)的處理上一般有2種做法:一是把二進(jìn)制文件(包括紋理圖片、buffer數(shù)據(jù)等)獨(dú)立出來(lái),這樣會(huì)很大幅度地降低glTF文件大小,但在網(wǎng)絡(luò)傳輸過程中,則需要額外地加載二進(jìn)制文件,增加網(wǎng)絡(luò)資源消耗,降低加載速度,該方法處理得到的.gltf格式模型文件見表1;二是把二進(jìn)制部分按照base64編碼后以data URI的形式嵌入在glTF文件中,該方會(huì)極大幅度地增加文件大小,且需要額外的客戶端解碼。
表1 .gltf格式模型文件
為了克服這些不足,.glb格式應(yīng)運(yùn)而生[14]。它將JSON文件與二進(jìn)制數(shù)據(jù)進(jìn)行融合,具體由文件頭、場(chǎng)景描述JSON和二進(jìn)制數(shù)據(jù)所組成,見圖2。
圖2 .glb格式模型規(guī)范
該.glb文件基本包括了所有buffer數(shù)據(jù)和紋理圖片,且文件較小,結(jié)構(gòu)簡(jiǎn)單清晰,使用起來(lái)更為方便。它是后面3D Tiles格式的重要基礎(chǔ)。
以上僅是整個(gè)模型的加載,并不具備LOD的能力。3D Tiles賦予了glTF分級(jí)加載的能力。它將二維地圖中金字塔的概念引入三維領(lǐng)域,特別適用于海量三維模型的加載。圖3中是官方給出的New York City三維模型實(shí)例??梢?,比例尺較小的時(shí)候,僅是一些地標(biāo)性的建筑得到加載,隨著地圖的放大,越來(lái)越多的模型得到展示。
截至目前,3D Tiles提供的僅是一套規(guī)范,但Cesium.js已具備了3D Tiles的支撐能力。按照這套規(guī)范對(duì)模型進(jìn)行預(yù)處理,處理成的模型金字塔則可直接在Cesium中以Cesium 3D Tileset的類型來(lái)完成加載[15]。
a)小比例尺 b)中比例尺 c)大比例尺圖3 New York City模型分級(jí)加載效果
根據(jù)使用場(chǎng)景的不同,3D Tiles提出了Batched 3D Model(.b3dm)、Instanced 3D Model(.i3dm)、Point Cloud、Composite等不同類型的格式,其中,前兩者使用較多。Batched多使用于建筑,Instanced則適用于有多個(gè)重復(fù)對(duì)象的情況,如樹木等。與.glb類似,.b3dm和.i3dm也是由固定格式的文件頭、json和二進(jìn)制文件組成,見圖4—5。
圖4 .b3dm模型文件規(guī)范
按照這些瓦片格式規(guī)范整理出的模型金字塔,便可在Cesium中進(jìn)行載入,從而實(shí)現(xiàn)了三維模型的分級(jí)加載。瓦片格式規(guī)范見表2。
表2 瓦片格式規(guī)范
根據(jù)上文的技術(shù)路線展開實(shí)驗(yàn),以無(wú)人機(jī)拍攝的覆蓋大約7 km2的廣州開發(fā)區(qū)玉樹工業(yè)園為例,進(jìn)行三維自動(dòng)化建模,并對(duì)建模結(jié)果進(jìn)行處理和轉(zhuǎn)換,最終按照3D Tiles數(shù)據(jù)規(guī)范生成模型瓦片金字塔,并在WebGIS系統(tǒng)中進(jìn)行加載和展示,結(jié)果如下。
a) 三維模型的建模與切片。該步驟主要通過三維建模軟件Photo Scan完成自動(dòng)化建模,并生成不同級(jí)別的瓦片數(shù)據(jù)。
b) 模型瓦片的格式轉(zhuǎn)換。采用不同工具,按照.dae->.gltf->.glb->.b3dm的流程對(duì)模型瓦片分別進(jìn)行轉(zhuǎn)換。
c) 模型瓦片結(jié)構(gòu)關(guān)系的建立。通過tileset.json文件,以內(nèi)嵌的形式記錄各級(jí)模型瓦片之間的結(jié)構(gòu)關(guān)系。目前tileset.json文件的生成需要計(jì)算多個(gè)bounding Volume、 transform,可編寫腳本工具實(shí)現(xiàn)json文件中子節(jié)點(diǎn)的自動(dòng)添加和計(jì)算。
d) 模型金字塔的加載。按照該流程,對(duì)無(wú)人機(jī)航拍建模結(jié)果進(jìn)行處理,得到金字塔,見表3。在Cesium中通過簡(jiǎn)單的語(yǔ)句進(jìn)行加載,效果見圖6。
e) 實(shí)驗(yàn)結(jié)果。以筆者所使用的計(jì)算機(jī)進(jìn)行測(cè)試(處理器為AMD A6-3600 APU with Radeon HD Graphics 2.10 GHz,8 Gb內(nèi)存,WIN10 64位操作系統(tǒng),瀏覽器為Google Chrome 59.0.3071.115版本),如果在瀏覽器中直接加載原始模型(.glb格式大小約為115 M),則內(nèi)存占用接近3 Gb,模型加載時(shí)間約6.08 s(不含紋理渲染的耗費(fèi)時(shí)間),加載后整個(gè)地圖的拖動(dòng)舉步維艱,嚴(yán)重地制約了三維WebGIS的推廣和應(yīng)用。將該模型處理成瓦片后再進(jìn)行加載,第1級(jí)含1個(gè)瓦片,第2級(jí)為4個(gè),第3級(jí)為14個(gè),每個(gè)瓦片大小最大不超過300 kb,加載時(shí)間均在5 ms以內(nèi)。后面的級(jí)別雖然會(huì)呈指數(shù)級(jí)增長(zhǎng),但根據(jù)視錐體和水平裁剪等算法,僅位于當(dāng)前視線范圍內(nèi)的瓦片才會(huì)進(jìn)行加載,因此即使在大比例尺下也不會(huì)帶來(lái)性能瓶頸。整個(gè)模型加載以后地圖拖動(dòng)靈活自如,極大地提升了用戶體驗(yàn)。該實(shí)驗(yàn)結(jié)果有力證明了3D Tiles在提升WebGIS中三維模型加載效率的有效性。
表3 模型金字塔
a)第1級(jí) b)第2級(jí) c)第3級(jí)圖6 分級(jí)加載效果
隨著近年來(lái)水利信息化的大力發(fā)展,各項(xiàng)水利業(yè)務(wù)對(duì)三維場(chǎng)景的構(gòu)建提出了越來(lái)越多的應(yīng)用需求,但無(wú)論是自動(dòng)化的實(shí)景三維建模還是手工的精細(xì)化三維建模,得到的模型往往數(shù)據(jù)量較大。為了推廣三維場(chǎng)景的使用,三維模型的高效加載是一個(gè)亟需解決的瓶頸。在此背景下,本文提出了一套基于Cesium.js和3D Tiles技術(shù)的三維模型分級(jí)加載機(jī)制。基于該機(jī)制,以無(wú)人機(jī)拍攝建模結(jié)果為實(shí)例,預(yù)先構(gòu)建了三維模型金字塔,并在瀏覽器中對(duì)金字塔模型進(jìn)行分級(jí)分塊地加載,優(yōu)化了三維模型的展示效果和加載效率,克服了三維WebGIS的性能瓶頸。該實(shí)驗(yàn)結(jié)果有力證明了3D Tiles在提升WebGIS中三維模型加載效率的有效性,從而可為水利場(chǎng)景的構(gòu)建和信息化推廣提供一定的借鑒。