范伦,韩健
(1.珠海市测绘院,广东 珠海 519015; 2.中国人民解放军32023部队,辽宁 大连 116023)
目前,三维数字城市已成为数字城市建设不可缺少的重要部分,并藉以三维城市获取更多的空间信息和属性信息,三维城市在城市规划、管理及提高城市政府管理服务水平等方面起到了积极作用[1]。我国一些重点城市如深圳、广州、上海、苏州等已建成三维数字城市,在城市管理和便捷服务方面起到了重大作用[2]。然而,随着三维数字城市规模的增大,出现了数据获取量大、建设周期长、共享性不良等问题,一定程度上阻碍了三维数字城市建设[3]。如何利用、共享已有数据,最大程度缩小数据获取成本,提高建设效率便成为研究的热点问题。虽然三维建模软件AutoCAD、Sketchup、3ds Max等具有较高的工作效率[4],Open GL三维图形库或VRML虚拟现实建模语言具有较强的开发定制能力[5],但在利用已有数据方面,远远不如GIS平台。由于CityEngine兼容CAD和GIS数据,且在精细建模和联合建模中有广泛应用[6~9],因此可利用现有GIS数据快速创造三维模型,缩短建模周期。本文基于CityEngine,运用已有CAD数据对城市小区进行了CGA规则建模,实现了三维模型的快速建立,大幅提高建模效率。
CityEngine建模依托要素、属性和规则三方面内容,使用者可以根据场景中的每个元素提供更为详细的信息,建立起更复杂更贴近真实三维世界的场景。
CityEngine是美国Esri公司收购的三维建模软件,采用计算机生成建筑模型(Computer Generated Architecture,CGA)作为设计语言[10],建模的思想是定义各类规则,通过迭代精炼设计创建细节模型。概括起来,CGA自定义规则包括条件规则、参数规则、标准规则和随机规则,CityEngine所创建的模型均由该规则驱动。建模时首先利用某些参数或变量建立原始三维模型,如若改变模型,可通过重置这些参数或变量来实现,因此通过CGA建立的模型是动态的,这一点在一定程度上是优于其他建模平台的。CGA参数可以是反映模型几何特征的参数,也可以是反映材质、形状等属性参数,因此参数的确定是建模的核心。CityEngine建立的模型保留了CAD或GIS属性,可以进行三维显示、分析和计算,也可以转换成其他平台支持的三维模型格式,有利于数据的查询和分析,因此CGA建模的关键是多次优化设计编写好的规则模型,反复修改模型细节,进而完成逼真建模。
类似C++语法,CGA采用函数的方法定义规则,规则的功能命名为函数名,传递的要素定义为参数或属性,常见的函数有extrude、comp、projectUV、split和texture等函数。extrude的功能是将平面在某一方向拉伸出一定长度,有两个参数,默认height参数是拉伸值,也可以同时运用axisWorld和height两个参数,将面沿着世界坐标系轴拉伸至一定长度。comp是将组件对象进行分割,参数f分割面,e分割边,v分割顶点,分割面时,通常选取front、back、left、right、top、bottom六个参数。projectUV是为了完成纹理映射而进行空间投影对应。split用于沿某轴分割模型侧面,进而起到分层作用,参数splitAxis用于指定分层方向。texture用于粘贴纹理,有一个string类型的参数,一般是指定纹理贴图的目录。主要函数的功能与参数释义如表1所示。
CGA函数功能及其释义 表1
三维城市建模数据为珠海某小区不动产调查数据,在南方CASS软件中数字化成图,平面坐标采用当地城市坐标系,高程采用1985国家高程基准,成图比例尺为1~500。外业测绘时采用全站仪草图法,对小区街道和建筑物轮廓进行了实地测量,内业在CASS 9.0中绘图完成,符号采用CASS定义的标准符号。为了便于读取数据,CASS 9.0成图的dwg格式数据被输出为shp格式,并将道路网、零星点状地物和居民地分层导出。在CityEngine中导入shp数据,可实现数据读取,数据导入后如图1所示。纹理贴图采用相机拍照法,对小区内地面道路、广告牌、建筑侧面等进行拍照,经过色彩调整、匀光和纠正处理后,作为建模物体侧面纹理。同时,通过全站仪对边测量实地量取建筑物高度,由dwg图形反算道路各单元长度,作为建模基本数据。
图1 CityEngine中导入shp数据
数字三维城市建模分为几何建模和纹理制作两个主要流程。几何建模首先将1∶500的CAD数据经提取、转换后分层转为shp文件,在ArcMap中作几何量度和纹理样式处理,将道路宽度、楼房高度及层数作为建筑物属性录入转化后的shp数据,同时比对道路、楼房等物体的真实纹理,确定各地物纹理样式。几何量度和纹理确定后,运用CityEngine的CGA规则进行建筑物、构筑物建模,生成三维建筑白模。在纹理制作方面,运用数码相机拍摄建筑物、道路等高清影像,在Photoshop中进行匀色、纠正处理,使倾斜纹理影像纠正为正射影像。在三维白模上粘贴相应纹理,生成数字三维城市模型,其建模技术流程如图2所示。
图2 三维城市建模流程
CityEngine主要解决两类建模问题,第一是道路建模,第二是建筑物建模,其他附属物建模可采用附属设施模型库,也可通过3ds Max实物建模后导入到CityEngine中。对于道路建模,CityEngine规定了一系列规则,建模时需依据已有数据按规则运行。对于建筑物建模,需组合调用2.2所述函数,实现动态快速建模。
(1)道路建模
CityEngine道路建模是基于拆分原理的,也就是把道路拆分为若干活部件,CityEngine2014版本支持11种拆分,拆分后的道路部件分别是主街道(Street)、人行道(Sidewalk)、交叉口(Crossing)、转弯部(Joint)、交界处(Junction)、交界入口(JunctionEntry)、分支路(Freeway)、分支路连接处(FreewayEntry)、环岛(Roundabout)、环岛连接处(RoundaboutEntry)、环岛内岛(RoundaboutIsland)。由于实验小区并不复杂,因此建模中未应用环岛、环岛连接处、环岛内岛三个部件。
CGA规则建模首先将选取整条道路,沿道路中线纵向剖分为主街道、人行道、交叉口、转弯部、交界处、交界入口、分支路和分支路连接处,然后横向剖分,直至各部件剖分后可以独立进行参数调节为止。主街道范围选取后独立剖分,使之与人行道分离,赋予实际纹理,转弯部处理与主街道相同;人行道分离后,对shp数据进行extrude拉伸,高度和实际尺寸一致,运用texture函数赋予真实纹理;交叉口、交界处量取实际转角和半径,粘贴真实纹理。交界入口、分支路和分支路连接处直接贴上真实纹理,完成真实建模。经过以上处理,一般道路与立交道路处理效果如图3所示。
图3 数字三维城市道路建模
(2)建筑物建模
文献[3]描述了建筑物建模的一般过程,本文建模首先导入地面DEM,然后通过确定建筑物底面,运用extrude函数在垂直方向进行真实尺度拉伸,依据建筑物层数信息,应用comp函数对拉伸后的白模进行分面,再利用split函数进行分割,直至建筑物侧面与真实情况完全吻合为止。最后利用projectUV、texture函数贴图纹理,完成建筑物建模。
建筑物CGA规则化编程是三维模型的逆向分解,以建筑物属性信息作为参数,通过建模规则函数将拆分的建筑物进行三维重建。建筑模型拆分程度越高,需要的建筑物属性信息愈多,相应的CGA规则编写也更复杂,所建模型也越加精细。为了有效利用建模规则,实验中首先将实验区建筑物按外形分为多边形建筑物、圆形建筑物、四面形建筑物三类,在构建模型过程中如果出现相同类型的建筑物运用同一规则,实现批量快速建模,而复杂建筑物则单独编写规则,规则不重复利用。运用前述方法,实验区地物粗模如图4(a)所示,三维精细建模效果如图4(b)所示,实验区中典型的建筑物挤出、剖分、建顶、投影和纹理贴图CGA代码片段如下所示。
extrude(26.5)mass-->
mass-->
comp(f) {front:frontwall|back:backwall|side:Facade | top:Roof}
Roof --> roofGable(rand(18,25),1,1)
setupProjection(0,scope.xy,~1,~1)
projectUV(0)
texture("images/myRoof_2.jpg")
图4 实验区CGA数字三维城市建模
(3)精度与效率分析
选取实验区10座典型建筑物作为精度效率分析对象,其中6座建筑物部分层结构相同,4座各层结构互不相同,分别在3ds Max、Sketch UP和CityEngine中进行建模,对其精度和效率分析,得表2所示结果。分析表2可知,3ds Max、Sketch UP和CityEngine三种建模平台纹理贴图效果相当,但3ds Max具有最高的建模精细度,Sketch UP和CityEngine次之。在建模效率方面,3ds Max达到 32.4 h,Sketch UP 21.3 h,CityEngine只有 5.2 h,因此CityEngine具有最高的建模效率,其根本原因是CityEngine采用规则化建模,用定义规则的方法代替手工操作,相同部件可利用同一规则建模,因此具有最低的手动操作复杂度。
CityEngine建模精度与效率分析 表2
基于已有二维CAD数据,通过数据转换,运用CityEngine CGA规则化建模方法,进行了数字三维城市建模。实验表明,基于CityEngine的三维建模具有语言简单、规则易于重复使用、数据兼容性好、属性信息易于保存、建模效率高等优点。CGA规则化建模函数较少且调用方法简单,编程过程中可动态调整模型,因此对于相似建筑CGA规则可以重复使用,因此适宜于广域大规模三维建模。CityEngine CGA建模具有良好的数据接口,尤其是支持多类CAD数据和地理信息数据,可极大节省数据获取成本,提高建模效率,这也是优于其他建模方法的关键所在。然而,本文基于CGA规则建立的三维模型没有考虑其附有属性,未实现二、三维数据联动,且模型未实现网络发布,分析查询功能较弱。后续的研究应加强数据联动性和空间分析研究,使建筑物的属性被定制性访问,构建智能性优良的三维数字模型。