在当今快速发展的城市规划和建筑设计领域,三维建模已成为一个不可或缺的工具。它不仅帮助我们以更直观的方式理解和展示城市空间,还能在设计和决策过程中发挥关键作用。本文将探讨如何基于GIS数据,通过CityEngine软件快速构建富有细节的城市三维建模模型。我们将从GIS数据的获取和处理开始,逐步介绍如何将其转换为CityEngine中的参数化模型。
数据获取
本文介绍的数据获取方法是通过QGIS软件获取GIS开源数据,首先电脑上需要安装QGIS软件,安装方法:GIS Experience (六):QGIS安装及使用教程 - 知乎 (zhihu.com)。

软件安装完毕,打开QGIS,并在"Plugings"点击"Manage and Install Plugins"下载并安装对应插件。

在"Plugings"的搜索框中输入"osm"进行模糊查询,检索到"QuickOSM"插件并进行安装。

插件安装完毕,可在"Vector"中点击"安装好的"QuickOSM"打开该插件。

选中"QuickOSM"插件弹窗中的"Quick query",并在右侧的"key"中筛选想要下载的数据。

因为我们要做建筑参数化建模,所以在"Key"中选择"building"。

并选择想要下载城市区域,例如"苏州市姑苏区",点击"Run query"运行。

即可获取苏州市姑苏区的建筑矢量数据

数据处理
将下载好的建筑的矢量数据加载到QGIS中,对该原始数据进行优化处理。首先在图层框中选中该数据图层,然后点击工具栏中的属性表图标,也可以右键打开属性表。因为该建筑矢量数据的属性表中没有建筑高度数据,无法满足建筑参数化建模的基础属性需求,所以需要对数据进行简单处理,即为建筑随机分配高度。

点击属性表的编辑图标,使属性表处于可编辑状态。

观察属性表可以发现"height"高度属性缺失较多,因此需要给建筑赋予高度。点击下图左侧下拉框选择"height" 属性,在中间输入框输入函数"rand(10,100)"进行10到100之间高度随机,然后点击运行。


点击下图编辑图标进行属性保存。

将数据导出为".shp"格式的矢量数据

设置矢量数据存放的位置和数据命名。

设置矢量数据的模型坐标系

设置完存储位置和坐标系点击"ok"导出。步骤到此数据部分已完成。接下来是模型生成部分。

数据导入建模软件
本文中模型是通过Cityengine软件进行模型的快速构建,首先电脑上需要安装Cityengine软件,安装方法: CityEngine2022发布及下载地址 - 知乎 (zhihu.com)

软件安装完毕,将软件打开,新建Cityengine工程。点击下图的"File",再点击"NEW..."。选择弹框中的"CityEngine Project"点击"Next"

在下图中设置项目名称,并设置项目存放的位置,并点击"Finish"


在软件中可以找到刚刚创建的建筑工程,接下来将之前处理好的数据,放进"data"数据文件夹中。

点击"scene"文件夹,右键新建场景文件

设置场景名称,并选择该场景的坐标系为"3857"。并点击完成场景的创建。


接下来创建建筑生成规则,首先点击"rule"文件夹,右键新建"CGA Rule File"CGA规则文件。

设置规则的文件名称,点击"Finish"创建完成。

参数化建模规则编写
最重要也是最核心一步就是编写参数化建模规则代码,以下是提供的代码样例,规则编写完成后保存即可。
下面给大家介绍一下模型规则构建的思路。每个规则编写都需要以"@StartRule"开始,以"lot-->"开头,下面正式开始啦。
首先需要给建筑添加高度,有两种方式,第一种是直接在代码里给到高度随机,写法是"extrude(rand(10,50))"
第二种是通过读取我们之前在数据层面设定的建筑高度,通过"attr height =10",可以链接到矢量数据的高度属性。如果我们的高度是基于真实数据设置的,我们就可以赋予真实的楼高。
其次就要给建筑写一段随机分配的代码。目的是让建筑外立面分布具备随机性,该方法是通过百分比的方式将数据中所有的矢量数据分成若干份。

最后就是给分好的类别单独编写建筑的立面样式,可以通过"split"函数分出你想要的建筑段数,从而分配想要的建筑颜色。完成这些步骤的编写,这个随机样式的建筑规则就完成啦。

建筑生成
接下来就是建筑生成,将数据拖进之前创建的"building_scene.cej"场景中。


给场景中的建筑矢量数据赋予刚刚编写的建筑规则并点击生成即可完成定制化三维建筑模型生成,模型生成完毕后导出即可,支持常用的fbx、glb、obj等。
📎录制_2024_04_09_16_01_52_232.mp4



工程文件可提供下载
注册Mapmost alpha可获取完整代码和工程哦
关注Mapmost,持续更新GIS、三维美术、计算机技术干货
Mapmost是一套以三维地图和时空计算为特色的数字孪生底座平台,包含了空间数据管理工具(Studio)、应用开发工具(SDK)、应用创作工具(Alpha)。平台能力已覆盖城市时空数据的集成、多源数据资源的发布管理,以及数字孪生应用开发工具链,满足企业开发者用户快速搭建数字孪生场景的切实需求,助力实现行业领先。