肖永東 顧晉瑜
基于CityEngine的線性地物三維建模研究
Research on the 3D Modeling of Linear Terrain Based on the CityEngine
肖永東, 顧晉瑜
(云南能源職業(yè)技術(shù)學(xué)院,云南 曲靖 655001)
XIAO Yong-dong, GU Jin-yu
(Yunnan Vocational Institute of Energy and Technology, Qujing 655001, China)
【摘 要】三維模型是建立三維數(shù)字城市,VR等技術(shù)的基礎(chǔ)部件,可以用不同軟件和方法進(jìn)行不同顆粒程度的三維建模。論文介紹了基于規(guī)則進(jìn)行快速建模的CityEngine軟件,利用GIS數(shù)據(jù)進(jìn)行線性地物,如道路等的三維模型的建立,展示了其快速、高效的建模性能。為城市規(guī)劃等需要進(jìn)行空間三維建模的項(xiàng)目提供了一種新的有效手段。
【Abstract】Three-dimensional model is the basic component of building three-dimensional digital city, VR technology and so on, we can build three-dimensional models with different granularity levels by different software and methods. This paper introduces the CityEngine software for rapid modeling based on rules. It uses GIS data to build three-dimensional model of linear terrain, such as the roads, which shows its fast and efficient modeling performance. It provides a new and effective means for urban planning and other projects that need three-dimensional spatial modeling.
【關(guān)鍵詞】 CityEngine; CGA ;三維建模
【Keywords】CityEngine; CGA; 3D modeling
【中圖分類號】F275 【文獻(xiàn)標(biāo)志碼】A 【文章編號】1673-1069(2019)02-0142-03
1 引言
近年來,由于三維建模及VR技術(shù)能夠?qū)崿F(xiàn)對周圍環(huán)境的極致逼近,會讓使用者有一種身臨其境的感覺,受到了廣大群眾的歡迎。三維建模技術(shù)也隨著市場的需求得到了快速發(fā)展。三維建模技術(shù)是建立現(xiàn)實(shí)世界虛擬化三維場景的基礎(chǔ),它能夠?qū)Φ乩砜臻g的表示從傳統(tǒng)的二維表達(dá)方式轉(zhuǎn)換為以三維立體的方式來展示,使之能夠更加真實(shí)、形象地展示現(xiàn)實(shí)世界[1]。目前,能夠進(jìn)行三維建模的相關(guān)技術(shù)和軟件很多,如
3DMax,SketchUp、Lumion等,這些軟件的核心思想都是把現(xiàn)實(shí)研究對象拆分成若干的基本幾何形體,然后對其進(jìn)行基本模型的建立及組合處理,是一種靜態(tài)的模型[2]。本文介紹一種基于不同工作原理的建模工具:CityEngine,該建模軟件主要是基于規(guī)則進(jìn)行,通過對表示對象的拆解,組織其規(guī)則結(jié)構(gòu),然后編寫規(guī)則文件,即可實(shí)現(xiàn)相應(yīng)模型的創(chuàng)建,它的主要優(yōu)勢在于能夠?qū)σ?guī)則文件的重復(fù)使用,并且通過對規(guī)則文件的簡單修改,就可實(shí)現(xiàn)模型的更改,相對于3DMax等建模工具,它具備了動態(tài)、快速、批量建模的特點(diǎn),為三維建模領(lǐng)域提供了一種新的思維與手段。
2 CityEngine及CGA規(guī)則簡介
2.1 CityEngine軟件簡介
CityEngine是一款城市快速建模的軟件,其主要思想是一種基于規(guī)則的“程序化”的建模手段,通過編寫規(guī)則程序命令,即可實(shí)現(xiàn)相應(yīng)的模型建立。
CityEngine廣泛支持常見的三維模型數(shù)據(jù)格式,比如,OBJ,DAE,DXF,KML,3DS等,并且與ArcGIS等GIS平臺無縫集成,具備地圖投影功能,可以直接使用ArcGIS提供的二維GIS數(shù)據(jù),其成果也可以直接以MULTIPATCH的文件格式存儲,可作為ArcGIS的直接數(shù)據(jù)源。
2.2 CGA規(guī)則
CGA(computer generated architecture)是一種基于語義的建模語言,它是整個CityEngine的核心部分[3]。我們通過分析模型對象的組成結(jié)構(gòu),創(chuàng)建相應(yīng)規(guī)則文件,就能夠定義這種模型,并能夠?qū)Χ鄠€對象賦予這些規(guī)則,從而實(shí)現(xiàn)模型的快速及批量創(chuàng)建。通過CGA創(chuàng)建諸如建筑模型的過程主要如下:①通過外部GIS數(shù)據(jù)導(dǎo)入或直接繪制的方法在CityEngine中得到要素的二維數(shù)據(jù)(在CityEngine中,這種數(shù)據(jù)表現(xiàn)為shape或street);②根據(jù)模型對象的結(jié)構(gòu)特征編寫相應(yīng)的CGA規(guī)則文件;③選擇相應(yīng)的二維面數(shù)據(jù),賦予CGA文件,并對其指定一個入口規(guī)則(start rule);④使用CityEngine的模型生成工具命令,生成相應(yīng)模型;⑤對生成的模型進(jìn)行使用或?qū)С觥?/p>
3 線性地物建模
在進(jìn)行對象的建模時,有些線性對象,如圍墻、柵欄、道路等,不同于一般的房屋等獨(dú)立對象,其具備線性、走向隨意、重復(fù)性明顯、規(guī)律性強(qiáng)等特點(diǎn)。對線性地物的三維建模,如果使用傳統(tǒng)的靜態(tài)建模工具,主要做法就是創(chuàng)建其基本組件,然后對組件進(jìn)行大量的復(fù)制、旋轉(zhuǎn)、移動等操作,效率低下,如果使用CityEngine工具,只要在基本組件的基礎(chǔ)上,編寫少量的幾行代碼,即能夠快速實(shí)現(xiàn)其模型的創(chuàng)建,體現(xiàn)了CityEngine的優(yōu)勢。下面就對2種常見的線性地物:柵欄和道路,根據(jù)其復(fù)雜程度,分別給予介紹。
3.1 柵欄模型的創(chuàng)建
柵欄是一種很常見的建筑模型,這種模型的特點(diǎn)是結(jié)構(gòu)單一,且連續(xù)分布,一般在轉(zhuǎn)彎位置是折線,在模型的創(chuàng)建上,方法是:
①分析柵欄的結(jié)構(gòu),并分解出其基本組成部件,根據(jù)部件的難易程度,使用SKETCHUP等軟件根據(jù)其尺寸做出基礎(chǔ)部件,并導(dǎo)出為OBJ或DAE等數(shù)據(jù)格式。例如,常見的帶立柱的鐵柵欄,其基礎(chǔ)部件可分解為一個立柱和一個帶基礎(chǔ)的鐵格網(wǎng),如圖1所示。
②把已有GIS數(shù)據(jù)導(dǎo)入CityEngine或直接在CityEngine環(huán)境下繪制柵欄的線路數(shù)據(jù),由于CityEngine下沒有單純的線數(shù)據(jù),導(dǎo)入的或繪制的線默認(rèn)情況下會轉(zhuǎn)換成街道數(shù)據(jù)(street),街道包含了街道(street)和人行道(sidewalk)兩部分,并且,在轉(zhuǎn)彎部分會默認(rèn)生成弧形結(jié)構(gòu)。通過CityEngine的屬性面板,設(shè)置相關(guān)參數(shù),使之只包含街道部分,寬度設(shè)置為柵欄的寬度,且在轉(zhuǎn)彎的地方更改成折線。
③為柵欄實(shí)現(xiàn)設(shè)置屬性,編寫規(guī)則,其大致規(guī)則主要如下:
thebarrier-->extrude(barrierheight)
split(x){{~postwidth:br1|~fencelength:br2}*|~postwidth:br1}
br1-->i("ynny/assets/post.obj")
br2-->i("ynny/assets/fence.obj")
④規(guī)則文件編寫完之后,將文件賦給柵欄的街道數(shù)據(jù),直接運(yùn)行,即可得到結(jié)果,如圖2所示。
3.2 道路模型的創(chuàng)建
相比于柵欄、管線等設(shè)施,道路在結(jié)構(gòu)上要相對復(fù)雜,單幅、雙幅、多幅路等不同的道路形式各異,結(jié)構(gòu)差異很大,但如果是同一類型的道路,卻有其共性部分,下面以城市道路的一般形式來說明其建模的基本過程。
3.2.1 基本思路
對于城市道路,要在進(jìn)行建模之前把它拆分成不同的基本組成部分,然后在CityEngine下對各個部分分別進(jìn)行建模,從而最終實(shí)現(xiàn)城市道路模型的建立[4]。大致步驟如下:首先,將道路按照功能可拆分成CityEngine下支持的街道(street)、人行道(sidewalk)、十字路口(crossing)、交界(junction)以及交界入口(junctionentry)五部分,不同的部分各有不同的內(nèi)容,如街道主要包括來往車行道,有時還包括隔離帶,人行道則包括人行道路面、路燈以及行道樹等內(nèi)容。有時為了簡化處理,可以把交界與交界入口歸并到十字路口中去。
3.2.2 基本過程
①對道路模型進(jìn)行分解,得到其基本組成部分,對組成道路的一些基本組件,如路燈、行道樹、牌匾等,利用SKETCHUP等軟件工具進(jìn)行制作,并導(dǎo)入到CityEngine;對于路面、車行道等要素主要使用到的貼圖,可通過PHOTOSHOP等圖像處理軟件對采集到的圖片進(jìn)行處理,得到模型需要的貼圖數(shù)據(jù)以備用;
②導(dǎo)入或直接繪制道路網(wǎng)數(shù)據(jù),并根據(jù)道路各組成部分的寬度和長度信息,使用CityEngine的屬性面板進(jìn)行相應(yīng)設(shè)置;
③為各個組成部件編寫規(guī)則,下面為一般城市道路建模規(guī)則程序的部分主要內(nèi)容:
Street -->//定義街道,根據(jù)車道寬度進(jìn)行紋理貼圖
setupProjection(0,scope.xz, 6, calcLanes(scope.sz))
//根據(jù)路寬及車道寬,calcLanes(scope.sz)函數(shù)用于計(jì)算路面的車道數(shù)
projectUV(0) scaleUV(0, 1, 0.98) texture(“streets/road.png”)
Crossing --> //定義十字路口,對水泥路面進(jìn)行貼圖
setupProjection(0,scope.xz,3,3) projectUV(0)
texture("streets/concrete.png")
Sidewalk -->//定義人行道
set(trim.vertical,false) set(trim.horizontal,false)
comp(f){ all: SidewalkPart }
SidewalkPart -->
case scope.sx > 5:
SidewalkWithCurbs alignScopeToAxes(y) t(0,sidewalkHeight,0)
SidewalkLamps
else: SidewalkWithCurbs
SidewalkWithCurbs --> extrude(world.y,sidewalkHeight)
comp(f)
{ top : split(y){ sidewalkHeight : Curbs | ~1 : Pavement }| front : Curbs }
Pavement -->//對人行道進(jìn)行貼圖
setupProjection(0,world.xz,3,3) projectUV(0)
texture("streets/pavement.jpg")
SidewalkLamps --> //定義路燈
split(x){ ~lampDistance : NIL | { 0.1: Lamp | ~lampDistance : NIL }* }
Lamp -->
t(0,0,scope.sz-sidewalkHeight*2) s(0,5,0) r(0,90,0) i("streets/lamp1.obj")
Curbs --> //對公路鑲邊進(jìn)行貼圖
setupProjection(0,scope.xy, scope.sx/ceil(scope.sx/1.1),scope.sy)
projectUV(0) texture(streets/curb.jpg)
④規(guī)則完成后,賦給道路數(shù)據(jù),即可生成一般城市道路,如圖3所示。
4 結(jié)語
在CityEngine的平臺下,對于規(guī)則比較清晰、重復(fù)性、規(guī)律性較強(qiáng)對象的建模,充分體現(xiàn)了其快速、批量建模的思想,但這并不意味著其適應(yīng)于所有情況的三維建模。對于那些結(jié)構(gòu)復(fù)雜、模塊重復(fù)性較低的建筑模型或部件,使用CityEngine就無法在效率和性能上得到體現(xiàn),相反,使用圖像建模工具可能還會顯得更加高效一些。不管是要進(jìn)行大規(guī)模的數(shù)字城市的三維建模還是小區(qū)域,如三維校園的創(chuàng)建,總是會遇到情況多變的自然或人工模型,為了體現(xiàn)更高的效率和質(zhì)量,建議將幾種主流三維建模軟件結(jié)合起來共同使用,充分發(fā)揮各個軟件自身的應(yīng)用優(yōu)勢,以達(dá)到模型建立的最終目標(biāo)。
【參考文獻(xiàn)】
【1】謝年, 向煜, 徐艇偉. 基于規(guī)則的快速三維建模技術(shù)研究[J]. 城市勘測, 2013(4):15.
【2】陳秋曉, 張斌, 吳寧, 等. 城市道路參數(shù)化建模規(guī)則初探[J]. 建筑與文化, 2013(7):40-41.
【3】梁世文, 尹志永, 李雪飛. CityEngine在三維城市建設(shè)中的應(yīng)用[J].
科技傳播, 2014(5):33.
【4】呂永來, 李曉莉. 基于CityEngine平臺的高速鐵路建模方法的研究與實(shí)現(xiàn)[J]. 測繪, 2013(1):13-15.