段雅萍,郝連秀,王瑞富,李家貴
(1.山東科技大學 測繪科學與工程系學院,山東 青島 266590;2.國家測繪地理信息局 第二地理信息制圖院,黑龍江 哈爾濱150081)
基于CityEngine的城市三維模型構建方法與問題分析
段雅萍1,郝連秀2,王瑞富1,李家貴1
(1.山東科技大學 測繪科學與工程系學院,山東 青島 266590;2.國家測繪地理信息局 第二地理信息制圖院,黑龍江 哈爾濱150081)
以傳統手工建模方式為主的建模手段存在周期長、工作量大、成本高等缺點,制約了數字城市的發展。在分析數字城市和三維GIS的基礎上,設計了基于CityEngine的三維建模解決方案,通過程序化的規則實現了高效、批量建模,并總結了一 套通用的建模技術流程。結合實際案例分析了建模過程中存在的問題,并從底圖數據處理、建筑物紋理獲取和模型表達優化等方面給出了相應解決方案,最后以青島市唐島灣地區為示范區進行了三維建模。
CityEngine;三維建模;CGA規則;模型優化;批量

隨著人們關注度的不斷提高,3DGIS技術得到迅速發展,國內一些城市已經開始建立基于3DGIS的數字城市系統[1-3]。隨著城市規模的擴大,建模的數據量也在急劇增長,建模效率成為三維城市發展的瓶頸。傳統手工建模方式能得到逼真的三維城市效果,但需投入的經費和人力物力也非常巨大[4];且得到的結果往往是“固化的”和“靜態的”,模型沒有建立與空間數據庫之間的聯系,也沒有設計規則與之匹配,雖然模型可以瀏覽,
但很難實現面積、體積計算等統計分析功能,以至于后續的功用有限,在城市規劃設計、審核和監管等工作中也很難充分發揮作用,所以傳統建模方式已不能滿足用戶的需求[5]。本文主要研究了ESRI公司三維建模軟件CityEngine的建模方法,給出了利用CityEngine進行高效、快速建模的技術流程,并針對建模過程中出現的問題,結合實際應用給出了解決方案。
CityEngine具有獨特的建模方式,它通過參數化的CGA 規則來創建模型,并可批量生成。由于CityEngine是ESRI ArcGIS軟件體系中的一部分,因此在建模時可直接使用現有GIS空間數據,關聯GIS數據的屬性信息,提高城市三維建模的效率[6-7]。
本文以青島市黃島區唐島灣地區的三維建模為例,建模流程如圖1所示。數據采集主要是收集DEM、影像、線劃圖等地形數據以及樓層高度、外部紋理等屬性數據;對于地形數據需進行匹配、疊加等處理,對于屬性數據需進行規范化整理并與矢量數據關聯;在此基礎上,構建規則,實現批量模型構建[8]。
1.1 數據采集
數據采集屬于模型的前期準備工作,不僅要收集相關數據,而且要根據后期建模需求進行處理。紋理數據本質上是一種屬性數據,但處理方法與其他數據不同,且對三維效果影響很大,所以本文從數據處理角度將數據分為基礎地理數據與紋理數據。
1.1.1 基礎地理數據
基礎地理數據主要包括建模地區的影像圖、DEM、房屋和道路等主要建筑物的底圖矢量數據和建筑物屬性信息等?;A地理數據采集與處理流程如圖2所示。

圖1 建模流程圖

