教程 14b:地形建模

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

地形建模

本教程是教程 14a:2D 和 3D 形状建模的延续,其中教授了基础手动绘制技巧。 在本教程中,您将了解更多有关处理地形的工具和选项:

  • 将形状和街道与地形对齐
  • 将地形与形状对齐
  • 使用画笔工具编辑地形
  • 在地形上绘制街道和形状

其中分为两个部分,模拟了 CityEngine 中的典型工作流:

  • 通过将覆盖区和街道与地形对齐来准备场景背景
  • 通过准备场景、添加街道退缩尺度、创建体量以及在地形上添加植被来创建重建方案

准备场景背景

在接下来的章节中,您将学习将街道、形状和地形匹配在一起的不同策略。 您将学习如何在地形上绘制街道以及消除因地形编辑产生的视觉伪影。 将背景数据准备就绪,以便可视化当前状况、执行分析任务以及设计未来的干预措施。

将街道和覆盖区与地形对齐

要将街道和覆盖区与地形对齐,请执行以下操作:

  1. Navigator 窗口中展开 Tutorial_14_Polygonal_Modeling 教程文件夹。
  2. 双击 scenes 文件夹中的 14B_ ModelingOnTerrain.cej 文件以在视口窗口中打开场景

    包含街道、覆盖区和地形的场景

    场景包含 3 个图层:

    • 地形
    • 街道
    • 覆盖区

    请注意,街道和覆盖区位于地形之下;在导入不含高度信息的已地理配准数据时,这是一个常见问题。 接下来,您将通过将街道和覆盖区移至地形上方来解决此问题。 您无需手动执行此操作,因为 CityEngine 提供了将街道与地形对齐将形状与地形对齐工具来完成此任务。

    注:

    如果您希望了解有关如何导入数据的详细信息,请参阅教程 4:导入街道教程 5:导入初始形状基础知识:使用 GIS 数据教程。

  3. 首先,在场景编辑器窗口中右键单击 Streets 图层,然后单击选择对象以选择所有街道。

    在场景编辑器窗口中选择对象

  4. 单击主工具栏中的将街道与地形对齐工具 “将街道与地形对齐”工具 以打开将街道与地形对齐对话框。

    “将街道与地形对齐”工具将街道与地形对齐

    将街道与地形对齐对话框中,可以选择两种对齐街道节点的方式:Project All 可将所有选定节点投影到选定地形上,而 Project Below 仅移动位于地形下方的节点。 所有街道节点目前均位于地形下方,因此设置哪个选项均没有影响。

    对齐功能设置为“投影全部”

    如果使用高度地图选项,则可以选择节点要与之对齐的场景中的地形。 无论场景中存在的地形数量如何,始终可以选择 y=0 选项,这意味着所有街道节点均放置在地面上。

    高度地图设置为地形

    CityEngine 中,节点形状始终保持为平面。 将通过线段形状来均衡两个节点之间的高度差。 这意味着将街道与地形对齐之后,街道的某些部分可能仍然位于地形之下。 可以通过定义正偏移来解决此问题。 在本教程的后续部分中,您将学习如何将地形与街道形状对齐以解决此问题。

    含偏移以及不含偏移的“投影全部/下方”
  5. 确保高度地图选项设置为 Terrain 并保留其他选项的默认设置。

    单击完成以应用对齐。

    街道已与地形对齐

    现在,所有街道已与地形对齐。

  6. 场景编辑器窗口中,从 Footprint 图层中选择所有形状。
  7. 单击主工具栏中的将形状与地形对齐工具 “将形状与地形对齐”工具 以打开该对话框。

    工具栏上的“将形状与地形对齐”

    将形状与地形对齐对话框和将街道与地形对齐对话框之间的唯一区别在于附加对齐选项:

    包含所有选项的对齐功能

    Project AllProject Below 功能的作用方式相同,但前者针对形状折点,而非街道节点进行操作。 Project to Object Average 将计算形状所有折点的平均值,并将其设置为该值,用于展平非平面形状。 下图显示了转换选项之间的差异:

    转换为最小值、平均值、最大值

    当放置在起伏地形上时,如果将建筑物覆盖区转换为最大值,则将出现明显漂浮效果;如果转换为最小值,则将出现下沉效果,所有边均位于地形之上或之下;如果转换为平均值,则部分形状会位于地形之上,部分形状会位于地形之下。

  8. 对齐功能选项设置为 Translate to Minimum 可以避免出现需要进一步进行地形编辑的间隙;当使用获取地图数据时,CityEngine 将对覆盖区应用相同选项。 再次将高度地图选项设置为 Terrain,然后单击完成以应用对齐。

    形状已与地形对齐

