CityEngine 综合学习指南
CityEngine 是一款由 Esri 开发的专业三维建模软件,它基于程序化建模 和CGA (Computer Generated Architecture) 规则,能够高效、批量地创建具有高度真实感和一致性的城市三维模型,它广泛应用于城市规划、建筑设计、游戏开发、影视制作和GIS数据可视化等领域。

本教程将分为以下几个部分,帮助你从入门到精通:
- 核心概念理解 - 为什么选择 CityEngine?它的工作原理是什么?
- 新手入门路径 - 第一步该做什么?如何快速上手?
- 核心功能详解 - 深入理解 CGA、资产、工作流等。
- 进阶学习资源 - 如何提升技能,达到专业水平?
- 实用技巧与问题解答 - 常见问题与解决方案。
第一部分:核心概念理解 (在开始之前)
在打开软件之前,理解这几个核心概念会让你事半功倍。
程序化建模 vs. 手动建模
- 手动建模 (3ds Max, Maya, Blender): 像捏橡皮泥一样,一个面一个面、一个物体一个物体地创建,优点是自由度高,能做出非常精细和独特的模型,缺点是耗时、重复劳动多、难以批量修改。
- 程序化建模: 不是创建模型本身,而是编写“规则”或“蓝图”来生成模型,你告诉软件:“这是一个地块,我需要你根据这个规则,自动为我生成一栋带有玻璃幕墙和底层商铺的办公楼”,软件会根据规则自动生成。
CityEngine 的核心优势:
- 效率极高: 几个小时就能生成整个城市的街区。
- 一致性保证: 规则统一,确保所有建筑风格、高度、材质等保持一致。
- 动态调整: 修改一条规则,所有相关的建筑都会瞬间更新,无需重新手动建模。
- 数据驱动: 可以将 GIS 数据(如地块用途、高度限制)直接作为规则输入,实现数据驱动的智能建模。
CGA (Computer Generated Architecture) 规则
这是 CityEngine 的“灵魂”,CGA 是一种专门为三维建模设计的、基于脚本的领域特定语言。

