当前位置: 首页 > news >正文

CityEngine自动化建模

CityEngine学习记录

学习网址:

百度安全验证

CityEngine-CityEngine_Rule-based_Modeling-基于规则建模和输出模型 - 豆丁网

CityEngine 初探-CSDN博客

City Engine CGA 规则包_cga规则-CSDN博客

CityEngine学习记录

学习网址:百度安全验证

CityEngine-CityEngine_Rule-based_Modeling-基于规则建模和输出模型 - 豆丁网

CityEngine 初探-CSDN博客

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:线段结束的地标贴图选项。

    http://www.dtcms.com/a/286752.html

    相关文章:

  1. 代理模式及优化
  2. 代码随想录day38dp6
  3. STM32-第七节-TIM定时器-3(输入捕获)
  4. 全排列 II
  5. C#通过HslCommunication连接西门子PLC1200,并防止数据跳动的通用方法
  6. 反序列化漏洞2-魔术方法介绍与演示
  7. 怎么自己搭建云手机
  8. http与https的主要区别是什么?
  9. java数据类型
  10. 锂电池无线充电电路设计
  11. 零碳园区势在必行!安科瑞EMS3.0助力园区低碳智慧升级
  12. Excel导出实战:从入门到精通 - 构建专业级数据报表的完整指南
  13. 如何使用 Jackson 处理 YAML
  14. AE电源MDX 5K 10K 15K 20K 25K 30K手侧操作使用说明
  15. 拉普拉斯方程傅里叶积分解法
  16. @Primary 是做什么的?
  17. CAD 约束求解:核心技术原理、流程及主流框架快速解析
  18. A33-vstar笔记及资料分享:搭建交叉编译环境
  19. 动态规划 + DFS + 记忆化!Swift 解 LeetCode 329 的实战笔记
  20. 实战指南|智慧无人机安防系统搭建全流程解析
  21. 记录DataGrip 2025.1.3破解失败后,无法重启问题修复
  22. centos7安装MySQL8.4手册
  23. Hive数据仓库工具
  24. 甲状腺结节TI-RADS分类的多目标分类头任务深度学习模型评估报告
  25. go语言学习之包
  26. 新书推介 | 吉林大学出版教材《汽车智能辅助驾驶系统技术》,国产仿真工具链GCKontrol-GCAir教学应用
  27. Python_2
  28. math.h函数
  29. 弱网测试
  30. 跨域问题及解决方案