使用“转换为最大值”对齐覆盖区

虽然 Translate to Minimum 选项在大多数情况下效果良好,但在对齐形状后,仍可能出现大部分形状位于地形下方的情况。 对于陡峭地形上的大型形状来说,这是一个常见问题。 要修复此问题,请执行以下操作:

  1. 导航至场景右下角,或者单击书签菜单 书签 中的 Align footprints to terrain

    以下两个示例存在对齐问题。

    具有对齐问题的形状

    具有对齐问题的其他形状

  2. 手动选择这些形状,或者应用 Shapes to translate to maximum 选择集

    选择集

    具有对齐问题的所选形状

  3. 再次运行将形状与地形对齐工具,但这次将 Align function 选项设置为 Translate to Maximum

    具有已修复对齐问题的形状

效果将明显改善。

将地形与覆盖区对齐

使用 Translate to Maximum 选项对齐覆盖区后,建筑物的某些部分不再与地面接触。 要解决此问题,可以抬高地形,使其与形状的高度相匹配。

  1. 在形状仍处于选中状态的情况下,单击主工具栏中的将地形与形状对齐工具 “将地形与形状对齐”工具

    工具栏上的“将地形与形状对齐”

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

    选中添加边界复选框后,对齐将应用于形状区域,并在形状外部应用较小的偏移。

    “添加边界”选项处于选中状态

    默认情况下,地形将在原始地形与已编辑地形之间垂直对齐。 如果使用平滑边界选项,则可以选择 Smooth range​ 或 Constant gradient​ 来定义过渡方法。

    “平滑边界”设置为“平滑边框”

    “斜率常量”和“平滑边框”之间的差异

  2. 为了获得视觉上令人满意的效果,请将平滑边界设置为 Smooth range,将边界范围设置为 2 m,并选中边界缓动复选框。

    保留所有其他选项的默认设置,然后单击应用关闭

    已沿所选形状抬高地形

    现在,已沿所选形状抬高地形。

  3. 取消选择形状,然后放大左侧建筑物并仔细查看(书签:地形平滑)。

    带有可见已编辑伪影的地形

    原始地形和已编辑地形之间的过渡处存在可见伪影。

  4. 可以使用地形平滑画笔工具 地形平滑画笔 移除伪影。

    单击画笔后,视口窗口中将显示一个橙色圆圈,指示单击时将应用平滑的区域。 当圆圈位于地形下方时,其将呈现半透明状态。

    使用“地形平滑画笔”工具

  5. 在继续之前,请先设置场景,以便在编辑地形时获得更好的可视效果。
  6. 场景编辑器窗口中,选择 Terrain 图层。

    检查器窗口的图层选项部分中,将线框选项设置为 Enabled

    “线框”设置为“已启用”

    现在,将在地形顶部渲染格网。

  7. 对伪影进行平滑处理。

    视口窗口中,单击地形以在指针位置处应用平滑处理,然后拖动以持续进行平滑处理。

    对地形伪影进行平滑处理

    可以看到,使用默认设置的平滑强度过大。 按 Ctrl+Z 以撤销平滑处理。

    地形平滑画笔工具选项中,通过更改画笔大小、强度和平滑行为来微调画笔设置。 强度取决于地形的分辨率。

  8. 对于此场景中的地形,请将强度设置为 2.5%,并将画笔大小减小为 5 m 以获得更好的控制效果。 将圆圈定位在略超出建筑物的位置,然后沿着边缘进行拖动以平滑地形的陡峭区域。​

    平滑陡峭地形

  9. 继续沿着所有与地形对齐的建筑物边缘进行必要的平滑处理。

    您的结果应类似于下图:

    平滑后的地形

    提示:
    要沿着建筑物进行平滑,通常必须调整相机位置。 当停止并重新进行平滑时,新圆圈和前一个圆圈之间可能会出现可见边界。 要解决此问题,请使用 Continuous smoothing 选项并将强度设置为 0.1%,然后再次对受影响区域进行平滑处理。

