“CityEngine”的版本间的差异
来自Wiki.Citydatum
小 (→上手) |
小 |
||
(未显示同一用户的5个中间版本) | |||
第32行: | 第32行: | ||
| 后续模型处理 || 导出标准工业格式的模型文件 | | 后续模型处理 || 导出标准工业格式的模型文件 | ||
|} | |} | ||
+ | |||
+ | === 常用函数 === | ||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | ! 函数名 !! 功能概述 !! 形式与参数 !! 示例 | ||
+ | |- valign="top" | ||
+ | | style="width: 5%;" | extrude || style="width: 15%;" | 拉伸/挤出,把地块变成一个建筑 || style="width: 45%;" | <pre>extrude(height) | ||
+ | extrude(axisWorld, height) </pre> | ||
+ | * height:拉伸高度,默认沿模型Y轴方向拉伸; | ||
+ | * axisWorlvalign="top"d:设定世界坐标系的轴作为拉伸轴线(world.x/world.y/world.z) | ||
+ | | style="width: 35%;" | <pre>Lot --> | ||
+ | extrude(10) | ||
+ | CompModel</pre> | ||
+ | |- valign="top" | ||
+ | | comp || 组件拆分/炸开,把模型从整体分成不同的部分 || <pre>comp(compSelector) { selector1 : operator operations | selector2 : operator operations ... }</pre> | ||
+ | * compSelector:要分割组件的类型,可选值{f:面|e:边|v:点} | ||
+ | * selector: | ||
+ | ** front, back, left, right, top, bottom 前后左右上下(模型轴系) | ||
+ | ** vertical(垂直), horizontal(水平), aslant(有坡度的), nutant | ||
+ | ** side 除水平部件外的其它部分 | ||
+ | ** all 所有的 | ||
+ | || <pre>CompModel--> | ||
+ | comp(f){side: ColorsSideFacade | top: ColorfTopFacade}</pre> | ||
+ | |- valign="top" | ||
+ | | color || 着色,给模型着色 || <pre>color(s) | ||
+ | color(r,g,b)</pre> | ||
+ | * s (string):文本类型的颜色值(16进制)例如:"#rrggbb" | ||
+ | * r,g,b (float,float,float):浮点类型的颜色值,每个值的取值在0到1.0之间 | ||
+ | || <pre>ColorsSideFacade--> | ||
+ | color("#00ffff") SplitModel | ||
+ | ColorfTopFacade--> | ||
+ | color(1,0,0) TopFacade</pre> | ||
+ | |- valign="top" | ||
+ | | split || 分割/切片,建筑分成不同的楼层 || <pre>split(splitAxis) { size1 : operations1 | size2 : operations2 | ... | sizen-1 : operationsn-1 }</pre> | ||
+ | * splitAxis:取值{X | Y| Z},轴系为模型轴系 | ||
+ | * sizen:分割的宽度 | ||
+ | || <pre>SplitModel--> | ||
+ | split(y){4:color("#aa33bb") GroundFloor. | {~3:Floor.}*} | ||
+ | </pre>注:符号“ * ”代表重复执行,“ ~ ”代表一个近似值 | ||
+ | |- valign="top" | ||
+ | | i(insert)|| 插入/替换 || <pre>i(geometryPath)</pre> | ||
+ | * geometryPath (string):要插入的几何体名称, 应为内置或存放于资源搜索路径里的几何体; | ||
+ | || <pre>i("example.obj")</pre> | ||
+ | |- valign="top" | ||
+ | | t(Scope Translate)|| 移动 || <pre>t(x,y,z)</pre> | ||
+ | * x,y,z:在各个轴向上移动的距离; | ||
+ | || <pre>t(x,y,z)</pre> | ||
+ | |- valign="top" | ||
+ | | s(Scope Translate)|| 缩放 || <pre>s(x,y,z)</pre> | ||
+ | * x,y,z:在各个轴向上缩放的比例; | ||
+ | || <pre>s(x,y,z)</pre> | ||
+ | |} | ||
+ | |||
=== CGA规则语法 === | === CGA规则语法 === | ||
CGA(computer generated architecture)规则可在整个城市的尺度上,控制大量的几何形、比例、建筑或街道风貌肌理。规则文件由规则、属性、自定义函数以及注释等构成的集合。 | CGA(computer generated architecture)规则可在整个城市的尺度上,控制大量的几何形、比例、建筑或街道风貌肌理。规则文件由规则、属性、自定义函数以及注释等构成的集合。 | ||
* '''形状'''(Shape):形状是CGA规则语法的核心要素,形状的名字被称为“模型标识”(shape symbol),由几何体构成,并具有被称“范围”(scope)的包围盒(oriented bounding box)。 | * '''形状'''(Shape):形状是CGA规则语法的核心要素,形状的名字被称为“模型标识”(shape symbol),由几何体构成,并具有被称“范围”(scope)的包围盒(oriented bounding box)。 | ||
− | * ''' | + | * '''规则文件''':由规则、属性、自定义函数以及注释等构成的集合。 |
+ | |||
+ | === 规则 === | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
− | ! | + | ! 类型 !! 特点 !! 形式 !! 示例 |
− | |- | + | |- valign="top" |
− | | style="width: | + | | style="width: 5%;" | 标准规则 || style="width: 16%;" | 与无参函数比较类似,其结果返回给模型标识 || stylpe="width: 32%;" | <pre>PredecessorShape --> Successor</pre> || stylpe="width: 45%;" | <pre>Lot --> extrude(10) CompModel</pre> |
− | + | |- valign="top" | |
− | |- | + | | 带参规则 || 与有参函数比较类似,根据需要传递改变后继模型外观的信息 || <pre>PredecessorShape(Parameters) --> Successor</pre> || <pre>Lot --> color(1,0,0) Footprint(20) |
− | | 带参规则 || <pre>PredecessorShape(Parameters) --> | + | Footprint(height) --> extrude(height) Envelope</pre> |
− | + | |- valign="top" | |
− | |- | + | | 随机规则 || 用以随机生成不同外观的模型 || <pre>PredecessorShape --> |
− | | 随机规则 || <pre>PredecessorShape --> | ||
percentage%: Successor1 | percentage%: Successor1 | ||
percentage%: Successor2 | percentage%: Successor2 | ||
... | ... | ||
− | else: SuccessorN</pre> || | + | else: SuccessorN</pre> || <pre>Lot --> |
− | |- | + | 60%:color(1,0,0) Footprint(20) |
− | | 条件规则 || <pre>PredecessorShape --> | + | 30%:color(0,1,0) Footprint(30) |
+ | else:color(0,0,1) Footprint(50) | ||
+ | Footprint(height) --> extrude(height) Envelope</pre> | ||
+ | |- valign="top" | ||
+ | | 条件规则 || 与函数中的条件语句比较类似,条件规则的关键字是case、else,根据不同的条件生成不同外观的模型 || <pre>PredecessorShape --> | ||
case condition1: Successor1 | case condition1: Successor1 | ||
case condition2: Successor2 | case condition2: Successor2 | ||
... | ... | ||
− | else: SuccessorN</pre> || | + | else: SuccessorN</pre> || <pre>Lot --> |
− | |- | + | case geometry.area<400:color(1,0,0) Footprint(20) |
− | | 递归规则 || <pre>PredecessorShape --> | + | case geometry.area>1000:color(0,1,0) Footprint(30) |
+ | else:color(0,0,1) Footprint(50) | ||
+ | Footprint(height) --> extrude(height) Envelope</pre> | ||
+ | |- valign="top" | ||
+ | | 递归规则 || 与函数中的循环语句比较类似,适用于满足一定条件时重复执行相同的操作 || <pre>PredecessorShape --> | ||
case condition1: Operations PredecessorShape | case condition1: Operations PredecessorShape | ||
case condition2: Successor2 | case condition2: Successor2 | ||
... | ... | ||
− | else: SuccessorN</pre> || | + | else: SuccessorN</pre> || <pre>Lot --> |
+ | extrude(10) | ||
+ | color(1,0,0) | ||
+ | comp(f){side:SideFacade | top:Recursive} | ||
+ | Recursive --> | ||
+ | case geometry.area > 100: | ||
+ | X s('0.8,'0.8,'1) | ||
+ | extrude(3) center(xz) | ||
+ | comp(f){side:SideFacade|top:Recursive} | ||
+ | else: X | ||
+ | </pre> | ||
+ | |} | ||
+ | |||
+ | === 属性 === | ||
+ | '''属性'''是一组静态的全局变量,每个属性被初始化一个特定的值。 | ||
+ | * '''attr'''(变量):'''可在inspector面板里调整''',与对象的属性字段做关联;当定义的属性名字与字段名一致时会自动关联(值类型一致) | ||
+ | * '''Const'''(常量):参数值不能在inspector面板里调整,也不能在规则中利用set函数调整其值。 | ||
+ | <pre>const height=20 | ||
+ | Lot --> | ||
+ | color(1,0,0) | ||
+ | extrude(height) | ||
+ | </pre> | ||
+ | |||
+ | === 自定义函数 === | ||
+ | 在CityEngnie中的自定义函数与属性比较类似,前面无关键字。自定义函数可以被参数化、随机化和条件化。 | ||
+ | <pre>attr Floor=0 | ||
+ | height= | ||
+ | case Floor < 2 : 5 | ||
+ | case Floor < 6 : 4 + 3.2 * ( Floor - 1 ) | ||
+ | else : 3.8 + 3 * ( Floor - 1 ) | ||
+ | Lot --> | ||
+ | color(1,0,0) | ||
+ | extrude(height) | ||
+ | </pre> | ||
+ | |||
+ | === 注释 === | ||
+ | 注释是为了提高规则的易读性,为团队合作与后续修改提供参考; | ||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | ! 注释类型 !! 形式 !! 示例 | ||
+ | |- valign="top" | ||
+ | | 行注释 || 利用字符“//”或“#”注释一行 || <pre>// a comment | ||
+ | # another comment</pre> | ||
+ | |- valign="top" | ||
+ | | 块注释 || 利用“/*……*/”可以实现块注释 || <pre>/* block comments | ||
+ | can be used to write | ||
+ | multi-line comments | ||
+ | */</pre> | ||
+ | |- valign="top" | ||
+ | | 行内注释 || 行内注释也是通过“/*……*/”来实现的 || <pre>Lot --> | ||
+ | Garden House /*Garage*/ Fence</pre> | ||
|} | |} | ||
− | |||
− | |||
− | |||
− | |||
== 参考链接 == | == 参考链接 == | ||
第73行: | 第181行: | ||
* [https://en.wikipedia.org/wiki/CityEngine Wikipedia: CityEngine] | * [https://en.wikipedia.org/wiki/CityEngine Wikipedia: CityEngine] | ||
* [https://baike.baidu.com/item/Esri%20CityEngine 百度百科:Esri CityEngine] | * [https://baike.baidu.com/item/Esri%20CityEngine 百度百科:Esri CityEngine] | ||
+ | |||
+ | [[分类:软件工具]] |
2018年12月7日 (五) 02:36的最新版本
CityEngine是一款Esri苏黎世研发中心(原Procedural公司)开发的三维建模软件应用,特别适合于三维城市环境的生成。利用程序化建模(procedural modeling)方法,CityEngine可支持细节丰富、大尺度三维城市模型的创建。
概述
- 基于规则批量建模编辑:规则定义了一系列的几何和纹理特征决定了模型如何生成。基于规则的建模的思想是定义规则,反复优化设计,以创造更多的细节。当有大量的模型创造和设计时,基于规则建模可以节省大量的时间和成本。最初,它需要更多的时间来写规则文件,但一旦做到这一点,创造更多的模型或不同的设计方案,比传统的手工建模更快。
- 与ArcGIS集成编辑:CityEngine提升了ArcGIS三维建模能力,充分使用GIS数据快速创建3D内容,为ArcGIS三维数据的获取提供保障,使得ArcGIS三维解决方案更加完善。
应用
- 城市规划与城市设计:
- 城市研究:
- 电影制作:疯狂动物城、超能陆战队均利用CityEngine来构建大尺度的城市模型;
- 游戏开发:
上手
用户界面
- 主要窗口类型:导航栏、场景编辑器、CGA规则编辑器、三维视窗、平面图(顶视图的三维视窗)、监视窗口、控制台输出、消息记录
基本流程
- 新建场景:在创建CityEngine项目之后,可创建新的场景(scene);
- 创建布局:城市布局(layout)由街道(street)、街坊(block)、地块(lot)构成,最简便的创建城市布局的方法,是使用Graph菜单下的“街道生成向导”(Street Creation Wizard);也可导入由AutoCAD导出的DXF文件、由OpenStreetMap导出的OSM文件来生成街道网络;
操作 | 数据形式 |
---|---|
前期数据准备 | 地理或控制地图,属性图层(图像) |
街道网络创建与编辑 | 街道网络,graph图形(中线) |
基本的地块/街道机和编辑及街块细分 | 地块与街道,shape形状(二维多义面) |
用形状语法进行几何体生成 | 三维城市,模型(带贴图的三维体块mesh) |
后续模型处理 | 导出标准工业格式的模型文件 |
常用函数
函数名 | 功能概述 | 形式与参数 | 示例 |
---|---|---|---|
extrude | 拉伸/挤出,把地块变成一个建筑 | extrude(height) extrude(axisWorld, height)
|
Lot --> extrude(10) CompModel |
comp | 组件拆分/炸开,把模型从整体分成不同的部分 | comp(compSelector) { selector1 : operator operations | selector2 : operator operations ... }
|
CompModel--> comp(f){side: ColorsSideFacade | top: ColorfTopFacade} |
color | 着色,给模型着色 | color(s) color(r,g,b)
|
ColorsSideFacade--> color("#00ffff") SplitModel ColorfTopFacade--> color(1,0,0) TopFacade |
split | 分割/切片,建筑分成不同的楼层 | split(splitAxis) { size1 : operations1 | size2 : operations2 | ... | sizen-1 : operationsn-1 }
|
SplitModel--> split(y){4:color("#aa33bb") GroundFloor. | {~3:Floor.}*}注:符号“ * ”代表重复执行,“ ~ ”代表一个近似值 |
i(insert) | 插入/替换 | i(geometryPath)
|
i("example.obj") |
t(Scope Translate) | 移动 | t(x,y,z)
|
t(x,y,z) |
s(Scope Translate) | 缩放 | s(x,y,z)
|
s(x,y,z) |
CGA规则语法
CGA(computer generated architecture)规则可在整个城市的尺度上,控制大量的几何形、比例、建筑或街道风貌肌理。规则文件由规则、属性、自定义函数以及注释等构成的集合。
- 形状(Shape):形状是CGA规则语法的核心要素,形状的名字被称为“模型标识”(shape symbol),由几何体构成,并具有被称“范围”(scope)的包围盒(oriented bounding box)。
- 规则文件:由规则、属性、自定义函数以及注释等构成的集合。
规则
类型 | 特点 | 形式 | 示例 |
---|---|---|---|
标准规则 | 与无参函数比较类似,其结果返回给模型标识 | PredecessorShape --> Successor |
Lot --> extrude(10) CompModel |
带参规则 | 与有参函数比较类似,根据需要传递改变后继模型外观的信息 | PredecessorShape(Parameters) --> Successor |
Lot --> color(1,0,0) Footprint(20) Footprint(height) --> extrude(height) Envelope |
随机规则 | 用以随机生成不同外观的模型 | PredecessorShape --> percentage%: Successor1 percentage%: Successor2 ... else: SuccessorN |
Lot --> 60%:color(1,0,0) Footprint(20) 30%:color(0,1,0) Footprint(30) else:color(0,0,1) Footprint(50) Footprint(height) --> extrude(height) Envelope |
条件规则 | 与函数中的条件语句比较类似,条件规则的关键字是case、else,根据不同的条件生成不同外观的模型 | PredecessorShape --> case condition1: Successor1 case condition2: Successor2 ... else: SuccessorN |
Lot --> case geometry.area<400:color(1,0,0) Footprint(20) case geometry.area>1000:color(0,1,0) Footprint(30) else:color(0,0,1) Footprint(50) Footprint(height) --> extrude(height) Envelope |
递归规则 | 与函数中的循环语句比较类似,适用于满足一定条件时重复执行相同的操作 | PredecessorShape --> case condition1: Operations PredecessorShape case condition2: Successor2 ... else: SuccessorN |
Lot --> extrude(10) color(1,0,0) comp(f){side:SideFacade | top:Recursive} Recursive --> case geometry.area > 100: X s('0.8,'0.8,'1) extrude(3) center(xz) comp(f){side:SideFacade|top:Recursive} else: X |
属性
属性是一组静态的全局变量,每个属性被初始化一个特定的值。
- attr(变量):可在inspector面板里调整,与对象的属性字段做关联;当定义的属性名字与字段名一致时会自动关联(值类型一致)
- Const(常量):参数值不能在inspector面板里调整,也不能在规则中利用set函数调整其值。
const height=20 Lot --> color(1,0,0) extrude(height)
自定义函数
在CityEngnie中的自定义函数与属性比较类似,前面无关键字。自定义函数可以被参数化、随机化和条件化。
attr Floor=0 height= case Floor < 2 : 5 case Floor < 6 : 4 + 3.2 * ( Floor - 1 ) else : 3.8 + 3 * ( Floor - 1 ) Lot --> color(1,0,0) extrude(height)
注释
注释是为了提高规则的易读性,为团队合作与后续修改提供参考;
注释类型 | 形式 | 示例 |
---|---|---|
行注释 | 利用字符“//”或“#”注释一行 | // a comment # another comment |
块注释 | 利用“/*……*/”可以实现块注释 | /* block comments can be used to write multi-line comments */ |
行内注释 | 行内注释也是通过“/*……*/”来实现的 | Lot --> Garden House /*Garage*/ Fence |