肖永东,顾晋瑜
(云南能源职业技术学院,云南 曲靖655001)
近年来,由于三维建模及VR 技术能够实现对周围环境的极致逼近,会让使用者有一种身临其境的感觉,受到了广大群众的欢迎。三维建模技术也随着市场的需求得到了快速发展。三维建模技术是建立现实世界虚拟化三维场景的基础,它能够将对地理空间的表示从传统的二维表达方式转换为以三维立体的方式来展示,使之能够更加真实、形象地展示现实世界[1]。目前,能够进行三维建模的相关技术和软件很多,如3DMax,SketchUp、Lumion 等,这些软件的核心思想都是把现实研究对象拆分成若干的基本几何形体,然后对其进行基本模型的建立及组合处理,是一种静态的模型[2]。本文介绍一种基于不同工作原理的建模工具:CityEngine,该建模软件主要是基于规则进行,通过对表示对象的拆解,组织其规则结构,然后编写规则文件,即可实现相应模型的创建,它的主要优势在于能够对规则文件的重复使用,并且通过对规则文件的简单修改,就可实现模型的更改,相对于3DMax 等建模工具,它具备了动态、快速、批量建模的特点,为三维建模领域提供了一种新的思维与手段。
CityEngine 是一款城市快速建模的软件,其主要思想是一种基于规则的“程序化”的建模手段,通过编写规则程序命令,即可实现相应的模型建立。
CityEngine 广泛支持常见的三维模型数据格式,比如,OBJ,DAE,DXF,KML,3DS 等,并且与ArcGIS 等GIS 平台无缝集成,具备地图投影功能,可以直接使用ArcGIS 提供的二维GIS数据,其成果也可以直接以MULTIPATCH 的文件格式存储,可作为ArcGIS 的直接数据源。
CGA(computer generated architecture)是一种基于语义的建模语言,它是整个CityEngine 的核心部分[3]。我们通过分析模型对象的组成结构,创建相应规则文件,就能够定义这种模型,并能够对多个对象赋予这些规则,从而实现模型的快速及批量创建。通过CGA 创建诸如建筑模型的过程主要如下:①通过外部GIS 数据导入或直接绘制的方法在CityEngine 中得到要素的二维数据(在CityEngine 中,这种数据表现为shape或street);②根据模型对象的结构特征编写相应的CGA 规则文件;③选择相应的二维面数据,赋予CGA 文件,并对其指定一个入口规则(start rule);④使用CityEngine 的模型生成工具命令,生成相应模型;⑤对生成的模型进行使用或导出。
在进行对象的建模时,有些线性对象,如围墙、栅栏、道路等,不同于一般的房屋等独立对象,其具备线性、走向随意、重复性明显、规律性强等特点。对线性地物的三维建模,如果使用传统的静态建模工具,主要做法就是创建其基本组件,然后对组件进行大量的复制、旋转、移动等操作,效率低下,如果使用CityEngine 工具,只要在基本组件的基础上,编写少量的几行代码,即能够快速实现其模型的创建,体现了CityEngine 的优势。下面就对2 种常见的线性地物:栅栏和道路,根据其复杂程度,分别给予介绍。
栅栏是一种很常见的建筑模型,这种模型的特点是结构单一,且连续分布,一般在转弯位置是折线,在模型的创建上,方法是:
①分析栅栏的结构,并分解出其基本组成部件,根据部件的难易程度,使用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所示。
图2 栅栏效果
相比于栅栏、管线等设施,道路在结构上要相对复杂,单幅、双幅、多幅路等不同的道路形式各异,结构差异很大,但如果是同一类型的道路,却有其共性部分,下面以城市道路的一般形式来说明其建模的基本过程。
3.2.1 基本思路
对于城市道路,要在进行建模之前把它拆分成不同的基本组成部分,然后在CityEngine 下对各个部分分别进行建模,从而最终实现城市道路模型的建立[4]。大致步骤如下:首先,将道路按照功能可拆分成CityEngine 下支持的街道(street)、人行道(sidewalk)、十字路口(crossing)、交界(junction)以及交界入口(junctionentry)五部分,不同的部分各有不同的内容,如街道主要包括来往车行道,有时还包括隔离带,人行道则包括人行道路面、路灯以及行道树等内容。有时为了简化处理,可以把交界与交界入口归并到十字路口中去。
3.2.2 基本过程
①对道路模型进行分解,得到其基本组成部分,对组成道路的一些基本组件,如路灯、行道树、牌匾等,利用SKETCHUP等软件工具进行制作,并导入到CityEngine;对于路面、车行道等要素主要使用到的贴图,可通过PHOTOSHOP 等图像处理软件对采集到的图片进行处理,得到模型需要的贴图数据以备用;
②导入或直接绘制道路网数据,并根据道路各组成部分的宽度和长度信息,使用CityEngine 的属性面板进行相应设置;
③为各个组成部件编写规则,下面为一般城市道路建模规则程序的部分主要内容:
④规则完成后,赋给道路数据,即可生成一般城市道路,如图3所示。
图3 道路模型效果
在CityEngine 的平台下,对于规则比较清晰、重复性、规律性较强对象的建模,充分体现了其快速、批量建模的思想,但这并不意味着其适应于所有情况的三维建模。对于那些结构复杂、模块重复性较低的建筑模型或部件,使用CityEngine 就无法在效率和性能上得到体现,相反,使用图像建模工具可能还会显得更加高效一些。不管是要进行大规模的数字城市的三维建模还是小区域,如三维校园的创建,总是会遇到情况多变的自然或人工模型,为了体现更高的效率和质量,建议将几种主流三维建模软件结合起来共同使用,充分发挥各个软件自身的应用优势,以达到模型建立的最终目标。