很好,现在所有对象均已位于正确位置。

将地形与街道对齐

当进一步检查场景时,可以看到某些区域中的地形与街道重叠(书签:将地形与街道对齐)。 其原因在于街道几何取决于节点的高度。 节点形状与节点的高度相同,将通过车道形状来弥合两个节点之间的高度差。 要解决重叠问题,您将再次使用将地形与形状对齐工具 “将地形与形状对齐”工具

地形与街道重叠

  1. 选择场景中的所有街道,然后单击将地形与形状对齐工具 “将地形与形状对齐”工具
  2. 保留上次对齐的设置。

    使用“将地形与形状对齐”工具修复重叠的街道

  3. 依次单击应用关闭

    地形已与街道对齐

现在,所有街道均完全可见。

添加缺失的街道

如果数据不完整,您可能需要通过追踪底层地图来添加一些数据。 在本示例中,由于部分街道缺失,在接下来的步骤中,您将学习如何在地形上手动绘制街道。

  1. 导航至河流上方的此区域(书签:添加缺失的街道)。

    缺失街道的区域

  2. 确保选择面街道创建工具 “面街道创建”工具 (G)。

    在工具选项中,将街道配置选项设置为 Neighborhood_Street_6m 并关闭重用邻近点的设置切换按钮,否则在开始绘制连接到现有街道的线段时,将不会分配所选配置。

    “面街道创建”工具选项

  3. 首先在曲线的中心位置处单击一次,然后沿着街道进行追踪。 每个新节点都会自动放置在地形上。

    在地形上添加节点以创建街道

  4. 连接到底部街道后,按 Esc 键以结束绘制模式。

    根据将地形与形状对齐对话框中最近使用的设置,地形会自动与街道形状对齐。

    已在地形上创建街道

创建桥梁

大多数情况下,最好确保街道与地形对齐。 但是,诸如桥梁、高架桥、坡道和桥墩等高架网络要素需要采用不同的方法。

  1. 进一步略微缩小,关注之前已绘制街道左侧的区域(书签:添加桥梁)。

    缺失街道并横跨河流的地形

    可以从地形上看出,缺失的街道横跨河流。

  2. 选择面街道创建工具 “面街道创建”工具

    街道配置选项设置为 Simple_Street_Generic_12m 并关闭对齐地形相交线段切换按钮。

    “面街道创建”工具选项设置为“创建桥梁”

  3. 以底图为参考,从地形边缘开始追踪街道。

    追踪街道

  4. 连接到另一侧的现有街道。

    连接到现有街道

  5. 将街道绘制到地形图的末端。

    已完成街道以添加桥梁

  6. 单击编辑街道/曲线工具 “编辑街道/曲线”工具,然后拖动绿色控点以水平调整曲线,使其与地图上的线相匹配。

    使用绿色控点调整曲线

  7. 接下来,您将垂直调整曲线。
  8. 调整相机位置,使其朝向更浅的角度,直到绿色控点由水平方向变为垂直方向为止。

    拖动绿色控点,直到曲线更随沿现有地形为止。

    调整曲线以随沿地形

  9. 相应地调整下一段街道。

    调整下一段街道

  10. 选择桥梁之后的街道部分。

    已选择桥梁之后的街道部分

  11. 使用将地形与形状对齐工具 “将地形与形状对齐”工具以对齐形状。

    地形已与街道对齐

您已顺利完成第一部分;现在即可为场景准备重新开发提案。 在进行第二部分之前,请考虑保存场景。 作为一种备用方案,您也可以使用已完成所有之前步骤的 14B_ModelingOnTerrain_Redevelopment.cej 场景。

街道和覆盖区已与地形对齐的最终场景

创建重新开发提案

在此部分中,您将创建两个方案

  • 现有条件
  • 重新开发

重新开发的目标是移除现有建筑物,并将场地分为 3 个部分:A、B 和 C,每个部分具有不同的体量。 您将手动绘制 A 和 B 的地块和街区形状,并从 Esri.lib 中分配 CGA 规则以生成体量。 C 部分的体量已经预先制作完成,因此您可以将其作为静态模型导入并正确放置在场景中。

