教程简介

本教程讲解如何利用CityEngine快速地从无到有创建一个城市,通过对CityEngine各部分功能的讲解使读者了解完整的工作流程。您将学习到怎样建立一个新的工程,创建道路网以及设置“形状创建参数”。最后,您将学习使用规则编辑器并生成城市建筑模型。

第一部分:创建一个新的工程

创建新工程和场景

第一步,创建一个新的CityEngine工程。

选择【File】—>【New】—>【CityEngine】—>【CityEngine project】

点击【Next】,将工程命名为“FirstCity”并单击【Finish】

完成以上操作,一个新的工程便建立好了并出现在在文件导航窗口中(默认布局下文件导航窗口位于CityEngine界面的左上角)。这些自动生成的文件夹用来存储你的工程数据,如assets文件夹(用以存储贴图和引用的模型部件数据),rules文件夹(用以存储规则文件)等。

第二步,创建一个新的场景:

选择【File】—>【New】—>【CityEngine】—>【CityEnginescene

确认新场景所保存的文件夹位置(/FirstCity/scenes),将该场景命名为“firstcity_01.cej”并点击【Finish】

我们的工作空间中现在包含了一个新的空工程以及一个场景文件:

拷贝规则和资源

在本教程的后面部分,我们需要使用规则文件和资源(assets)用以生成建筑物模型。因此我们现在需要从教程配套的示例工程中拷贝这些文件。

首先,我们将教程1的示例工程导入到当前的工作空间

下载并导入教程工程(教程1)到我们的工作空间中

接下来,我们将所需要的文件从已下载的教程1工程中拷贝到我们的新建工程中。

定位到教程1的资源(asset)文件夹。

使用复制和粘贴(Ctrl+C和Ctrl+V)将资源(asset)文件夹中所有的文件与文件夹拷贝到我们新建工程的资源(asset)文件夹中。

使用同样的方法,将规则文件夹中的 “building.cga” 规则文件拷贝到新工程的规则文件夹中。

现在,你的导航视窗应如下图所示:

现在,我们已经为第二部分的创建道路网和建筑模型工作做好了准备。

第二部分:街道和建筑物

创建道路网

第一步,创建道路网

单击viewport视窗将其激活

选择【Graph】—>【Grow Streets...】

选择默认设置来建立我们的城市。

单击【Apply】,并关闭对话框。
单击ViewPort视察上方工具栏中的“Frame All”按钮(或单击键盘上的“a”键)在Viewport视窗中全图显示你新建的道路网。

现在,你的Viewport视窗中应显示如下图所示的道路网以及默认的建筑物形状。

现在我们来看一下场景编辑器视窗“Scene Editor”。可以发现一个名为“Streetnetwork 1”的新图层已经生成。

修改“形状创建参数”

现在我们改变一些形状创建参数使场景看起来更加有趣。

点击“a”键使当前场景全图层显示。

按住鼠标左键,从右向左拖拽一个矩形框将场景中的全部元素都包含在内。

找到位于CityEngine窗口右上侧的Inspector面板,单击"Blocks"选项卡

打开"Block Parameter",将看到“形状创建参数”。

