教程 2:地形和动态城市布局

要访问 ArcGIS CityEngine 中的教程工程,请打开 CityEngine,然后在主菜单中单击帮助 > 下载教程和示例。 在选择教程或示例后,系统会自动下载工程并将其添加到 CityEngine 工作空间。

已生成模型的街道

通常,在开始 CityEngine 场景时,将首先创建地形。 可以根据简单图像文件或数字高程模型 (DEM)(例如支持地理配准信息的 GeoTIFF 文件)创建地形

在本教程中,您将学习如何创建和对齐地形;生成街道和清理街道,以及动态城市布局的基础知识。

创建地形

要创建地形,请执行以下操作:

  1. 导航器窗口中展开 Tutorial_02_Terrain_and_Dynamic_City_Layouts 教程文件夹。
  2. 打开 scenes 文件夹中的 Part_1_Start.cej 场景。
  3. 打开 maps 文件夹,然后将 elevation.jpg 图像拖放到视窗窗口中以打开导入对话框。

    “地形导入”对话框

  4. 选择地形导入并单击下一步
  5. 纹理文件下,单击浏览以选择 maps 文件夹中的 topo.png 纹理文件。
  6. 单击打开
  7. 保持通道属性设置为 brightness
  8. 最大高度值设置为 150
  9. 边界下,编辑尺寸位置值,如下图所示:

    “地形”对话框

    注:

    如果加载不含地理配准信息的图像,则其像素分辨率将设置为地形尺寸。

  10. 选择保持比例按钮 保持比例切换开关 并确保对齐按钮 对齐位置 设置为中心。
  11. 单击 完成

    视窗中的地形高程

    随即创建 Terrain elevation 图层并将其添加到 Scene Editor 窗口。

    Scene Editor 中的地形高程

  12. 单击 Scene Editor 窗口中的图层以探索检查器窗口中的属性。

    地形属性的检查器

    有关地形图层属性的详细信息,请参阅地形图层

    打开 Part_1_End.cej 场景以查看位于 scenes 文件夹中的已完成示例。

注:

目前,CityEngine 仅支持基于图像的地形(灰度高度地图),不支持 3D 网格。 如果您仅拥有 3D 网格或任何其他数据类型,则需要将其转换为高度地图。

生成街道

教程 1:必备技能中,您学习了如何在没有高程的平面格网上生成街道。 现在,您将使用生成街道工具和算法直接调整街道以适应实际地形高程。

使用高度地图生成街道

要使用高度地图生成街道,请执行以下操作:

  1. 单击 Part_2_Start.cej 文件以打开该场景。
  2. 单击主菜单中的图形 > 生成街道...以打开生成街道对话框。

    “生成街道”对话框

  3. 展开环境设置部分。
  4. 高度地图旁边,单击下拉菜单并选择地形高程

    生成街道和地形高程

  5. 单击应用

    Streetnetwork 图层随即添加到 Scene Editor 窗口中。

    Streetnetwork Scene Editor

    街道将自动与地形对齐。

  6. 单击关闭以查看视窗窗口中的街道。

    使用高度地图生成街道

使用障碍地图生成街道

您可能已注意到,生成街道工具将随机生成街道。 这将包含您可能不希望存在街道的区域。 您可以创建一个障碍地图,以便将这些区域留空并最大限度地减少手动清理过程。 障碍地图为黑白图像,其中亮度定义了街道可以生成的区域。

要添加障碍地图,请执行以下操作:

  1. 在 Scene Editor 窗口中单击鼠标右键,然后选择新建 > 新建地图图层以打开新建地图图层对话框。
  2. 单击障碍

    “新建地图图层”对话框

  3. 单击下一步
  4. 单击浏览并选择 maps 文件夹中的 obstacles.png 文件。
  5. 保持通道属性设置为亮度
  6. 障碍阈值设置为 0.5

    障碍阈值可定义图像亮度,以区分障碍和非障碍。

  7. 边界下,将值设置为地形的范围。

    “障碍”对话框设置

  8. 单击完成

    随即在 Scene Editor 窗口中创建 New Obstacle 地图图层。

    New Obstacle 图层已添加到 Scene Editor

  9. 检查器窗口中展开图层属性部分:

    attr obstacle = brightness < 0.5

    该代码用于确定属性映射,在本例中为布尔值 (true/false):

  10. 要在生成街道时应用障碍地图,请首先在 Scene Editor 窗口中关闭 New Obstacle 图层的可见性框。
  11. 视窗窗口中单击以取消选择 Scene Editor 窗口中的 New Obstacle 图层。
  12. 再次单击主菜单中的图形 > 生成街道...
  13. 展开环境设置部分。
  14. Obstaclemap 旁边,单击下拉菜单并选择 New Obstacle 以分配障碍地图。

    已应用 Obstaclemap

  15. 单击应用

    按障碍地图调整的街道

    生成街道工具将在障碍地图的白色区域创建街道,而非黑色区域。

    您的场景应该类似 Part_2_End.cej 场景。

