APP下载

基于CityEngine和SketchUp的快速精细三维建模

2021-07-28孙守清陈宜金陈俊美

北京测绘 2021年7期
关键词:纹理建筑物建模

孙守清 陈宜金 陈俊美

(中国矿业大学(北京) 地球科学与测绘工程学院, 北京 100083)

0 引言

随着地理信息系统在各个领域的深入应用,在真正意义上的三维空间来处理问题成为人们的迫切要求。得益于近些年来计算机技术、三维可视化技术和虚拟现实技术的迅猛发展,三维地理信息系统(Geographic Information System,GIS)的建立成为可能[1]。三维建模方法作为实现三维GIS的技术核心,是GIS领域一个重要的研究方向,是建立现实世界虚拟化三维场景模型的基础。

传统手工建模方法虽然创建的模型精细化程度高,展示效果好,但是建设周期长、效率低且缺乏可重用性[2]。如何利用现有数据,降低数据获取成本,提高模型构建效率成为业界关心的热点。由于城市建模软件(CityEngine)能够兼容CAD和GIS数据[3],且在批量、精细、快速建模中得到广泛应用[4-6],具有高度的复用性,适合于大场景的三维建模。本文将基于计算机生成的建筑模型(Computer Generated Architecture,CGA)规则的快速建模与基于草图大师软件(SketchUp)的传统三维精细建模结合起来,充分利用现有的GIS数据,对广域大范围的场景建模进行实验分析,在保证一定精度的条件下,相较于传统的手工建模大幅提高建模速率。

1 CityEngine与SketchUp的综合运用与互补

CityEngine的建模核心思想是首先定义规则,再通过反复的优化设计和迭代创造出更多的细节以此来实现建模[7]。其能充分利用现有的GIS数据,并且对于普通建筑物即非标志性建筑物的批量化模型构建具有得天独厚的优势。这个优势是基于普通建筑物的编写规则较为常规,且大量的普通建筑的外观及其内部风格基本雷同,因此一次的规则编写就可以套用到多种类似建筑物上,节省大量的时间。但是对于标志性建筑物的模型构建,CityEngine的优势被大幅度地削弱。常用CGA函数及功能如表1所示。

表1 常用CGA函数及功能

SketchUp对于高精度、高仿真度的模型构建具有独特的优势,且其建模方法简单便捷、上手速度快,具有庞大的模型数据库。图1展示了SketchUp建模的过程。

图1 SketchUp建模过程示意图

CityEngine和SketchUp的协同使用,使得三维场景建模能够同时结合两个软件的优点,在保证建模工作速率的同时,又在一定程度上提高了对于场景建模最重要的标志性建筑模型构建的精度,弥补了CGA规则的不足。

2 实例分析

2.1 建模流程

三维模型的构建需要依赖数据和软件的交互配合,各个步骤并不仅仅是承接关系,更多的是相互关联、相互影响。基于CityEngine和SketchUp的三维模型构建流程如图2所示。

图2 三维模型构建流程

2.2 数据获取与处理

建模数据的获取主要指遥感影像数据的获取、贴图数据获取和二维矢量数据的获取三大部分,是决定建模效果的关键因素。

2.2.1遥感影像数据获取

使用GoodyGIS获取所要建模地区的高程数据和影像数据,并根据需要选择相应坐标系。获取到的csv格式高程数据需要在ArcMap中转换成相应的tif格式灰度高程文件。

2.2.2贴图数据获取

贴图数据的获取对于后期的模型效果具有十分重要的作用,获取最近的贴图数据才能显示最真实的模型外貌[8]。本文中贴图数据均为实地拍摄所得,并在Photoshop中进行图像的裁剪和渲染等处理。

2.2.3矢量数据获取

CGA规则建模需要先得到建模所在地区的矢量化文件,即建模地区的建筑物及其附属物的点、线、面属性。将建模区域的遥感影像导入ArcGIS中对其进行配准然后进行矢量化操作[9],并对得到的二维矢量化数据进行建筑物高度、楼层数和绿化带等属性的添加。

2.3 场景创建

场景创建是三维建模的前期工作之一,包括地形的导入、道路规划和基础布局三个部分[7]。一般来说,在三维模型的生成与规划过程中,地形数据与道路数据之间往往存在着不贴合或不够完善的地方,需要对其进行进一步的修改与处理。

在完成场景的创建之后,需要对已创建的场景加载地形数据,以增强场景的真实性和立体感,增强可视化效果[10]。