- 规则 = 算法 + 几何体
- 你写的 CGA 代码,就像一份详细的建筑说明书,它定义了从初始形状(如一个立方体地块)到最终复杂模型的一系列步骤和逻辑。
- 示例:
Lot --> extrude(20) // 规则1:将地块向上拉伸20米 Building // 规则2:执行“Building”规则 Building --> splitY(3){ ~3 : Floor | Roof } // 规则2:在Y轴上按3米分割,重复3次生成楼层,最后生成屋顶 Floor --> color("white") texture("facade_texture.jpg") // 规则3:给楼层赋白色材质和纹理 Roof --> color("red") // 规则4:给屋顶赋红色
工作流
CityEngine 的标准工作流通常是:
- 获取数据: 导入 GIS 数据,如 Shapefile (
.shp) 或 File Geodatabase (.gdb),这些数据定义了地块、道路、建筑轮廓等。 - 创建/编辑规则: 在规则编辑器中编写或修改 CGA 代码。
- 应用规则: 将规则文件 (
.cga) 拖拽到场景中的对象(如地块)上。 - 生成模型: 软件根据规则自动生成三维模型。
- 导出: 将生成的模型导出到常用格式,如
OBJ,FBX,OSGB等,用于其他软件。
第二部分:新手入门路径 (30天入门计划)
这个计划旨在让你在一个月内掌握 CityEngine 的基本操作和核心思想。
第1周:熟悉界面与基础操作
- 目标: 能够独立导航场景,创建和编辑基本几何体。
- 任务:
- 安装软件: 下载并安装 Esri 提供的 CityEngine 版本(有试用版)。
- 启动与界面: 打开软件,熟悉主界面布局:3D视图、场景图层、规则编辑器、属性编辑器、大纲视图。
- 视图导航: 学习使用鼠标左键(旋转)、中键(平移)、右键(缩放)来操作 3D 视图。
- 创建基本形状: 在场景中创建一个
Rectangle(矩形) 和一个Circle(圆形)。 - 编辑属性: 选中一个形状,在属性编辑器中修改其
Width,Height,Depth等参数,观察 3D 视图的变化。 - 保存项目: 学习如何保存
.cej项目文件。
第2周:第一个 CGA 规则
- 目标: 编写并应用你的第一条 CGA 规则,感受程序化建模的魅力。
- 任务:
- 创建新规则: 在
Rules文件夹中,右键新建一个 CGA 规则文件,MyFirstRule.cga。 - 编写简单规则: 在规则编辑器中输入以下代码:
@StartRule MyFirstRule --> extrude(10) // 将初始形状拉伸10米 - 应用规则: 在场景中选中你第一周创建的矩形,然后将
MyFirstRule.cga文件直接拖拽到这个矩形上。 - 生成模型: 选中矩形,右键选择 Generate (或按
Ctrl+G),你应该能看到一个 10 米高的白色立方体。 - 修改规则: 回到规则编辑器,将
extrude(10)改为extrude(20),然后再次生成模型,观察立方体高度如何瞬间变化。
- 创建新规则: 在
第3周:学习核心 CGA 语法
- 目标: 掌握 CGA 中最常用、最核心的语法和函数。
- 任务:
split(分割): 学习如何使用splitX,splitY,splitZ和split来分割几何体,这是创建楼层、窗户的基础。- 示例:
extrude(30) splitY(3){ ~3 : Floor | Roof }
- 示例:
color与texture(颜色与纹理): 学习如何为几何体赋予颜色和贴图,准备一张砖墙纹理图。- 示例:
Floor --> color(1,0,0) texture("brick.jpg")
- 示例:
comp(组件): 学习如何将重复的建模过程封装成一个“组件”,使代码更简洁,将制作一扇窗户的过程封装成一个Window组件。- 示例:
Window --> extrude(0.1) color("blue")
- 示例:
case...else(条件判断): 学习如何根据条件生成不同的模型,根据地块大小决定建别墅还是公寓。- 示例:
case LotArea > 500 : Villa | else : Apartment
- 示例:
- 实践: 尝试编写一个规则,生成一个简单的“楼房”:一个底座,三层标准楼层,一个斜屋顶,每层窗户使用
comp组件。
第4周:结合 GIS 数据与项目实战
- 目标: 将学到的知识应用到真实场景中,完成一个街区的快速建模。
- 任务:
- 获取 GIS 数据: 从网上下载一个城市的地块数据(通常是 Shapefile 格式),或者使用 CityEngine 自带的示例数据(
Help -> Sample Data)。 - 导入数据: 将地块数据导入到 CityEngine 场景中。
- 编写街道规则: 为地块编写一个建筑生成规则(可以基于第3周的规则进行扩展)。
- 批量应用: 将规则文件拖拽到场景中的所有地块上。
- 批量生成: 在大纲视图中,选中所有地块,右键选择 Generate,耐心等待,看着一栋栋建筑“长”出来!
- 导出成果: 将生成的街区模型导出为 OBJ 或 FBX 格式,用 3D Max 或 C4D 查看效果。
- 获取 GIS 数据: 从网上下载一个城市的地块数据(通常是 Shapefile 格式),或者使用 CityEngine 自带的示例数据(
第三部分:核心功能详解
当你掌握了基础后,可以深入了解这些更强大的功能。
资产库
- 是什么: CityEngine 的“素材库”,包括建筑组件(门、窗、屋顶)、植被、街道家具等。
- 作用:
- 重用性: 将制作好的复杂模型(如一个欧式阳台)导出为资产,方便在多个规则中调用。
- 效率: 无需每次都从零开始建模。
- 一致性: 确保全城使用相同的门窗样式。
- 学习: 学习如何创建、导入、导出和使用资产。
道路网络
- 是什么: 用于创建和编辑城市道路、人行道、绿化带等的强大工具。
- 核心: 道路数据本身是二维的,但通过道路材质规则可以自动生成三维的道路、路沿、斑马线等。
- 学习: 学习如何创建道路中心线,生成道路网络,并为道路编写不同的 CGA 规则。
脚本编辑器与 Python
- CGA: 专注于几何体生成。
- Python: 专注于场景管理和自动化。
- 应用场景:
- 批量修改场景中所有对象的属性。
- 自动化导入/导出流程。
- 创建自定义工具和插件。
- 学习: 了解 Python 在 CityEngine 中的基本应用,例如通过脚本创建几何体、选择对象等。
场景与图层管理
- 是什么: 类似于 GIS 软件(如 ArcGIS Pro),用于管理不同类型的数据。
- 作用:
- 数据分离: 将地块、道路、建筑、点云等数据放在不同图层,方便管理。
- 可见性控制: 可以单独显示或隐藏某一类数据,提高性能和专注度。
- 数据源链接: 图层可以链接到外部数据源,实现数据更新后场景的同步。
第四部分:进阶学习资源
当你不再满足于基础时,可以探索这些资源。

Esri 官方资源 (最权威)
- CityEngine 帮助文档: 这是最好的参考资料! 随时查阅,几乎涵盖了所有功能的详细说明和代码示例。
Help -> Help Contents。 - Esri 官方教程: 提供了大量视频和图文教程,从入门到高级应有尽有,访问 Esri官网的 CityEngine 页面。
- Esri 示例数据: 位于
Help -> Sample Data,包含完整的规则、场景和模型,是学习最佳实践的绝佳素材。 - Esri 社区论坛: 可以在这里提问、分享经验、查看别人的问题。
第三方教程与社区
- YouTube: 搜索 "CityEngine tutorial",有大量优秀的视频教程,例如由
Procedural Inc.(CityEngine 的前身) 和个人创作者发布的视频。 - GitHub: 搜索 "CityEngine CGA rules",可以找到许多开源的规则集,学习和借鉴别人的代码。
- 专业博客和论坛: 关注一些 3D 可视化和城市规划领域的博主,他们经常会分享 CityEngine 的技巧和项目案例。
第五部分:实用技巧与问题解答
Q1: 我的模型生成后看起来很“破碎”或有黑斑,怎么办?
- A: 90% 的原因是法线问题,在生成模型时,确保在生成选项中勾选了
Compute Normals(计算法线),如果仍有问题,可以在规则中使用set(normalize(up))或set(negate(normalize(up)))来手动调整法线方向。
Q2: 规则报错 "Error parsing rule..." 是什么意思?
- A: 这是语法错误,仔细检查报错信息,它会告诉你出错的行号和大致原因,常见错误包括:
- 括号 、花括号 不匹配。
- 拼写错误,如
exturde(应为extrude)。 - 变量未定义。
- 函数名或参数错误。
Q3: 如何让建筑的窗户有深度,而不是一个平面?
-
A: 使用
taper(锥化) 或extrude(拉伸) 结合comp(组件) 的方式,先在墙上开一个洞,然后将窗户组件拉伸进去。// 伪代码示例 Facade --> // ... 其他部分 ... splitY(3) { ~3 : FloorWithWindows | Roof } FloorWithWindows --> // 在每层上放置窗户组件 comp(Windows) {x : 5, y : 1} Windows --> // 在窗户位置创建一个凹槽 splitY(0.8) { 0.8 : WindowFrame | Sill } WindowFrame --> // 向内拉伸窗户,形成深度 extrude(0.1) color("blue")
Q4: 学习 CGA 最好的方法是什么?
- A:
- 模仿: 打开官方示例数据,找到你喜欢的建筑规则,逐行阅读,理解它的逻辑。
- 修改: 在模仿的基础上,尝试修改参数,看看效果有什么不同。
- 拆解: 将复杂的规则拆分成多个简单的子规则,逐个击破。
- 实践: 找一个小项目,逼着自己从头到尾写一遍规则,遇到问题,再回头查资料或提问。
学习 CityEngine 是一个从“手动建模思维”转变为“程序化、算法思维”的过程,初期可能会觉得 CGA 语法有些陌生,但一旦你掌握了它的逻辑,你会发现它为你打开了一个全新、高效、充满创造力的大门。
保持耐心,多动手,多思考,多看别人的代码,你很快就能成为 CityEngine 的高手!
