CityEngine学习记录
学习网址:
CityEngine-CityEngine_Rule-based_Modeling-基于规则建模和输出模型 - 豆丁网
City Engine CGA 规则包_cga规则-CSDN博客
CityEngine学习记录
学习网址:百度安全验证
CityEngine-CityEngine_Rule-based_Modeling-基于规则建模和输出模型 - 豆丁网
City Engine CGA 规则包_cga规则-CSDN博客
1. 基础教程
1.1 软件布局
1.2 新建一个CityEngine工程
File→New→CityEngine→CityEngine project
然后Next输入工程名称,输入工程名称为“FirstTestHZ”,然后点击“Finish”
一个新的工程创建成功,并会在导航器(Navigator)中显示,Navigator一般在软件的左下角显示,工程创建成功后,会生成很多默认的文件夹,但是都是空的。
Assets —— 存放模型的零件与纹理图片
Data —— 存放道路或地块数据(.shp、.osm、.dxf等)
Images —— 存放场景快照
Maps —— 存放地图图层来源的影像,(.jpg、.img、.tif等)
Models —— 导出的3D模型存放位置
Rules —— 存放规则文件 .cga
Scenes —— 存放场景文件 .cej
Scripts —— 存放脚本文件
1.3 新建一个新的场景
File→New→CityEngine→CityEngine Scene
选择场景所属工程和填写场景名称后,点击“Finish”完成创建。
此时会出现一个空白的3D View窗口。
1.4 复制rules和assets文件夹
在CityEngine中需要用到规则文件和资源文件来生成建筑模型,我们可以从已经加入到软件中的“Tutorial_09_Advanced_Shape_Grammar__2016_1”工程来复制文件。
用ctrlC和ctrlV来复制文件即可。
1.5 常用操作
平移:ALT+鼠标中键
旋转:ALT+鼠标左键
显示模型:F12
全局显示:A
全选要素:Ctrl+A
2. CityEngine白膜拉伸步骤
建筑建模主要依据含有建筑高度的建筑面shp数据。将shp数据导入CityEngine后,赋予建筑面建筑物规则,对建筑面数据拉伸高度并且赋予贴图或者颜色效果。建筑物拉伸完成后,可以导出fbx或者obj格式模型。
2.1 拷贝数据
打开软件,将建筑物面数据拷贝到data文件夹内
2.2 加载数据
然后选中后缀为“.shp”的文件,拖入到3D View的窗口中,为数据选择一个正确的坐标系后,就可以看到shp数据已经加载到场景中了。
2.3 给建筑物赋予白膜拉伸规则
在3DView窗口里CtrlA全选建筑物面,然后在“rules”里找到复制过来的“Candler Building.cga”,鼠标按住后把规则拖动到建筑屋面上,就可以根据规则自动生成模型
2.4 自定义rules规则
在Navigator面板的Rules节点上右键,选择New→CGA rule file,输入文件名称“testhz”,新建一个规则文件,打开规则文件编辑窗口。
规则语法等内容需要深入研究,目前常用的有
attr height = 250 —— 定义属性
extrude(height)、extrude(axisWorld, height) —— 拉伸
comp(f){top: Roof | side: Facede} —— 面分割
comp(e) —— 边分割
comp(v) —— 点分割
color(1, 0, 0) 或 color("#69431a") —— 颜色
case:else:根据属性筛选条件,设置不同的显示
2.4.1 申明变量
attr height =100
2.4.2 模型拉伸高度
exturde(hieght)
赋予规则后,模型将展示如图所示
2.4.3 模型随机高度
rand函数,赋予最小值与最大值,就可以给建筑物随机添加高度
重新编写cga文件后,Ctrl+G可以重新生成模型
2.4.4 拆分建筑六面
面分割采用comp(f){},关键字top,side表示屋顶和侧面,top:roof表示将建筑物整体分割,且顶部赋值至变量roof
Ctrl+G重新生成后,显示如下:
2.4.5 建筑物贴图
设置贴图的坐标系
setupProjection(uvset, prjAxesSelector, texWidth, texHeight)
uvset —— 要被贴图的元素的索引值,[0, 9] 的整数
prjAxesSelector —— 设置有效的方向轴,有效参数有:scope.xy, scope.xz, scope.yx, scope.yz, scope.zx, scope.zy
texWidth —— 宽度方向上的贴图比例,即贴图大小与建筑大小的对应。设置为 '1 则自适应以一张贴图贴满整个面
texHeight —— 高度方向上的贴图比例,即贴图大小与建筑大小的对应。设置为 '1 则自适应以一张贴图贴满整个面
Ctrl+G重新构建后
同理,可以创建侧面贴图
后期对规则进行代码编写,可以实现快速模型构建。对于代码接口,可以参考接口文档:CGA 参考—ArcGIS CityEngine 资源 | 文档
2.5 导出模型
选中需要导出的模型,然后选择File→Export Models,选择需要导出的模型格式,一般是选择fbx或者obj。
导出fbx需要注意不同的选项导出的模型对象区分方式不一样。
如上图显示默认选项,则导出的模型会按照材质来进行区分,同一材质的模型会是一个对象。
如上图显示选择“Instances and Shape Groups”,则导出的模型则会按照当前对象进行导出。
3. CityEngine道路建模步骤
道路建模主要依据含有道路宽度的道路中心线shp数据。将shp数据导入CityEngine后,修改道路数据的拓扑错误,编辑特殊道路的高度和宽度后,对道路数据赋予道路规则。道路规则慢慢积累后,可以重复使用,根据不同的道路类型或者样式,可以修改道路的中心样式、人行道样式、单向道路、桥梁样式和车道停止线样式。修改完成后可以导出fbx或者obj模型。
3.1 导入shp道路中心线
将shp数据、影像数据等放于项目data文件夹内。然后在Navigator视窗内可以看见数据被添加进来了,暗住鼠标左键不放,即可以把数据拖到3D视图里,完成数据的添加。
3.2 修改道路拓扑错误
数据导入到3D视图后,CityEngine会自动根据shp数据中的道路宽度字段完成道路面放样。并且自动生成道路面、人行道面、道路交叉口等数据。
一些数据不符合拓扑规则时,CityEngine会用红色标记出来,这时需要手动对数据进行拓扑校正。根据实际情况,选择校正方法。
一般来说,如果道路交叉口有拓扑问题,可能是因为道路线节点过多导致的问题,这时候可以选择清理工具,对节点进行融合。
融合时可以选择适当的融合距离。
第二种情况是在道路末端会有拓扑错误,这个时候如果选择清理工具,道路错误节点会被删除,并且错误会继续存在,这种情况,我们只需要把道路末端节点的属性改为Crossing即可。
还有一种情况是高架匝道有拓扑问题,这时候,需要对匝道的宽度和高度做校正,这个放在下一章节进行介绍。
3.3 编辑道路高度和宽度
道路的宽度决定后面道路的样式,并且高架和匝道的宽度也经常会引起道路的拓扑问题,所以道路的宽度和高度的编辑是至关重要的一环。
3.3.1 精确修改宽度
在Inspector视图里,找到shape width选项,填入正确的道路宽度数值即可精确修改道路宽度。
道路宽度修改原则可以按照影像实际测量结果得出、也可以按照基础地理数据库中的属性得出、如果知道车道数,道路基础设施等信息,也可以根据车道数来修改道路宽度。
道路宽度=(3.5(车道宽)+0.13(线宽))*N(车道数) 如果是双实线中间间隔0.13m,也需要加上
3.3.2 粗略修改宽度
选中道路面street,然后选择编辑选项
道路面会变成编辑调整模式,选择道路两边的绿色方块,可以改变道路的宽度。
拓展:选择黄色的端点,可以改变端点的位置
选择绿色的圆点,可以改变道路的弯曲方向和弯曲度
3.3.3 修改道路高度
道路高度是由整体高度和节点高度决定的。选中道路后,再选择调整功能,即可以对道路整体高度进行调整
选中单个道路节点,即可以对单个节点高度进行调整。
调整方式为对绿色的Z轴拖拽即可。
拓展:调整还有X和Y轴,可以调整道路线或者道路节点的坐标
3.4 配置道路规则
选中道路面,然后将道路规则拖动到道路上,道路限时橙色,即为正确。
配置完成后:
配置完成后,还需要对数据进行检查,确认有无错误,常见的错误包括:
- 道路宽度错误,导致部分区域没有道路贴图样式
解决方法:修改错误数据的宽度,即可恢复正常。
- 道路交叉口没有斑马线或者车道停止线等。这种问题的原因就是车道点过近,导致street与crossing之间距离过短,斑马线与车道线没有足够距离显示,所以可以将点融合,或者删除点后,重新新建一条道路也可以,或者可以编辑节点,把节点距离调大即可。
- 有些道路是空白的,这是因为道路终点的类型不对导致的,可以把道路终点的类型改为crossing即可。
- 有些包含交叉口和道路终点的地方会有拓扑错误,这个一般选择清理工具即可。
3.5 修改道路属性
3.5.1 修改道路中心样式
道路中心线可以是双黄线,也可以是绿道树木。需要改变的话,可以选择道中心截面布局,Center_Type选择median
3.5.2 修改道路人行道样式
人行道可以修改样式,默认是贴图。
可以选择人行道绿化+区域,选择sidewalk_Ground_Cover中的Random或者standard grass。
3.5.3 修改单向道路
修改前
修改后
车道线发生变化
3.5.4 修改桥梁样式
有些道路属于高架桥,高架桥需要添加桥墩和路边围栏,这时候选中需要添加桥墩的模型,然后在道路规则里选择桥墩样式为“on,by the elevation”。
3.5.5 修改车道停止线样式
3.6 模型导出
3.7 中国特色道路贴线、指示地表设置
目前使用CityEngine软件自带的Standard_Street.cga文件来进行简易快速道路建模,只能设置车道线和地标指示,不包含中间隔离带等其他复杂路面物体。
3.7.1 standard规则解释
- NbrOfRightLanes
修改反向车道车道数,比如下图四车道的道路,修改属性值为3,则代表一边为3车道一边为1车道。
个人意见这个反向其实跟道路的线条方向有关,需要尝试才可以决定是写1还是写3。
- Centerline
车道中心线设置,目前选项有yellow(黄实线)、none(黄虚线)
- RoadTraffic
right-hand:靠右行驶
Left-hand:靠左行驶
- Stop Markings
路口指示地标,目前选项有StopBegin和StopEnd。
StopBegin:线段开始的地标贴图选项。
StopEnd:线段结束的地标贴图选项。