重新开发场地分为 A、B 和 C 三个部分

准备场地

接下来,您将设置场景,以便比较当前的建筑环境和新的重新开发提案。 为此,您将创建两个方案:

  • 现有条件:包含场地上的现有建筑物以及之前已修改的地形图层。
  • 重新开发:在现有地形的副本上显示新开发项目,您将进一步对其进行修改以符合提案。
  1. 导航至该场地并选择所有现有建筑物(书签:场地)。

    现有所选建筑物

  2. 使用快捷菜单或者按 Ctrl + X 剪切所选建筑物。

    用于剪切所选建筑物的快捷菜单

  3. 场景编辑器窗口中,单击加号图标以创建一个名为 Existing Conditions 的新方案。

    新的现有条件方案

    ID 最多可包含 4 个字符,并将显示在场景编辑器窗口中。 将其设置为 EC,然后单击确定

  4. Ctrl+V 进行粘贴并将之前剪切的建筑物添加至此方案。

    将在场景编辑器窗口中创建一个新图层。 将其重命名为 Existing Buildings

    场景编辑器中新的 Existing Conditions 图层

  5. 场景编辑器窗口中选择 Terrain 图层。

    方案旁的检查器窗口中,单击编辑以将方案类型由默认图层更改为方案图层

    将方案编辑为“方案图层”

  6. 右键单击新创建的方案,然后单击复制

    复制方案

  7. 将复制方案命名为 Redevelopment

    重新开发复制方案

    创建完成后,Redevelopment 方案将设置为活动方案。

  8. 从方案中移除 Existing Buildings 图层,并将地形图层重命名为 Terrain New

    RDEC 方案之间切换以验证差异。 两种方案中的地形看起来仍然完全相同,但从现在开始,编辑内容仅应用于当前活动方案中的地形。

添加街道退缩尺度

接下来,使用参考线为场地添加街道退缩尺度。 为简化操作,所有退缩尺度均设置为距离人行道 7 m。 这与现有建筑物的退缩尺度也大致相同。

  1. 导航至场地右下角,然后单击参考线创建工具 “参考线创建”工具

    单击人行道的外边缘,然后开始拖动参考线。

    创建参考线

  2. 如虚线和垂直符号所示,将在地形上创建参考线。 但是,无论地形如何,您都希望与人行道之间的退缩尺度正好为 7 m
  3. 在工具选项中启用强制平面切换按钮。

    现在,虚线与人行道位于同一平面上,橙色铅垂线将指示绘制平面上的位置与地形之间的垂直距离。

    偏移选项设置为 7 m,然后单击以创建平面参考线。

    使用偏移创建的参考线

  4. 继续添加参考线,直到场景看起来类似下图为止:

    创建参考线以创建退缩尺度

    为了获得更好的可视效果,可以在可见性设置 可见性设置 中暂时隐藏地形,或者通过按 F9 键直接隐藏地形。

绘制体量的形状