注:

生成街道工具还允许您使用参数自动创建街道模式。 有关详细信息,请参阅街道模式示例

清理街道

有时,街道网络具有需要清理的冲突图形段。 当无法创建正确的形状时,这些错误将以红色突出显示。 可以使用清理图形工具 清理街道工具 清理街道网络问题。

  1. 打开 Part_3_Start.cej 场景。
  2. 缩放到以红色标记的冲突图形段。

    视窗显示了冲突段

  3. 可以使用选择工具 “选择”工具 选择冲突段周围的区域。
  4. 单击工具栏上的清理图形工具 “清理街道”工具 (C) 或者选择主菜单中的图形 > 清理图形... 以打开清理图形对话框。

    “清理图形”对话框

  5. 保留默认设置。

    有关详细信息,请参阅清理街道

  6. 单击完成

    已清理网络的视窗透视图

    将您的场景与 Part_3_End.cej 场景进行比较。

对齐地形

创建的街道通常沿着地形表面或者建筑物的位置。 通常,场景中已创建的对象未与地形正确对齐,例如在导入 2D GIS 数据时。

下表列出了可将街道和形状与地形对齐的工具:

将图形与地形对齐

将街段投影到地形上

将形状与地形对齐

将静态形状投影到地形上*。

将地形与形状对齐

将地形与静态和/或动态形状对齐。

注:

*手动绘制或导入的形状称为静态形状。 关于对齐,动态城市布局工具将创建无法使用对齐工具对齐的动态形状。 由于动态形状将创建为(动态)区块的子区块(对于街道也是如此),因此“区块细分”参数包含对齐的特定参数。 有关详细信息,请参阅区块参数

将图形与地形对齐

首先,您需要将图形与地形对齐。

  1. 打开 Part_4_Start.cej 场景。

    将街道与地形对齐

  2. 在场景中选择一些形状。

    要对齐的所选街道

  3. 单击工具栏上的将图形与地形对齐工具 “将街道与地形对齐”工具或者选择主菜单中的图形 > 将图形与地形对齐...
  4. 高度地图旁边,单击下拉菜单并选择地形高程

    “将图形与地形对齐”对话框

    有关详细信息,请参阅将街道与地形对齐

  5. 偏移值设置为 0.2
  6. 单击 完成

    与地形对齐后的街道

    注:

    变化不是很明显。 要获得更强的效果,请更改最大高度值。

将地形与形状对齐

接下来,您需要将地形与场景中的动态形状对齐。

  1. 再次在场景中选择一些形状。
  2. 单击工具栏上的将地形与形状对齐工具 “将地形与形状对齐”工具 或者选择主菜单中的地形 > 将地形与形状对齐... 以打开将地形与形状对齐对话框。

    “将地形与形状对齐”对话框

    有关详细信息,请参阅将地形与形状对齐
  3. 保留默认设置,然后单击应用

    将地形与形状对齐后的街道

    注:

    由于街道已经与地形对齐,因此发生了非常细微的变化。

  4. 单击关闭
  5. 单击 Scene Editor 窗口中的地形高程图层。
  6. 检查器窗口的高程部分下,使用下拉菜单交替禁用和启用应用对齐设置。

    检查器中的高程

    地形将在未对齐和对齐状态之间来回切换。 这意味着对齐数据或 elevationDelta 属性存储为文件。

  7. 展开图层属性部分以查看 elevationDelta 属性如何帮助定义 elevation 属性。

    attr elevation = map_01(brightness, minHeight, maxHeight) + elevationDelta + elevationOffset

  8. 保存场景。
  9. 单击文件 > 刷新工作空间以刷新教程工程工作空间。

    data 文件夹现在包含 Part_4_Start.cej 文件夹中的高程增量文件。

    elevation_delta 图像所在的数据文件夹

    在首次对齐地形后,必须保存场景。

  10. 要从俯视图查看高程文件,请通过单击主菜单中的窗口 > 新建视窗 > 俯视图创建一个新视窗。
  11. elevation_delta 文件拖动到俯视图视窗中。

    灰度增量地图结果

    16 位增量地图用于存储高程变化(灰色 = 无变化;黑色 = 较低;白色 = 较高)。 有关详细信息,请参阅高程增量地图

    打开 Part_4_End.cej 场景以查看完成的场景。

动态城市布局

动态城市布局是一组工具和功能,可用于快速创建城市布局。 结果是一系列形状,可以与 CGA 规则配合使用以创建 3D 模型。 主要元素为街道和区块。 如果街道中心线实际包围一个区域(并且网络连接良好),则将创建区块。 您可以选择使用虚线来表示区块。

街段和区块都具有单独的参数,这些参数将驱动创建其子对象,即动态形状。

对象类型

在浏览已生成的街道时,您将发现存在三种可选择的对象类型,其参数将驱动并影响形状创建:节点区块

