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