共计 1969 个字符,预计需要花费 5 分钟才能阅读完成。
背景介绍:为什么选择 CityEngine
CityEngine 是 Esri 公司推出的三维城市建模专业工具,特别擅长通过程序化规则快速生成大规模城市景观。与传统手工建模相比,它能实现:
- 效率飞跃:几分钟生成数平方公里城市模型
- 规则驱动:修改参数即可批量调整建筑风格
- GIS 集成:直接使用真实地理数据作为基底
- 动态更新:随时响应城市规划变更需求
典型应用场景包括智慧城市可视化、游戏场景制作、影视特效背景等。2023 版新增了实时渲染优化和增强的 Python API 支持。
核心概念:理解 CGA 规则建模
CGA(Computer Generated Architecture)是 CityEngine 的专用脚本语言,其核心思想是:
- 形状分解:将建筑拆分为屋顶、立面、楼层等基础组件
- 规则递归:通过不断细分和变形构建复杂结构
- 属性参数化:用变量控制建筑高度、风格等特征
例如,一个基础规则可能这样描述:” 将立方体按层数分割→每层添加窗户→顶部添加倾斜屋顶 ”。这种方法的优势在于修改层数变量就能同步更新所有建筑。
环境准备:5 分钟快速配置
- 从 Esri 官网下载 CityEngine 2023.0 安装包
- 安装时勾选 ” 示例工程 ” 选项(含实用学习资源)
- 首次启动后建议:
- 设置工作空间路径(建议用 SSD 硬盘)
- 调整显卡设置:偏好设置→显示→选择独立 GPU
- 安装 OpenStreetMap 插件:帮助→扩展→搜索 ”OSM”
实战案例:从 OSM 数据到三维城市
数据准备阶段
- 获取 OpenStreetMap 数据:
- 在 CityEngine 点击文件→导入→OpenStreetMap
- 框选目标区域(建议首次尝试 1km×1km 范围)
-
保存为.obj 文件备用
-
数据预处理:
- 清理无效多边形:选择所有形状→右键→Cleanup Geometry
- 分类要素:通过属性表分离道路、绿地、建筑等地物
模型生成阶段
// 基础建筑规则示例 1:简易方盒子
version "2023.0"
@StartRule
Lot --> extrude(10) // 初始高度 10 米
Building
Building --> split(y){~5: Floor}* // 每层分割 5 米
Floor --> split(front){ ~2: Wall
| ~1: addWindow }* // 前后立面交替墙窗
addWindow --> color("#88CCFF") // 蓝色窗户
offset(-0.1)
rect

进阶规则:添加屋顶细节
// 示例 2:坡屋顶建筑
Building --> case geometry.area > 200:
split(y){~5: Floor}*
comp(f){top: Roof}
else: ExtrudedBox
Roof --> center(x)
gable(30) // 30 度坡顶
color("#FF9999")
性能优化关键策略
-
LOD 分级:为不同视距创建简化版本
LOD_Group --> case distanceToCamera < 100: HighDetail case distanceToCamera < 500: MediumDetail else: LowDetail -
纹理优化:
- 使用 atlas 纹理合并小贴图
-
建筑群共享材质球
-
动态加载:
- 按区块分割城市模型
- 通过 Python 脚本控制加载范围
常见问题解决方案
- 建筑悬空问题:
- 检查 DEM 数据是否缺失
-
在规则开头添加
Lot --> alignScopeToTerrain -
窗户排列错位:
- 确保立面分割尺寸是窗户宽度的整数倍
-
改用
repeat语法替代split -
导出到 Unity 材质丢失:
- 导出时选择 FBX 2018 格式
- 勾选 ”Embed Media” 选项
-
在 Unity 中重新指定 shader
-
OSM 数据不完整:
- 混合使用 Mapbox 卫星图
-
手动补充关键地标
-
运行卡顿处理:
- 关闭实时阴影预览
- 减少视窗中同时显示的规则数量
数据版权注意事项
- 商用项目需谨慎使用 OSM 数据(遵守 ODbL 协议)
- 建筑纹理建议使用 Megascans 等授权资源
- 导出模型时移除无关属性数据
进阶学习路径
- 官方资源:
- Esri CityEngine Tutorials(内置示例工程)
-
CGA Grammar Cheat Sheet(PDF 速查表)
-
推荐书目:
- 《Procedural Modeling with CityEngine》
-
《GIS-based 3D City Modeling》
-
社区支持:
- CityEngine Subreddit
- Esri GeoNet 论坛
效率对比实测数据
以 1 平方公里城区为例:
| 方法 | 耗时 | 模型面数 | 修改灵活性 |
|---|---|---|---|
| 传统手工建模 | 40 小时 | 800 万 | 低 |
| CityEngine | 15 分钟 | 200 万 | 高 |
通过合理设置 LOD,实际项目中可进一步将面数压缩到 50 万以内。
结语
掌握 CityEngine 需要理解其 ” 编写规则而非雕琢模型 ” 的核心思路。建议从改造官方示例开始,逐步尝试原创规则。遇到问题时,多利用 3D 视图中的规则调试工具(红线显示分割过程)。记住:优秀的程序化建模师既是建筑师,也是算法设计师。