段参数

所选街道段
检查器段参数

节点参数

所选节点
检查器节点参数

区块参数

所选区块
包含参数的检查器区块对话框

Create Shape 参数对所有三种对象类型都是通用的,用于启用或禁用形状几何创建。 例如,您可能希望为街道创建形状,而非在区块中创建细分。

随意调整不同对象类型的参数,例如调整街道和人行道的宽度;创建一些环状交叉路并编辑其半径;或者创建一些死胡同。

区块细分类型

接下来您将使用区块细分。 在场景中选择一个区块并更改 Subdivision Type 参数。 每个细分算法都拥有自己的参数,并用于创建特定模式。

递归细分

递归细分

框架细分

框架细分

偏移细分

偏移细分

无细分

无细分

现在,您对动态形状创建过程有了更好的了解。 在接下来的部分中,您将探索街道绘制、编辑街道和曲线以及生成街道模型。

使用街道

在之前的部分中,您使用了动态城市布局工具创建街道网络,练习了清理街道,并使用了对齐地形。 现在,您将学习一些使用街道的常见工作流。

手动绘制街道

首先,您将探索使用面街道创建 “面街道创建”工具手绘街道创建 “手绘街道创建”工具 工具来绘制街道

  1. 要将街道添加到现有网络,请单击工具栏上的面街道创建工具 面街道创建工具 (G)。
    1. 捕捉并单击以放置新街道的第一个节点。

      使用面街道工具进行绘制

    2. 双击以完成街道。

      已完成的面街道

      可以在面街道创建工具选项窗口 工具选项 中设置路段长度和其他属性。 有关详细信息,请参阅绘制面街道

  2. 要手绘街道,请单击工具栏上的手绘街道创建工具 手绘街道创建工具 (Shift+G)。
    1. 捕捉并单击,然后拖动以开始绘制新街道。

      使用手绘工具绘制街道

    2. 释放鼠标按钮完成街道。

      已完成的手绘街道

      可以在手绘街道创建工具选项窗口 工具选项 中设置街道宽度和其他属性。 有关详细信息,请参阅绘制手绘街道

曲线段

接下来,您将练习将街道段从直线更改为曲线,反之亦然。

  1. 选择一些街道。
  2. 可以使用主菜单中的图形 > 设置曲线直线图形 > 设置曲线平滑工具。

    可以使用这些工具在直线和曲线之间切换街道。 下图是设置曲线直线设置曲线平滑 工具之间差异的一个很好的示例。

    “设置曲线直线”和“设置曲线平滑”工具

    可以使用控点来调整街道的曲率。 有关详细信息,请参阅直线与平滑

    注:
    请记住,弯曲街道会产生许多面,因此,建议您将其保持在最小值。

  3. 编辑已创建的弯曲街道的段数精度。
    1. 选择街道并单击检查器窗口中的精度参数。

      精度参数值设置为 0.5

      精度为 0.5 的弯曲街道

    2. 将值更改为 0.25

      精度为 0.25 的弯曲街道

编辑街道

接下来,您将使用编辑街道/曲线工具 “编辑街道/曲线”工具 来编辑街道和曲线。

  1. 单击工具栏上的编辑街道/曲线工具 “编辑街道/曲线”工具 (C)。

    有关详细信息,请参阅编辑街道和曲线

  2. 可以使用控点编辑街道和人行道的宽度。
  3. 编辑切线控点。

    根据视角,将显示要编辑的水平或垂直切线控点。

    切线编辑的视窗透视图

生成街道模型

最后,您将使用 Street Construction Simple.cga 规则生成街道模型。

  1. 展开 Streetnetwork 图层并右键单击 Network 子图层。
  2. 右键单击选择对象

    由此将仅选择街道,而非区块。

  3. Street Construction Simple.cga 规则拖动到所选形状上。

    由规则生成街道模型和 3D 对象。

    已生成模型的街道

    注:

    可以编辑街道,包括长度、宽度和曲线,并动态重新生成模型。

  4. 选择街道形状并单击检查器窗口中的初始规则链接。

    由此可在 CGA 编辑器中探索规则。

    CGA 编辑器中带有初始规则的街道段

    下图按颜色演示了 StartRules 和相应的街道形状。

    街道形状 1
    街道形状 2

    注:

    通过将 color_streetshapes.cga 规则应用于街道,可以更多地探索颜色形状。

    打开 Part_5_End.cej 场景以查看完成的场景。

有关导入街道的详细信息,请参阅教程 4:导入街道

在本教程中,您学习了以下内容:

  • 如何导入地形、自动生成街道、清理街道和对齐地形。
  • 动态城市布局如何创建可直接与 CGA 规则配合使用的形状(如街区和街道)。
  • 如何绘制街道、编辑街道以及生成街道模型。

要继续学习 CityEngine,请参阅完整的 CityEngine 教程目录