孫守清 陳宜金 陳俊美
(中國礦業(yè)大學(xué)(北京) 地球科學(xué)與測繪工程學(xué)院, 北京 100083)
隨著地理信息系統(tǒng)在各個(gè)領(lǐng)域的深入應(yīng)用,在真正意義上的三維空間來處理問題成為人們的迫切要求。得益于近些年來計(jì)算機(jī)技術(shù)、三維可視化技術(shù)和虛擬現(xiàn)實(shí)技術(shù)的迅猛發(fā)展,三維地理信息系統(tǒng)(Geographic Information System,GIS)的建立成為可能[1]。三維建模方法作為實(shí)現(xiàn)三維GIS的技術(shù)核心,是GIS領(lǐng)域一個(gè)重要的研究方向,是建立現(xiàn)實(shí)世界虛擬化三維場景模型的基礎(chǔ)。
傳統(tǒng)手工建模方法雖然創(chuàng)建的模型精細(xì)化程度高,展示效果好,但是建設(shè)周期長、效率低且缺乏可重用性[2]。如何利用現(xiàn)有數(shù)據(jù),降低數(shù)據(jù)獲取成本,提高模型構(gòu)建效率成為業(yè)界關(guān)心的熱點(diǎn)。由于城市建模軟件(CityEngine)能夠兼容CAD和GIS數(shù)據(jù)[3],且在批量、精細(xì)、快速建模中得到廣泛應(yīng)用[4-6],具有高度的復(fù)用性,適合于大場景的三維建模。本文將基于計(jì)算機(jī)生成的建筑模型(Computer Generated Architecture,CGA)規(guī)則的快速建模與基于草圖大師軟件(SketchUp)的傳統(tǒng)三維精細(xì)建模結(jié)合起來,充分利用現(xiàn)有的GIS數(shù)據(jù),對(duì)廣域大范圍的場景建模進(jìn)行實(shí)驗(yàn)分析,在保證一定精度的條件下,相較于傳統(tǒng)的手工建模大幅提高建模速率。
CityEngine的建模核心思想是首先定義規(guī)則,再通過反復(fù)的優(yōu)化設(shè)計(jì)和迭代創(chuàng)造出更多的細(xì)節(jié)以此來實(shí)現(xiàn)建模[7]。其能充分利用現(xiàn)有的GIS數(shù)據(jù),并且對(duì)于普通建筑物即非標(biāo)志性建筑物的批量化模型構(gòu)建具有得天獨(dú)厚的優(yōu)勢。這個(gè)優(yōu)勢是基于普通建筑物的編寫規(guī)則較為常規(guī),且大量的普通建筑的外觀及其內(nèi)部風(fēng)格基本雷同,因此一次的規(guī)則編寫就可以套用到多種類似建筑物上,節(jié)省大量的時(shí)間。但是對(duì)于標(biāo)志性建筑物的模型構(gòu)建,CityEngine的優(yōu)勢被大幅度地削弱。常用CGA函數(shù)及功能如表1所示。
表1 常用CGA函數(shù)及功能
SketchUp對(duì)于高精度、高仿真度的模型構(gòu)建具有獨(dú)特的優(yōu)勢,且其建模方法簡單便捷、上手速度快,具有龐大的模型數(shù)據(jù)庫。圖1展示了SketchUp建模的過程。
圖1 SketchUp建模過程示意圖
CityEngine和SketchUp的協(xié)同使用,使得三維場景建模能夠同時(shí)結(jié)合兩個(gè)軟件的優(yōu)點(diǎn),在保證建模工作速率的同時(shí),又在一定程度上提高了對(duì)于場景建模最重要的標(biāo)志性建筑模型構(gòu)建的精度,彌補(bǔ)了CGA規(guī)則的不足。
三維模型的構(gòu)建需要依賴數(shù)據(jù)和軟件的交互配合,各個(gè)步驟并不僅僅是承接關(guān)系,更多的是相互關(guān)聯(lián)、相互影響?;贑ityEngine和SketchUp的三維模型構(gòu)建流程如圖2所示。
圖2 三維模型構(gòu)建流程
建模數(shù)據(jù)的獲取主要指遙感影像數(shù)據(jù)的獲取、貼圖數(shù)據(jù)獲取和二維矢量數(shù)據(jù)的獲取三大部分,是決定建模效果的關(guān)鍵因素。
使用GoodyGIS獲取所要建模地區(qū)的高程數(shù)據(jù)和影像數(shù)據(jù),并根據(jù)需要選擇相應(yīng)坐標(biāo)系。獲取到的csv格式高程數(shù)據(jù)需要在ArcMap中轉(zhuǎn)換成相應(yīng)的tif格式灰度高程文件。
2.2.2貼圖數(shù)據(jù)獲取
貼圖數(shù)據(jù)的獲取對(duì)于后期的模型效果具有十分重要的作用,獲取最近的貼圖數(shù)據(jù)才能顯示最真實(shí)的模型外貌[8]。本文中貼圖數(shù)據(jù)均為實(shí)地拍攝所得,并在Photoshop中進(jìn)行圖像的裁剪和渲染等處理。
CGA規(guī)則建模需要先得到建模所在地區(qū)的矢量化文件,即建模地區(qū)的建筑物及其附屬物的點(diǎn)、線、面屬性。將建模區(qū)域的遙感影像導(dǎo)入ArcGIS中對(duì)其進(jìn)行配準(zhǔn)然后進(jìn)行矢量化操作[9],并對(duì)得到的二維矢量化數(shù)據(jù)進(jìn)行建筑物高度、樓層數(shù)和綠化帶等屬性的添加。
場景創(chuàng)建是三維建模的前期工作之一,包括地形的導(dǎo)入、道路規(guī)劃和基礎(chǔ)布局三個(gè)部分[7]。一般來說,在三維模型的生成與規(guī)劃過程中,地形數(shù)據(jù)與道路數(shù)據(jù)之間往往存在著不貼合或不夠完善的地方,需要對(duì)其進(jìn)行進(jìn)一步的修改與處理。
在完成場景的創(chuàng)建之后,需要對(duì)已創(chuàng)建的場景加載地形數(shù)據(jù),以增強(qiáng)場景的真實(shí)性和立體感,增強(qiáng)可視化效果[10]。
道路是場景創(chuàng)建的一個(gè)重要組成部分,就像身體的血管一樣,支撐著整個(gè)建模場景的運(yùn)轉(zhuǎn)。CityEngine支持自由繪制道路和閉合街區(qū)自動(dòng)生成矢量模型[11]。如果之前在利用ArcGIS對(duì)柵格數(shù)據(jù)進(jìn)行矢量化的過程中已經(jīng)完成了對(duì)道路的矢量化,這里可以直接打開shape模型生成道路,若道路沒有在之前進(jìn)行處理,可以借助CityEngine提供的工具進(jìn)行道路編輯,生成道路網(wǎng)。
CGA規(guī)則作為CityEngine的獨(dú)特語言模式,其原理是將建筑物具體化、細(xì)節(jié)化、簡單化的拆分為各個(gè)小的結(jié)構(gòu)部件,對(duì)其進(jìn)行規(guī)則編寫、迭代生成,然后再拼接為一整個(gè)模型[9]。
紋理建模是決定建筑物外貌視覺效果好壞的關(guān)鍵[7],其包括對(duì)建筑物墻體表面的紋理建模和門窗紋理的建模。紋理建模根據(jù)方式的不同可以分為兩大類,一類是規(guī)則紋理建模,其采用編寫規(guī)則來實(shí)現(xiàn)對(duì)建筑物外觀的貼圖,另一類則是手工紋理的貼取,采用手動(dòng)交互式建模方法來實(shí)現(xiàn)對(duì)建筑外觀的貼圖。
根據(jù)上述說明,編寫CGA規(guī)則,讀取建筑物相關(guān)屬性,根據(jù)定義的建筑規(guī)則集進(jìn)行樓層的分解和瓦片的分裂[12],然后利用貼圖(texture)函數(shù)使用相應(yīng)的模型資源來對(duì)建筑物的窗戶、門、墻進(jìn)行紋理貼圖。建筑物部分CGA代碼如下:
Building-->
comp(f) { front: Frontfacade|left:Sidefacade|right:Sidefacade|back: Frontfacade|top:Roof }
Frontfacade-->
split(y){ groundfloor_ height: Groundfloor|{~floor_height:Floor}*|floor_height:Topfloor}
Sidefacade-->
split(y) { groundfloor_ height: Sidefloor|{0.5:Tiles|~floor_height:Sidefloor}*}
const roof_tex="wall/wall1.jpg"
Roof-->
setupProjection(0,scope.xz,scope.sx,scope.sz)
texture(roof_tex)
projectUV(0)
Gloundfloor-->
split(x) {1:GloundWall|{~tile_width: Groundtile }*|1:GloundWall}
Groundtile-->
split(x) { '0.3: wall|'0.4:GDoor|'0.3: wall}
const gdoor_tex="door/door1.jpg"
GDoor-->
setupProjection(0,scope.xy,scope.sx,scope.sy}
texture(gdoor_tex)
projectUV(0)
建筑物模型效果如圖3所示。
圖3 建筑物模型效果
其他的復(fù)雜建筑物都可以在SketchUp中進(jìn)行手工建模。為了使手工建模的尺寸與實(shí)際建筑物尺寸相同,需要將矢量化數(shù)據(jù)導(dǎo)入SketchUp中,根據(jù)矢量化數(shù)據(jù)尺寸進(jìn)行真實(shí)建筑物的三維模型構(gòu)建[13]。為了更加真實(shí)地對(duì)現(xiàn)實(shí)世界的物體進(jìn)行描繪,模型的紋理數(shù)據(jù)需要在貼圖之前使用Photoshop對(duì)其進(jìn)行相應(yīng)的裁剪、拼接等變換。最終成果如圖4所示。
圖4 模型構(gòu)建效果
所有的普通建筑物CGA規(guī)則創(chuàng)建、復(fù)雜建筑物的手工精細(xì)化建模和紋理圖像的處理完成之后,就可以實(shí)現(xiàn)建模區(qū)域的批量化模型構(gòu)建了。與普通建筑物的批量化建模類似,復(fù)雜建筑物的模型構(gòu)建也可以直接選中圖層對(duì)象,或者直接將規(guī)則文件拖動(dòng)到所需建模的矢量文件上,可以自動(dòng)根據(jù)矢量化數(shù)據(jù)生成模型[14]。
將建模區(qū)域所有模型構(gòu)建完成之后,可以選擇將其發(fā)布到WebScene上進(jìn)行瀏覽和分享。由于一個(gè)工程場景中包含多個(gè)圖層、要素甚至是矢量數(shù)據(jù)庫,逐項(xiàng)導(dǎo)出容易導(dǎo)致數(shù)據(jù)的丟失或者錯(cuò)誤,因此需要將其整體打包以此來進(jìn)行發(fā)布。導(dǎo)出效果如圖5所示。
圖5 導(dǎo)出效果
本文使用CityEngine和SketchUp進(jìn)行三維模型的構(gòu)建,充分結(jié)合CityEngine在批量化建模方面的獨(dú)特優(yōu)勢和SketchUp對(duì)于復(fù)雜建筑物的精細(xì)建模的易操作性,在保證對(duì)主要建筑物真實(shí)精細(xì)還原的同時(shí),提高了區(qū)域建模的速率。對(duì)想要充分利用現(xiàn)有GIS數(shù)據(jù),同時(shí)需要進(jìn)行大范圍三維模型構(gòu)建的項(xiàng)目提供借鑒。