导航至更接近 A 部分的位置。 对于此部分,您将绘制一个覆盖所有可用周长的形状。

  1. 选择面形状创建工具 “面形状创建”工具 (S)。

    确保已启用强制平面切换按钮,以便将第一个绘制点的高度值用于所有后续点,从而确保平面形状。 按 Y 键将视图设置为自上而下,然后在视图设置工具 视图设置 中取消选中阴影/纹理上的线框 (7) 选项以暂时隐藏格网。

  2. 从第二行之前的建筑物右下角开始。

    开始绘制体量的形状

  3. 将下一个点放置在现有建筑物之间的参考线交叉点处。

    将点放置在参考线和现有建筑物的交叉点处

  4. 沿着街道进行追踪,并在参考线的交叉点处添加点。

    沿街道进行追踪以添加点

  5. 由于未在左上角添加参考线,因此需要猜测下一个点的位置。 降低相机位置,直到看见粗线为止。
  6. 单击以将下一个点放置在左上角街道曲线附近。

    将点放置在街道曲线左侧

    在强制平面模式下,所有参考线将投影到当前绘制平面上。

  7. 捕捉到投影参考线,然后沿其移动鼠标,直到铅垂线位于第一行之前的建筑物左上角为止。

    捕捉到投影参考线

  8. 继续移至第二行建筑物的右上角,并添加一个点。 单击初始点或按 Enter 键以完成面。

  9. /ESRI.lib/rules/Components/Massing/Urban_Block 文件夹中的 Perimeter_Stacked.cga 规则分配给新创建的形状,并启用阴影/纹理上的线框选项。

    Perimeter_Stacked.cga 规则已分配给形状

  10. 检查器窗口中,将高度设置为 24,将深度设置为 12,并将 Lower_Side_Position 设置为 Front-Right-Corner

    检查器窗口中已调整的形状

  11. 对于 B 部分,绘制两个矩形形状以生成联排房屋;一个从上部参考线开始,另一个从下部参考线开始。
  12. 切换至矩形形状创建工具 “矩形形状创建”工具 (Shift+S) 工具。

    保持强制平面切换按钮处于开启状态。 对于两个矩形,使用长度 48 m,深度 18 m

    已绘制的两个矩形

  13. /ESRI.lib/rules/Components/Massing/Suburban_Block/ 文件夹中的 Rowhouses.cga 规则分配给两个形状。

    Rowhouses.cga 规则已分配给矩形

  14. 在“检查器”窗口中,将上排体量模型的高度参数设置为 9 m,将下排体量模型的“高度”参数设置为 12 m

    已生成 B 部分体量模型

放置 L 形状体量模型

C 部分已存在现有体量模型,可直接将其放入场景中。

  1. Navigator 窗口中,将 assets 文件夹中的 L-Shaped Mass.glb 文件拖入场景中。

    将 L-Shaped Mass.glb 拖入场景中

    “视口”窗口中的 L-Shaped Mass.glb

  2. F9 键,在可见性设置中暂时隐藏地形。

    单击变换移动工具 “移动”工具,然后启用调整位置和方向 (o) 切换按钮,将控点位置设置为底部外角。

    使用“调整位置和方向”工具

  3. F9 键再次打开地形可见性,然后使用橙色球将 L 形状体量模型移至下部参考线和之前建筑物位置的交点。

    使用“变换移动”工具移动的 L 形状体量模型

  4. 切换为变换旋转工具 “旋转”工具 并拖动绿色控点,直到 L 形状与参考线对齐为止。

    使用“变换旋转”工具旋转 L 形状

  5. F9 键再次隐藏地形。

    旋转后形状

    可以看到建筑物的底部与参考线未完全对齐。 原因在于创建参考线时所依据的街道并非水平。 您也可以使用红色控点进行垂直对齐,但是,对于此项目来说,建筑物应该保持水平,因此可以保持原样。

  6. 再次显示地形,然后单击变换移动工具 “移动”工具

    启用移动时启用复制切换按钮,然后拖动橙色球,直到其捕捉到上方参考线为止。

    复制并移动 L 形状

  7. 单击变换旋转工具 “旋转”工具 以旋转 L 形状,直到其与参考线对齐为止。

    旋转 L 形状

现在,您的场景应与下图类似:

已复制、移动并旋转 L 形状

将体量与地形对齐