将类型(type)设置为偏移细分(Offset Subdivision

将最小面积(lotAreaMin)设置为300

将最大面积(lotAreaMax)设置为600

将偏移宽度(offsetWidth)设置为20

将代替分割递归(subdivisionRecursive)设置为否(false)

仔细观察场景中建筑物形状产生的变化

接下来进入第三部分,学习怎样对建筑物形状应用CGA规则并建立建筑物模型。

第三部分:应用CGA规则并生成模型

CGA规则简介

CityEngine中,使用CGA规则来描述三维模型。一个CGA规则文件由若干规则组成,这些规则用来定义三维模型是如何生成的。在一个CGA规则文件被指定给某个形状(如建筑物地块)时,建筑物模型便开始生成。在本部分的教程中,我们将应用和修改一个由基本规则构成的简单的CGA文件。

应用一个CGA规则文件

在3D视窗中,单击某个形状的内部以选中它。

在工具条中,单击Assign按钮并选中“building.cga”规则文件

另一种应用规则的方式,是直接从导航视窗(Navigator)中将规则文件拖拽到viewport视窗中的已选中形状上。

现在,Inspector视窗应如下图所示

浏览CGA规则并设置初始规则

在生成模型前,我们需要确认在Inspector视窗中已选定形状的初始规则被设置为了“Lot”,通常这种设置为默认设置。需要注意的是初始规则的名称由CityEngine自动生成,但可以进行修改。

继续保持某形状在前一节中被选中的状态,找到Inspector视窗中的初始规则(Start Rule)属性。

双击规则文件打开规则编辑器(Rule Editor)视窗。在左侧(黄色标签部分)显示的是规则的属性,在右侧(灰色标签部分)显示的是实际规则的图表。

点击下图红色圆圈内所示的按钮使编辑视窗最大化。

将规则定位在规则图的根部,在这里的根部指的是“Lot”。这个规则将是已选定形状的起始规则。

再次查看inspector视窗,确认在"Start Rule"处选定的是"Lot"(“Lot”为默认值),如下图所示。

现在我们已经做好生成真实建筑模型几何体的准备了。

生成第一个建筑物模型

确认选定形状仍然在选中状态,单击生成(Generate)按钮。

建筑物模型出现在了选定形状的上方

单击选中模型,使用右键菜单中的"Delete Model"选项来删除模型。

再次生成模型。

我们现在已经做好修改模型的准备。首先,我们将修改一个规则的属性——building height(建筑物高度)。接下来,我们将为建筑物添加一个不同的屋顶,这样我们就需要一个新的CGA规则。

修改规则属性“建筑物高度”

高度在相应的规则文件中被设置为了随机值,使用更新并生成模型(Update seed and Generate Models)命令多次生成建筑物,观察每一次生成的建筑物的变化。

查看规则编辑器中建筑物高程的默认定义:

在Inspector视窗中,定位到规则参数“Rule Parameter”。

找到高程"height"参数将其值修改为“18”。参数值的字体变成粗体,为用户定义值。

再次重复点击更新和生成模型命令(Update seed and Generate Models)。可以发现建筑物模型的高度不再变化。你可以通过点击数字“18”左侧的黑色三角图标将其重置为默认行为。

接下来,我们为屋顶添加一个新的规则。

添加一个屋顶规则

在inspector视窗中,通过点击规则文件打开规则编辑器

找到“Lot”规则并点击其右上角的“V”形符号将其展开。

在“comp”部分,右键点击“shape”,在右键菜单中进行选择,新建一个新的规则。

将新规则命名为"Roof"。

观察新规则是如何生成并被连接到"Lot"节点上的。

为了建立一个屋顶模型,我们现在插入一个人字形屋顶图形(即通常说的双坡顶)。右键单击“Roof”规则中的“Shape”,找到roofGable(angle, overhangX, overhangY)操作。

观察roofGable操作的生成情况。点击三个参数值分别输入20, 1, 0作为屋顶的参数。

单击生成(generate)按钮,查看新生成的模型。

生成一个小的城市模型

在最后一个步骤里面,我们会将规则应用到较大数量的形状上。为了给较大数量的形状分配规则,我们将使用选择菜单。

选择已生成的模型。

右键单击3D视口,并选择“Select -> Select Objects of Same Group”以选择大量的形状。

单击assign按钮,将building.cga规则分派给选中的形状。

单击“Generate”按钮生成模型。注意:根据你的选择,将会弹出一些关于起始规则“LotInner”或类似的警告对话框。你可以忽略这些对话框,因为我们对所有的形状分配规则,但我们的规则并不包含名为“LotInner”等的起始规则。

你现在应该可以看到一些高度不同的建筑物了。

CityEngine 初探相关推荐

  1. 持续集成:TeamCity 最详细的安装和使用介绍

    最近小熙在看有关持续集成相关的东西,首先肯定是找开发工具了.嗯,听说TeamCity不错,所以找寻相关资料.发现一篇讲述不错的,特此转载和大家分享下 如果各位小伙伴们想要破解版的,请先在下文的官网链接 ...

  2. 2021年大数据Flink(九):Flink原理初探

    Flink原理初探 Flink角色分工 在实际生产中,Flink 都是以集群在运行,在运行的过程中包含了两类进程. JobManager: 它扮演的是集群管理者的角色,负责调度任务.协调 checkp ...

  3. 从壹开始微服务 [ DDD ] 之一 ║ D3模式设计初探 与 我的计划书

    缘起 哈喽大家周四好!又是开心的一天,时间过的真快,我们的 <从壹开始 .net core 2.1 + vue 2.5 >前后端分离系列共 34 篇已经完结了,当然以后肯定还会有更新和修改 ...

  4. 经典算法研究系列:二、Dijkstra 算法初探

    经典算法研究系列:二.Dijkstra 算法初探  July   二零一一年一月 ====================== 本文主要参考:算法导论 第二版.维基百科. 写的不好之处,还望见谅. 本 ...

  5. las格式测井曲线_邹榕,等:顺北和托甫台区块奥陶系断裂结构单元测井响应特征初探...

    引用格式:邹榕,徐中祥,张晓明,等.顺北和托甫台区块奥陶系断裂结构单测井响应特征初探[J].油气藏评价与开发,2020,10(2):18-23.ZOUR, XU Z X, ZHANG X M, et ...

  6. 2018-4-15摘录笔记,《网络表征学习前沿与实践》 崔鹏以及《网络表征学习中的基本问题初探》 王啸 崔鹏 朱文武

    1.来源:<网络表征学习前沿与实践>  崔鹏 (1)随着数据的增加以及计算机计算速度的增加,想当然的以为速度快了,数据再多也是可以自己算的,但是若是数据之间存在着复杂的关系,那么处理一个样 ...

  7. python argparse_Python 命令行之旅:初探 argparse

    本文首发于 HelloGitHub 公众号,并发表于 Prodesire 博客. 前言 你是否好奇过在命令行中敲入一段命令后,它是如何被解析执行的?是否考虑过由自己实现一个命令行工具,帮你执行和处理任 ...

  8. HTML5+MUI+HBuilder 之初探情人

    07,08年那会儿正当Java火爆,C/C++仍是广泛运用的一门语言的时候,所以我的大学都献给了C/C++和Java.当诺基亚的倒闭成为按键机时代衰落的标志时,移动APP的开发也如破堤之洪.爆炸式的崛 ...

  9. 使用Mahout搭建推荐系统之入门篇3-Mahout源码初探

    2019独角兽企业重金招聘Python工程师标准>>> 用意: 希望了解Mahout中数据的存储方式, 它如何避免java object带来的冗余开销.学完知识,要进行些实战 去分析 ...

最新文章

  1. python哪个版本好-python下载哪个版本好
  2. Golang结构体struct的使用(结构体嵌套, 匿名结构体等)
  3. vim捐赠_#PayItBackwards-一位freeCodeCamp毕业生如何向事业捐赠10,000美元
  4. numpy细碎知识点
  5. 数据结构之二叉树:折纸问题——11
  6. java做的web系统 m1 读卡器 结合_IE浏览器接入IC卡读写器实现M1卡的读写功能
  7. J.U.C - AQS
  8. android 开启离屏缓存,Android性能优化笔记(持续更新帖)
  9. Redis 数据结构之dict(2)
  10. 学习笔记(5):2020华为HCIA/HCNA/数通/路由交换/实验/视频/教程/持续更新赠题库-HCIA数通IP地址编址及报头详解
  11. 《计算机网络教程》(微课版 第五版)第一章 概述 课后习题及答案
  12. English - 英语中的时间表达法,这里全啦!
  13. 关于SQL sever中创建表时出现“对象名无效”的情况
  14. [CSP-S模拟测试]:游戏(最短路)
  15. Python eval() 函数看这里就够了
  16. excel保存快捷键_只会用Ctrl+C和Ctrl+V怎么行?真正的Excel高手都是快捷键达人!...
  17. 小鸟云服务器如何进行重装系统?
  18. 1072 开学寄语 C++实现
  19. Jboot初遇activiti
  20. 《密码安全新技术》课程总结报告

热门文章

  1. Sublime text 3 汉化 破解版
  2. 七.导航组件navigator
  3. PyCharm:选择性忽略 PEP8 警告
  4. android:使用Gon解析解析json
  5. 最贵服务器多少钱_服务器里面什么最贵
  6. U盘装Win7系统,找不到任何设备驱动程序
  7. CSS笔记(八)盒子模型-----定位
  8. 毕设-基于LoRa的智能农业大棚
  9. VSCode插件之实时字数统计与选中词英汉互译
  10. 用Java实现数据查询