圖2 基礎地理數據采集與處理流程圖
影像和DEM數據需要調整尺寸,統一坐標系與高程,轉換成tif格式后,才可加載到場景中作為地形圖層。綠化點數據、街道數據、房屋地塊數據,一般通過購買數字化測繪產品的方式得到;其屬性信息包括建筑物的樓層數、屋頂樣式、材質、道路寬度、名稱等,通過搜集相關資料或現場調查獲取,并與矢量數據關聯形成二維矢量數據。
為了與地形圖層匹配疊加,二維矢量數據需要具有高程信息,一般通過DEM插值獲取。本文采用ArcGIS相關工具處理,其中點要素直接基于DEM進行插值(Interpolate Shape工具);線要素則需先將數據進行簡化(Simplify Line工具)處理,再進行插值;面要素相對復雜,一般是先將面要素轉換為點要素,并按點要素方式插值獲取高程,再將高程屬性信息以鏈接的方式傳遞給原始面,最后通過ArcGIS三維賦值工具實現面要素的三維轉化。
通過上述處理,DEM、影像、矢量數據等數據就具有統一的空間參考與高程信息,可作為基礎地理數據加載到CityEngine場景中。
1.1.2 紋理數據
紋理數據主要是指建模物體表面的彩色圖案,也可稱為紋理貼圖。紋理數據的采集與處理是三維建模中的一個關鍵環節,對于場景的整體效果和模型的細節展示都有重要作用,通常通過Photoshop進行處理。
本文通過實地踏勘唐島灣地區采集紋理素材,由于實地采集的紋理數據在分辨率、角度、尺寸、色調等方面不統一,不能滿足三維模型紋理貼圖的需求,所以需對原始數據進行處理。本文選擇Photoshop作為圖像處理工具對原始紋理數據進行處理,主要包括影像拼接、裁切、糾正、雜物消除、色調調整和分辨率調整等。為了后續規則調用方便,處理后的紋理數據需統一命名管理,最終得到滿足建模要求的正射紋理圖片數據集。
1.2 規則分析
CityEngine程序化自動建模是基于CGA規則定義了一系列的細節規則規定模型如何生成,越來越相近地迭代進化模型[9-10]。模型依據底圖矢量數據調用CGA規則文件生成。

圖3 基本規則示例
圖3a是一個基本的CGA規則,其中定義了屬性信息、起始規則、模型分割規則以及紋理的具體貼圖方法等。通過這個規則可以得到一個普通三維體,并賦予紋理。根據CityEngine參數化的規則編寫方式,在模型細節調整時,可直接修改模型參數,實現交互式的模型調整,如圖3b所示,groudFloor為一樓高度,height為整個建筑物高度,這些屬性都可以交互調整[11-13]。
CityEngine創建模型依托于底圖要素,而底圖要素未必都是規則形狀,因此在調用相同規則文件時,CGA規則會依據底圖自適應生成模型。圖4a是一組不規則的底圖,但應用相同規則生成的模型能反映其底圖特征,見圖4b,這實現了批量建模和規則復用,且與傳統模型復制有本質不同。

圖4 自適應生成模型
2.1 常見數據問題
CityEngine建模過程中,常見的數據問題包括地形、影像的疊加以及場景數據空間參考問題。
2.1.1 地形、影像的疊加
向CityEngine導入影像和地形數據時,經常會出現影像或地形不顯示或非正常顯示等問題。這主要是由影像和地形尺寸不符合要求或像素深度不匹配導致的,可按照以下步驟檢查并修改文件:
1)檢查影像與地形數據尺寸。CityEngine對影像和地形數據的大小有一定限制,一般要求單幅數據行列數在8 192×8 192以內,若超出可利用重采樣或裁切等方法對影像和地形進行處理。
2)檢查像素深度。CityEngine中DEM的像素深度為8位,沖突時把DEM存儲格式轉成8位即可調整像素深度。
2.1.2 場景數據空間參考問題
CityEngine是基于實際空間參考進行建模的,包括地形影像坐標、底圖矢量數據坐標和場景坐標。當三者的坐標系不匹配或空間位置偏差較遠時,則會提示加載的數據距離過遠,出現無法正常加載的情況。需要在數據導入場景前預處理,具體步驟為:
1) 將數據加載到ArcMap,檢查數據位置是否正確。
2)檢查數據的空間參考信息,CityEngine目前只支持投影坐標系,若參考信息為Unknown,則這時創建場景也不需要選擇坐標系。
3)檢查影像地形數據是否帶坐標信息文件。數據必須具有坐標信息,即.tfw文件,若沒有坐標信息,則必須通過GIS投影工具對其進行校正處理。
2.2 屋頂紋理數據提取
快速提取屋頂紋理,并與矢量數據進行匹配對于批量建模來說至關重要,是本文要解決的一個關鍵問題,可以歸納為4個關鍵點:①根據建模區域影像數據得到對應的建筑物屋頂的切片影像,即影像裁切問題;②底圖矢量數據所需屬性字段添加問題;③在CGA規則中檢索調用建筑屋頂紋理數據,即裁切后影像的命名問題;④規則編寫問題。對于①~③階段需要確定矢量數據每個要素對應裁切后影像起點坐標和尺寸,并實現基于每個矢量要素的影像裁切與命名,如果通過手工處理,過程繁瑣,效率很低。為簡化相應工作流程,本文引入一個影像裁切的ArcGIS工具,先基于二維矢量數據,得到建筑物平面輪廓;再應用ArcGIS基于形狀的影像裁切工具,從影像中裁得對應的區域并保存為圖片,該圖片即模型的屋頂紋理。
為了給模型精確添加紋理,需記錄紋理起始坐標,本文在屬性表中增加了5個字段,以X、Z記錄紋理起始水平坐標,以Xrange、Zrange記錄紋理范圍,以Material記錄紋理名稱,見表1。通過這種處理,模型屋頂紋理可與背景圖較好匹配。

