王媛媛
(吉林省水利水電勘測(cè)設(shè)計(jì)研究院,吉林 長(zhǎng)春 130012)
隨著GIS技術(shù)和計(jì)算機(jī)軟、硬件技術(shù)的快速發(fā)展和推廣,二維GIS應(yīng)用已經(jīng)不能滿(mǎn)足目前很多方面的應(yīng)用需求。二維GIS只能提供給用戶(hù)平面的信息,而現(xiàn)實(shí)世界中,客觀事物總是存在于三維空間的[1],對(duì)于三維空間中客觀事物,用戶(hù)只能通過(guò)想象或者工作經(jīng)驗(yàn)來(lái)推斷。與二維GIS相比,三維GIS通過(guò)構(gòu)建三維模型場(chǎng)景給用戶(hù)表現(xiàn)更真實(shí)的地理空間[2]。目前進(jìn)行三維建模的作業(yè)流程是對(duì)場(chǎng)景模型進(jìn)行逐一建模,業(yè)界通常使用的軟件有3DMax、SketchUp等軟件[3]。優(yōu)點(diǎn)是軟件的用戶(hù)群體多、模型精確度較高;缺點(diǎn)是建模操作較繁瑣、工作量大。ESRI公司的CityEngine軟件最大的特點(diǎn)就是程序通過(guò)定義一系列的規(guī)則來(lái)驅(qū)動(dòng)和約束三維場(chǎng)景的自動(dòng)構(gòu)建三維模型。這種技術(shù)改變了傳統(tǒng)建模的方式,大大減少了重復(fù)性勞動(dòng)和人力的投入。
三維場(chǎng)景一般包含三維地形、影像、三維建筑物、道路、水系等要素。這些三維數(shù)據(jù)一般都是由二維的GIS數(shù)據(jù)經(jīng)過(guò)三維技術(shù)處理獲得的[4]。三維地形數(shù)據(jù)即DEM數(shù)據(jù),有TIN和Grid兩種格式;三維建筑物、道路和水系模型分別由二維的建筑物、道路、水系數(shù)據(jù)圖層添加DEM高程信息來(lái)獲取其三維數(shù)據(jù)進(jìn)而創(chuàng)建三維模型。因此,在建模之前,需要收集場(chǎng)景區(qū)域的DEM、DOM、建筑物(面)、道路(面或線(xiàn))、水系(面)等GIS數(shù)據(jù)。
使用ArcGIS工具將這些收集到的GIS數(shù)據(jù)進(jìn)行處理,剔除錯(cuò)誤、粗差并使之統(tǒng)一坐標(biāo)系,編輯處理矢量數(shù)據(jù)的屬性,添加字段,使GIS數(shù)據(jù)包含建模所需的基本信息。
將GIS數(shù)據(jù)導(dǎo)入到CityEngine場(chǎng)景中,創(chuàng)建場(chǎng)景及規(guī)則文件,創(chuàng)建規(guī)則變量并映射到GIS數(shù)據(jù)的相應(yīng)屬性,指定建模規(guī)則,應(yīng)用規(guī)則文件批量構(gòu)建場(chǎng)景內(nèi)的三維模型,最后單獨(dú)編輯場(chǎng)景中特殊模型。這樣就完成了三維場(chǎng)景的批量建模工作,下面詳細(xì)分析該技術(shù)路線(xiàn)的設(shè)計(jì)與實(shí)現(xiàn)過(guò)程。
2.1.1 統(tǒng)一數(shù)據(jù)坐標(biāo)系
收集到的場(chǎng)景區(qū)域的DEM、DOM、建筑物(面)、道路(面或線(xiàn))、水系(面)等GIS數(shù)據(jù),由于不一定是同源獲取的,所以經(jīng)常會(huì)遇到數(shù)據(jù)的坐標(biāo)系不統(tǒng)一的情況,雖然CityEngine軟件支持不同坐標(biāo)系的數(shù)據(jù)在加載時(shí)自動(dòng)進(jìn)行數(shù)據(jù)投影,但是為了避免數(shù)據(jù)的投影變形,最好還是需要將所有的原始數(shù)據(jù)的坐標(biāo)系進(jìn)行統(tǒng)一。如果是同橢球不同投影帶坐標(biāo)系之間的轉(zhuǎn)換,可以使用ARCGIS的坐標(biāo)系投影工具將源坐標(biāo)系投影到目標(biāo)系;如果是不同橢球坐標(biāo)系之間的轉(zhuǎn)換,可以收集或?qū)崪y(cè)場(chǎng)景區(qū)的轉(zhuǎn)換參數(shù),然后再使用ARCGIS的坐標(biāo)系投影工具將源坐標(biāo)系投影到目標(biāo)系[5]。關(guān)于數(shù)據(jù)坐標(biāo)系轉(zhuǎn)換的詳細(xì)說(shuō)明本文中不作介紹。
2.1.2 二維GIS數(shù)據(jù)制作三維GIS數(shù)據(jù)
GIS數(shù)據(jù)包括空間數(shù)據(jù)和屬性數(shù)據(jù),空間數(shù)據(jù)用來(lái)表達(dá)地理空間實(shí)體的位置、大小、形狀、方向以及幾何拓?fù)潢P(guān)系,屬性數(shù)據(jù)用來(lái)表達(dá)空間實(shí)體的空間屬性以外的其他屬性特征,屬性數(shù)據(jù)主要是對(duì)空間數(shù)據(jù)的補(bǔ)充說(shuō)明。GIS數(shù)據(jù)通常以點(diǎn)、線(xiàn)、面要素來(lái)分類(lèi)組織和管理。二維的GIS數(shù)據(jù)為了能更好地貼合到三維地形(即DEM)上,需要將二維的GIS數(shù)據(jù)轉(zhuǎn)換成三維GIS數(shù)據(jù)。
圖1 “2Dto3D面”GP工具架構(gòu)圖
點(diǎn)要素:通過(guò)ArcToolbox的“Interpolate Shape”工具轉(zhuǎn)化為3D點(diǎn)要素。并在屬性字段中指定點(diǎn)要素的類(lèi)型(如樹(shù)木、路燈桿等)、高度等基本信息。
線(xiàn)要素:如果是雙線(xiàn)道路,需要提取道路的中心線(xiàn),然后再使用“Interpolate Shape”工具轉(zhuǎn)化為3D線(xiàn)要素。并在屬性字段中指定道路要素的寬度、車(chē)道數(shù)、路面材質(zhì)(如瀝青、水泥、砂石等)等基本信息。同理,其他線(xiàn)要素也要在屬性中指定其必要的基本信息。
面要素:如果是雙線(xiàn)道路面,需要提取道路的中心線(xiàn),將其轉(zhuǎn)化為線(xiàn)要素,再按上面線(xiàn)要素處理;如果是水系面,使用“面轉(zhuǎn)線(xiàn)”工具將面轉(zhuǎn)換為線(xiàn)要素[6],然后轉(zhuǎn)換為3D要素,再使用“要素轉(zhuǎn)面”工具轉(zhuǎn)化為3D面要素;如果是建筑物基座面,處理會(huì)較為復(fù)雜,可以制作一個(gè)GP模型工具[7],命名為“2Dto3D面”,其架構(gòu)如圖1所示。運(yùn)行該工具會(huì)輸出兩個(gè)要素類(lèi):“Building1_footprints3D”、“Building1_footprints3D_bufferline”。“Building1_footprints3D”是實(shí)際的3D建筑物基底面,其高程是建筑物基底面中心點(diǎn)在DEM上的投影高程,是一個(gè)平面;而“Building1_footprints3D_bufferline”是3D線(xiàn)要素,它的高程就是它在DEM上的插值高程,它將參與地形的編輯,使得建筑物基底面能更好地與地形貼合。編輯屬性字段添加建筑物的樓層數(shù)、層高、屋頂類(lèi)型、墻面材質(zhì)等基本信息。
2.1.3 DEM編輯
使用ArcGIS加載這些數(shù)據(jù)源,可以看到在場(chǎng)景中一些3D要素并不能很好的與地形貼合(比如建筑物的基底),所以接下來(lái)要做的就是將地形的局部區(qū)域進(jìn)行編輯,使之與3D要素更好地貼合。以建筑物基底處理為例來(lái)進(jìn)行說(shuō)明。如果DEM數(shù)據(jù)是TIN格式,則直接使用“編輯TIN”工具加入上面生成的“Building1_footprints3D_bufferline”要素類(lèi)即可。如果DEM數(shù)據(jù)是Grid格式,則只需將Grid格式轉(zhuǎn)換成TIN格式,再重復(fù)上步完成DEM編輯。
2.2.1 主體建模
目前進(jìn)行三維建模一般都使用3DMax、SketchUp等軟件對(duì)場(chǎng)景模型進(jìn)行逐一建模,以建筑物為例,很多建筑物的樣式基本是一樣的或者是類(lèi)似的,按照目前的工作模式大大增加了重復(fù)性勞動(dòng)。CityEngine最大的特點(diǎn)就是可以通過(guò)定義一系列的規(guī)則來(lái)驅(qū)動(dòng)和約束三維場(chǎng)景中的模型的自動(dòng)構(gòu)建,進(jìn)而達(dá)到批量自動(dòng)建模的目的。
首先新建工程“CityEngine project”,新建場(chǎng)景“CityEngine scene”,命名該場(chǎng)景并設(shè)置該場(chǎng)景所使用的坐標(biāo)系統(tǒng)為源數(shù)據(jù)的坐標(biāo)系統(tǒng)。在場(chǎng)景中創(chuàng)建Terrain Layer加載DEM和DOM數(shù)據(jù)。然后在場(chǎng)景中導(dǎo)入三維GIS矢量數(shù)據(jù)及其屬性,這樣我們就能在后續(xù)的建模中通過(guò)映射實(shí)體屬性來(lái)動(dòng)態(tài)控制模型的自動(dòng)創(chuàng)建。創(chuàng)建一個(gè)新規(guī)則,當(dāng)然也可以導(dǎo)入一個(gè)已有的規(guī)則,下面以建筑物為例來(lái)說(shuō)明如何通過(guò)定制規(guī)則自動(dòng)創(chuàng)建建筑物模型。
選中建筑物層上所有的幾何實(shí)體,通過(guò)鼠標(biāo)右鍵工具“Assign Rule File…”引用到新建的規(guī)則文件,然后編寫(xiě)規(guī)則,如圖2所示短短幾行代碼就可以自動(dòng)生成所有的建筑物模型,建筑物高度為3m。當(dāng)然還可以通過(guò)映射變量“height”到幾何實(shí)體的屬性,這樣就可以根據(jù)屬性值來(lái)生成不同高度的建筑物模型了[8]。
圖2 cga規(guī)則文件及局部效果
圖3 cag規(guī)則文件及局部效果圖
2.2.2 屋頂建模
由于建筑物的屋頂多樣化,考慮北方房屋多以平頂、雙坡頂、四坡頂為多,下面就以這幾類(lèi)屋頂?shù)慕R?guī)則定制進(jìn)行詳細(xì)說(shuō)明。
平頂:最簡(jiǎn)單,建筑物默認(rèn)屋頂即為平頂。也可使用roofShed[9]函數(shù),傾角設(shè)置為0。
雙坡頂:需要comp(f)函數(shù)將頂面分割出,然后使用roofGable[9]函數(shù),其可以包含1~5個(gè)參數(shù),一般默認(rèn)3個(gè)就可以了,坡頂?shù)慕嵌?單位:度)、x方向房檐延伸長(zhǎng)度(單位:m)、y方向房檐延伸長(zhǎng)度(單位:m)。
四坡頂:需要comp(f)函數(shù)將頂面分割出,然后使用roofHip[9]函數(shù),其可以包含1~3個(gè)參數(shù),一般默認(rèn)2個(gè)就可以了,坡頂?shù)慕嵌?單位:度)、四周房檐延伸長(zhǎng)度(單位:m)。
圖3即為映射實(shí)體屋頂?shù)牟煌瑢傩灾底詣?dòng)構(gòu)建的房屋白模。
2.2.3 紋理貼圖
最后就是對(duì)模型的美化工程了,給模型貼上紋理圖案,使模型看起來(lái)更接近于真實(shí)世界中的建筑物。我們可以將DOM影像數(shù)據(jù)作為建筑物的屋頂貼圖,其他門(mén)、窗、墻壁材質(zhì)貼圖可以實(shí)地拍照采集。門(mén)窗的紋理貼圖為同類(lèi)型,如圖4中“Door”貼圖代碼所示。屋頂貼圖使用的是DOM影像,需要進(jìn)行紋理的平移操作[10],如圖4中“Roof”貼圖所示,由于注釋比較詳細(xì),在此就不在贅述了。
至此,建筑物的三維建模就已經(jīng)完成了。使用規(guī)則創(chuàng)建模型的優(yōu)勢(shì)是可以通過(guò)改變規(guī)則來(lái)輕松地修改模型,規(guī)則帶來(lái)了高效的同時(shí),一點(diǎn)也沒(méi)有降低三維建模的靈活度。例如,你可以通過(guò)規(guī)則來(lái)自動(dòng)創(chuàng)建大部分的建筑物,而其中的個(gè)別建筑物,你可以通過(guò)在該建筑物的Inspector屬性框中修改其屬性來(lái)更詳細(xì)控制建筑物模型的創(chuàng)建。
如果已經(jīng)有一些三維模型,這些模型是使用其他建模軟件生成的,CityEngine可以很好的支持這些已有三維模型。如果模型帶有空間地理坐標(biāo),可以直接將這些模型文件拖入到CityEngine場(chǎng)景中,當(dāng)然也可以使用菜單“File/Import”導(dǎo)入工具,使用指定類(lèi)型的導(dǎo)入器將選中的模型導(dǎo)入到場(chǎng)景中。反之,如果模型沒(méi)有空間地理坐標(biāo)信息,可以使用矢量輪廓面來(lái)為模型定位。
圖4 cag規(guī)則文件及局部效果圖
基于CityEngine規(guī)則建模技術(shù),通過(guò)創(chuàng)建規(guī)則文件,既能靈活地利用二維GIS數(shù)據(jù),尤其是其屬性數(shù)據(jù),又能廣泛兼容地利用多種外部資源(如紋理、已有模型等)來(lái)批量創(chuàng)建出較高質(zhì)量的模型,大大減少了創(chuàng)建三維場(chǎng)景的建模工作量,極大地提高工作效率。