完成体量模型后,下一步需要将建筑物与地形对齐。 对于每个部分,您希望采用不同的策略以获得最佳效果。

  1. 导航至更接近外围建筑物的位置。

    可以看到,其与地形的融合效果非常好。 但是,在街面高度,应该存在通往建筑物的直接入口。

    编辑地形之前的街道

  2. 单击主工具栏中的地形编辑画笔工具 地形编辑画笔

    在工具选项中,将画笔大小设置为 3.5 m,将平滑边界设置为 Smooth Range,将范围设置为 2.5 m,并启用缓动切换按钮。 由半透明外环来可视化平滑范围。

  3. 将吸管工具 (y) 悬停在街道上方,将地形高度设置为街道高度。

    或者,可以从信息显示屏上读取指针位置处的高程,然后手动输入合适的值。

    使用鼠标将地形高度设置为街面高度

  4. 沿着建筑拖动,但不要悬停在街道上方,以避免产生新的重叠,因为此街道并非完全水平。

    将地形高度编辑为街面高度

  5. 如有必要,请使用地形平滑画笔工具 地形平滑画笔 来平滑已编辑地形和现有地形之间的区域。

    使用“地形平滑画笔”工具平滑地形

  6. 重复上述步骤,在上层街道上创建建筑物入口区域。

    在上层街道上创建建筑物入口

  7. 接下来,您将处理 B 部分。 目标是使联排房屋周围的地形与现有地形保持一致的三分之一坡度,从而形成适合植被生长的坡度,而无需依赖附加措施。
  8. 同时选择两个行形状。

    所选形状

  9. 单击将地形与形状对齐工具 “将地形与形状对齐”工具 以打开该对话框。

    平滑边界设置为 Constant gradient,将边界范围设置为最大值 50 m,将边界斜率设置为 33.33 degrees

    斜率的“将地形与形状对齐”对话框

  10. 依次单击应用关闭

    已使用“将地形与形状对齐”工具对齐建筑物

  11. 展平地形以使建筑物高程与街道高程一致。

    为此,可以使用地形编辑画笔工具 地形编辑画笔;或者复制行形状并将其移至街道附近,然后使用之前的设置应用将地形与形状对齐工具 “将地形与形状对齐”工具

    已展平地形以与街面高度相匹配

  12. 移除临时形状以查看结果。

    具有已展平地形的形状

  13. 对上一行重复对齐步骤,并根据需要平滑其他区域。

    已平滑上一行的地形

  14. 最后,您将处理 C 部分。 您将使用变换移动工具 “移动”工具 将两个 L 形状体量模型手动对齐到地形上。
    注:

    静态模型的地形对齐非常有限,因为仅考虑模型的枢轴点。 将地形与形状对齐已禁用;对于将形状与地形对齐,所有转换和投影选项都会产生相同的位置。

  15. 选择上方 L 形状。
  16. 单击变换移动工具 “移动”工具,然后拖动绿色箭头(y 轴),直到右下角接触地面为止。

    使用“变换移动”工具选择上方 L 形状

    已下移至地形的 L 形状

  17. 要允许从街道进入底部 L 形状区域,请按照与处理 A 部分中的入口时相同的方式应用地形编辑画笔工具 地形编辑画笔

    地形高度已编辑为街面高度

添加植被

接下来,您将在建筑物之间添加一些树木。 您将使用 CGA 规则将树木随机分配到某个区域,而无需手动种植每棵树木。 要应用该规则,首先需要绘制覆盖建筑物之间区域的形状。

  1. 单击面形状创建工具 “面形状创建”工具

    在工具选项中,确保关闭强制平面切换按钮。 对于此规则,您不希望形状为平面形状,否则树木将放置在地形以下或以上的位置。

  2. 绘制一个类似下图的面:

    在 L 形状之间绘制的面

  3. 将位于 rules 文件夹中的 Plant_Distributor_Simple.cga 规则分配给形状。

    Plant_Distributor_Simple.cga 规则是 ESRI.libPlant_Distributor.cga 规则的修改版,其中设置较少,并且 LowPoly 设置为树木的默认制图表达。

    分配给面之前的 Plant_Distributor_Simple.cga 规则

    具有大小、类型和位置的随机放置树木

    该规则根据随机种子值放置具有随机类型、大小和位置的树木。 更改该种子后,您将得到不同的变种。

  4. 要更改随机种子,请单击形状 > 更新种子或者在主菜单中按 Ctrl+Shift+G

    可以通过在检查器窗口中调整密度分布属性来进一步自定义结果。 在下图中,密度设置为 0.2分布设置为 Border

    面中分布的植被

  5. 对于 B 部分,在中间创建另一个面并分配相同的规则。

    将地形与形状对齐以避免树干出现在地面以上。

    在 B 部分中放置的植被

  6. 对于 A 部分,在庭院内绘制一个面,使其与建筑物略微错开。

    在 A 部分中放置的植被

至此操作结束。 可以在 Existing ConditionsRedevelopment 方案之间进行切换。 禁用地形线框并隐藏可见性设置中的 ShapesGraph Networks,以便更好地可视化您的工程。

具有“重新开发”方案的视点 1

具有“当前条件”方案的视点 1

具有“当前条件”方案的视点 2

具有“重新开发”方案的视点 2