基于CityEngine的线性地物三维建模研究
2019-05-29肖永东顾晋瑜
肖永东 顾晋瑜
基于CityEngine的线性地物三维建模研究
Research on the 3D Modeling of Linear Terrain Based on the CityEngine
肖永东, 顾晋瑜
(云南能源职业技术学院,云南 曲靖 655001)
XIAO Yong-dong, GU Jin-yu
(Yunnan Vocational Institute of Energy and Technology, Qujing 655001, China)
【摘 要】三维模型是建立三维数字城市,VR等技术的基础部件,可以用不同软件和方法进行不同颗粒程度的三维建模。论文介绍了基于规则进行快速建模的CityEngine软件,利用GIS数据进行线性地物,如道路等的三维模型的建立,展示了其快速、高效的建模性能。为城市規划等需要进行空间三维建模的项目提供了一种新的有效手段。
【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.
【关键词】 CityEngine; CGA ;三维建模
【Keywords】CityEngine; CGA; 3D modeling
【中图分类号】F275 【文献标志码】A 【文章编号】1673-1069(2019)02-0142-03
1 引言
近年来,由于三维建模及VR技术能够实现对周围环境的极致逼近,会让使用者有一种身临其境的感觉,受到了广大群众的欢迎。三维建模技术也随着市场的需求得到了快速发展。三维建模技术是建立现实世界虚拟化三维场景的基础,它能够将对地理空间的表示从传统的二维表达方式转换为以三维立体的方式来展示,使之能够更加真实、形象地展示现实世界[1]。目前,能够进行三维建模的相关技术和软件很多,如
3DMax,SketchUp、Lumion等,这些软件的核心思想都是把现实研究对象拆分成若干的基本几何形体,然后对其进行基本模型的建立及组合处理,是一种静态的模型[2]。本文介绍一种基于不同工作原理的建模工具:CityEngine,该建模软件主要是基于规则进行,通过对表示对象的拆解,组织其规则结构,然后编写规则文件,即可实现相应模型的创建,它的主要优势在于能够对规则文件的重复使用,并且通过对规则文件的简单修改,就可实现模型的更改,相对于3DMax等建模工具,它具备了动态、快速、批量建模的特点,为三维建模领域提供了一种新的思维与手段。
2 CityEngine及CGA规则简介
2.1 CityEngine软件简介
CityEngine是一款城市快速建模的软件,其主要思想是一种基于规则的“程序化”的建模手段,通过编写规则程序命令,即可实现相应的模型建立。
CityEngine广泛支持常见的三维模型数据格式,比如,OBJ,DAE,DXF,KML,3DS等,并且与ArcGIS等GIS平台无缝集成,具备地图投影功能,可以直接使用ArcGIS提供的二维GIS数据,其成果也可以直接以MULTIPATCH的文件格式存储,可作为ArcGIS的直接数据源。
2.2 CGA规则
CGA(computer generated architecture)是一种基于语义的建模语言,它是整个CityEngine的核心部分[3]。我们通过分析模型对象的组成结构,创建相应规则文件,就能够定义这种模型,并能够对多个对象赋予这些规则,从而实现模型的快速及批量创建。通过CGA创建诸如建筑模型的过程主要如下:①通过外部GIS数据导入或直接绘制的方法在CityEngine中得到要素的二维数据(在CityEngine中,这种数据表现为shape或street);②根据模型对象的结构特征编写相应的CGA规则文件;③选择相应的二维面数据,赋予CGA文件,并对其指定一个入口规则(start rule);④使用CityEngine的模型生成工具命令,生成相应模型;⑤对生成的模型进行使用或导出。
3 线性地物建模
在进行对象的建模时,有些线性对象,如围墙、栅栏、道路等,不同于一般的房屋等独立对象,其具备线性、走向随意、重复性明显、规律性强等特点。对线性地物的三维建模,如果使用传统的静态建模工具,主要做法就是创建其基本组件,然后对组件进行大量的复制、旋转、移动等操作,效率低下,如果使用CityEngine工具,只要在基本组件的基础上,编写少量的几行代码,即能够快速实现其模型的创建,体现了CityEngine的优势。下面就对2种常见的线性地物:栅栏和道路,根据其复杂程度,分别给予介绍。
3.1 栅栏模型的创建
栅栏是一种很常见的建筑模型,这种模型的特点是结构单一,且连续分布,一般在转弯位置是折线,在模型的创建上,方法是:
①分析栅栏的结构,并分解出其基本组成部件,根据部件的难易程度,使用SKETCHUP等软件根据其尺寸做出基础部件,并导出为OBJ或DAE等数据格式。例如,常见的带立柱的铁栅栏,其基础部件可分解为一个立柱和一个带基础的铁格网,如图1所示。
②把已有GIS数据导入CityEngine或直接在CityEngine环境下绘制栅栏的线路数据,由于CityEngine下没有单纯的线数据,导入的或绘制的线默认情况下会转换成街道数据(street),街道包含了街道(street)和人行道(sidewalk)两部分,并且,在转弯部分会默认生成弧形结构。通过CityEngine的属性面板,设置相关参数,使之只包含街道部分,宽度设置为栅栏的宽度,且在转弯的地方更改成折线。
③为栅栏实现设置属性,编写规则,其大致规则主要如下:
thebarrier-->extrude(barrierheight)
split(x){{~postwidth:br1|~fencelength:br2}*|~postwidth:br1}
br1-->i("ynny/assets/post.obj")
br2-->i("ynny/assets/fence.obj")
④规则文件编写完之后,将文件赋给栅栏的街道数据,直接运行,即可得到结果,如图2所示。
3.2 道路模型的创建
相比于栅栏、管线等设施,道路在结构上要相对复杂,单幅、双幅、多幅路等不同的道路形式各异,结构差异很大,但如果是同一类型的道路,却有其共性部分,下面以城市道路的一般形式来说明其建模的基本过程。
3.2.1 基本思路
对于城市道路,要在进行建模之前把它拆分成不同的基本组成部分,然后在CityEngine下对各个部分分别进行建模,从而最终实现城市道路模型的建立[4]。大致步骤如下:首先,将道路按照功能可拆分成CityEngine下支持的街道(street)、人行道(sidewalk)、十字路口(crossing)、交界(junction)以及交界入口(junctionentry)五部分,不同的部分各有不同的内容,如街道主要包括来往车行道,有时还包括隔离带,人行道则包括人行道路面、路灯以及行道树等内容。有时为了简化处理,可以把交界与交界入口归并到十字路口中去。
3.2.2 基本过程
①对道路模型进行分解,得到其基本组成部分,对组成道路的一些基本组件,如路灯、行道树、牌匾等,利用SKETCHUP等软件工具进行制作,并导入到CityEngine;对于路面、车行道等要素主要使用到的贴图,可通过PHOTOSHOP等图像处理软件对采集到的图片进行处理,得到模型需要的贴图数据以备用;
②导入或直接绘制道路网数据,并根据道路各组成部分的宽度和长度信息,使用CityEngine的属性面板进行相应设置;
③为各个组成部件编写规则,下面为一般城市道路建模规则程序的部分主要内容:
Street -->//定义街道,根据车道宽度进行纹理贴图
setupProjection(0,scope.xz, 6, calcLanes(scope.sz))
//根据路宽及车道宽,calcLanes(scope.sz)函数用于计算路面的车道数
projectUV(0) scaleUV(0, 1, 0.98) texture(“streets/road.png”)
Crossing --> //定义十字路口,对水泥路面进行贴图
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 -->//对人行道进行贴图
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 --> //对公路镶边进行贴图
setupProjection(0,scope.xy, scope.sx/ceil(scope.sx/1.1),scope.sy)
projectUV(0) texture(streets/curb.jpg)
④规则完成后,赋给道路数据,即可生成一般城市道路,如图3所示。
4 结语
在CityEngine的平台下,对于规则比较清晰、重复性、规律性较强对象的建模,充分体现了其快速、批量建模的思想,但这并不意味着其适应于所有情况的三维建模。对于那些结构复杂、模块重复性较低的建筑模型或部件,使用CityEngine就无法在效率和性能上得到体现,相反,使用图像建模工具可能还会显得更加高效一些。不管是要进行大规模的数字城市的三维建模还是小区域,如三维校园的创建,总是会遇到情况多变的自然或人工模型,为了体现更高的效率和质量,建议将几种主流三维建模软件结合起来共同使用,充分发挥各个软件自身的应用优势,以达到模型建立的最终目标。
【参考文献】
【1】谢年, 向煜, 徐艇伟. 基于规则的快速三维建模技术研究[J]. 城市勘测, 2013(4):15.
【2】陈秋晓, 张斌, 吴宁, 等. 城市道路参数化建模规则初探[J]. 建筑与文化, 2013(7):40-41.
【3】梁世文, 尹志永, 李雪飞. CityEngine在三维城市建设中的应用[J].
科技传播, 2014(5):33.
【4】吕永来, 李晓莉. 基于CityEngine平台的高速铁路建模方法的研究与实现[J]. 测绘, 2013(1):13-15.