道路是场景创建的一个重要组成部分,就像身体的血管一样,支撑着整个建模场景的运转。CityEngine支持自由绘制道路和闭合街区自动生成矢量模型[11]。如果之前在利用ArcGIS对栅格数据进行矢量化的过程中已经完成了对道路的矢量化,这里可以直接打开shape模型生成道路,若道路没有在之前进行处理,可以借助CityEngine提供的工具进行道路编辑,生成道路网。

2.4 CGA规则建模

CGA规则作为CityEngine的独特语言模式,其原理是将建筑物具体化、细节化、简单化的拆分为各个小的结构部件,对其进行规则编写、迭代生成,然后再拼接为一整个模型[9]。

纹理建模是决定建筑物外貌视觉效果好坏的关键[7],其包括对建筑物墙体表面的纹理建模和门窗纹理的建模。纹理建模根据方式的不同可以分为两大类,一类是规则纹理建模,其采用编写规则来实现对建筑物外观的贴图,另一类则是手工纹理的贴取,采用手动交互式建模方法来实现对建筑外观的贴图。

根据上述说明,编写CGA规则,读取建筑物相关属性,根据定义的建筑规则集进行楼层的分解和瓦片的分裂[12],然后利用贴图(texture)函数使用相应的模型资源来对建筑物的窗户、门、墙进行纹理贴图。建筑物部分CGA代码如下:

Building-->

comp(f) { front: Frontfacade|left:Sidefacade|right:Sidefacade|back: Frontfacade|top:Roof }

Frontfacade-->

split(y){ groundfloor_ height: Groundfloor|{~floor_height:Floor}*|floor_height:Topfloor}

Sidefacade-->

split(y) { groundfloor_ height: Sidefloor|{0.5:Tiles|~floor_height:Sidefloor}*}

const roof_tex="wall/wall1.jpg"

Roof-->

setupProjection(0,scope.xz,scope.sx,scope.sz)

texture(roof_tex)

projectUV(0)

Gloundfloor-->

split(x) {1:GloundWall|{~tile_width: Groundtile }*|1:GloundWall}

Groundtile-->

split(x) { '0.3: wall|'0.4:GDoor|'0.3: wall}

const gdoor_tex="door/door1.jpg"

GDoor-->

setupProjection(0,scope.xy,scope.sx,scope.sy}

texture(gdoor_tex)

projectUV(0)

建筑物模型效果如图3所示。

图3 建筑物模型效果

2.5 SketchUp建模

其他的复杂建筑物都可以在SketchUp中进行手工建模。为了使手工建模的尺寸与实际建筑物尺寸相同,需要将矢量化数据导入SketchUp中,根据矢量化数据尺寸进行真实建筑物的三维模型构建[13]。为了更加真实地对现实世界的物体进行描绘,模型的纹理数据需要在贴图之前使用Photoshop对其进行相应的裁剪、拼接等变换。最终成果如图4所示。

图4 模型构建效果

2.6 后期处理与发布

所有的普通建筑物CGA规则创建、复杂建筑物的手工精细化建模和纹理图像的处理完成之后,就可以实现建模区域的批量化模型构建了。与普通建筑物的批量化建模类似,复杂建筑物的模型构建也可以直接选中图层对象,或者直接将规则文件拖动到所需建模的矢量文件上,可以自动根据矢量化数据生成模型[14]。

将建模区域所有模型构建完成之后,可以选择将其发布到WebScene上进行浏览和分享。由于一个工程场景中包含多个图层、要素甚至是矢量数据库,逐项导出容易导致数据的丢失或者错误,因此需要将其整体打包以此来进行发布。导出效果如图5所示。

图5 导出效果

3 结束语

本文使用CityEngine和SketchUp进行三维模型的构建,充分结合CityEngine在批量化建模方面的独特优势和SketchUp对于复杂建筑物的精细建模的易操作性,在保证对主要建筑物真实精细还原的同时,提高了区域建模的速率。对想要充分利用现有GIS数据,同时需要进行大范围三维模型构建的项目提供借鉴。

猜你喜欢

纹理建筑物建模
物理建模在教与学实践中的应用
在经历中发现在探究中建模
联想等效,拓展建模——以“带电小球在等效场中做圆周运动”为例
基于BM3D的复杂纹理区域图像去噪
求距求值方程建模
描写建筑物的词语
肺纹理增多是病吗?
爆炸过后
TEXTURE ON TEXTURE质地上的纹理
Relationship between mode of sport training and general cognitive performance