表1 屬性字段添加
2.3 模型優化問題
通常模型越精細則越復雜,占用內存越多,導致顯示速度降低[14]。模型的復雜程度體現為模型面與節點的數量,CityEngine中的Cleanup Geometry規則函數、Cleanup Shape工具以及LOD機制可通過分級適應,優化模型,提高顯示效率。
2.3.1 Cleanup Geometry規則函數
建模過程中,經常會引入一些精細的外部模型或部件,由于其占用內存太大,需進行優化處理。通過規則將外部模型導入到CityEngine并利用Cleanup Geometry規則函數進行優化,可有效減少模型節點和面的數量,還可利用Cleanup Shape工具對模型進行優化。
2.3.2 LOD機制
LOD為多細節層次機制,主要是根據場景顯示需求,設置不同建筑物模型細節級別,在不影響三維場景顯示效果的前提下,減少內存占用量,使三維場景能流暢顯示。
在本示例中(圖5),設置了兩個顯示級別:LOD=0:代表較低級別,即調用復雜度低的規則,顯示較少的模型細節; LOD=1:代表較高級別,即調用相對精細的規則,顯示較多的模型細節。本文以模型的窗戶部件為例,可在屬性查看窗口看到LOD屬性。

圖5 模型優化對比圖
當LOD=1時,規則調用的是相對精細的模型,模型的細節顯示有2 466個面,這時模型較為精細,例如窗臺凸出,在近距離的模型展示中會有很逼真的效果。當LOD=0時,模型的細節顯示僅有324個面,這時CGA規則直接給模型貼上一個平面紋理,僅占用很少內存,在大范圍的三維場景中,顯示效率相對較快。
本文分析了基于CityEngine建模的相關問題,并給出了相應的解決方案,形成了一個比較可行的建模流程。基于本文提出的方案,以唐島灣地區為例,將CityEngine建模軟件與GIS數據相結合創建了三維模型,建模效率有很大提升。圖6為最終效果圖。

圖6 唐島灣效果圖
[1] 李德仁,龔健雅,邵振峰.從數字地球到智慧地球[J].武漢大學學報(信息科學版),2010(2):127-132
[2] 李維森.淺析數字城市地理空間框架建設中的創新[J].測繪通報,2011(9):1-5
[3] 李成名,劉曉麗,印潔,等.數字城市到智慧城市的思考與探索[J].測繪通報,2013(3):1-3
[4] 許捍衛,房曉亮,任家勇,等.基于SketchUp的城市三維建模技術[J].測繪科學,2011(1):213-214
[5] 李永泉,韓文泉,黃志洲.數字城市三維建模方法比較分析[J].現代測繪,2010(2):33-35
[6] 吳靜,靳奉祥,王健.基于三維激光掃描數據的建筑物三維建模[J].測繪工程,2007(5):57-60
[7] 李勇,郝向陽,西勤.三維地理信息系統相關技術研究[J].測繪科學,2001(4):25-28
[8] 李娟,劉溪,韓婕玉.基于參數化建模的三維城市設計方法探討[J].城市管理與科技,2013(3):66-68
[9] Esri(中國)信息技術有限公司.CityEngine 中文教程 [Z].
[10] 謝年,向煜,徐艇偉.基于規則的快速三維建模技術研究[J].城市勘測,2013(4):5-8
[11] 呂永來,李曉莉.基于CityEngine平臺的高速鐵路建模方法的研究與實現[J]. 測繪,2013(1):19-22
[12] 呂永來,李曉莉.基于CityEngine CGA的三維建筑建模研究[J].測繪,2013(2):91-94
[13] 肖樂斌,鐘耳順,劉紀遠,等. 三維GIS的基本問題探討[J].中國圖像圖形學報,2001(9):30-36
[14] 周楊.數字城市三維可視化技術及應用[D].鄭州:信息工程大學,2002
P208
B
1672-4623(2017)05-0075-03
10.3969/j.issn.1672-4623.2017.0052.3
段雅萍,碩士研究生,主要研究方向為GIS軟件應用與開發。
2016-09-07。
項目來源:全球變化與海氣相互作用專項資助項目 (GASI-02-YG-BC01)。