要访问 ArcGIS CityEngine 中的教程工程,请打开 CityEngine,然后在主菜单中单击帮助 > 下载教程和示例。 在选择教程或示例后,系统会自动下载工程并将其添加到 CityEngine 工作空间。
通常,在开始 CityEngine 场景时,将首先创建地形。 可以根据简单图像文件或数字高程模型 (DEM)(例如支持地理配准信息的 GeoTIFF 文件)创建地形。
在本教程中,您将学习如何创建和对齐地形;生成街道和清理街道,以及动态城市布局的基础知识。
创建地形
要创建地形,请执行以下操作:
- 展开 Tutorial_02_Terrain_and_Dynamic_City_Layouts 教程文件夹。
- 单击 Part_1_Start.cej 文件以打开该场景。
- 打开 \maps\ 文件夹,然后将 elevation.jpg 图像拖放到视窗中以打开导入对话框。
- 选择地形导入并单击下一步。
- 在纹理文件下,单击浏览以选择 \maps\ 文件夹中的 topo.png 纹理文件。
- 单击打开。
- 保持通道属性设置为 brightness。
- 将最大高度值设置为 150。
- 在边界下,编辑尺寸和位置值,如下图所示:
注:
如果加载不含地理配准信息的图像,则其像素分辨率将设置为地形尺寸。
- 选择保持比例按钮 并确保对齐按钮 设置为中心。
- 单击 完成。
随即创建 Terrain elevation 图层并将其添加到 Scene Editor。
- 单击 Scene Editor 中的图层以在检查器中编辑属性。
- 更改分辨率值。
地形的分辨率可确定地形网格平面的细分数量。
您可以随意调整分辨率,默认情况下,分辨率设置为高度地图图像的大小。 通过自定义格网大小,您可以影响场景性能。
打开 Part_1_End.cej 场景以查看位于 \scenes\ 文件夹中的已完成示例。
注:
目前,CityEngine 仅支持基于图像的地形(灰度高度地图),不支持 3D 网格。 如果您仅拥有 3D 网格或任何其他数据类型,则需要将其转换为高度地图。
生成街道
在教程 1:必备技能中,您学习了如何在没有高程的平面格网上生成街道。 现在,您将使用生成街道工具和算法直接调整街道以适应实际地形高程。
使用高度地图生成街道
要使用高度地图生成街道,请执行以下操作:
- 单击 Part_2_Start.cej 文件以打开该场景。
- 单击主菜单中的图形 > 生成街道...以打开生成街道对话框。
- 展开环境设置部分。
- 在高度地图旁边,单击下拉菜单并选择地形高程。
- 单击应用。
随即将 Streetnetwork 图层添加到 Scene Editor。
街道将自动与地形对齐。
- 单击关闭以查看视窗中的街道。
使用障碍地图生成街道
您可能已注意到,生成街道工具将随机生成街道。 这将包含您可能不希望存在街道的区域。 您可以创建一个障碍地图,以便将这些区域留空并最大限度地减少手动清理过程。 障碍地图为黑白图像,其中亮度定义了街道可以生成的区域。
要添加障碍地图,请执行以下操作:
- 在 Scene Editor 中单击鼠标右键,然后选择新建 > 新建地图图层以打开新建地图图层对话框。
- 单击障碍。
- 单击下一步。
- 单击浏览并选择 \maps\ 文件夹中的 obstacles.png 文件。
- 保持通道属性设置为亮度。
- 将障碍阈值设置为 0.5。
障碍阈值可定义图像亮度,以区分障碍和非障碍。
- 在边界下,将值设置为地形的范围。
- 单击完成。
随即在 Scene Editor 中创建 New Obstacle 地图图层。
- 在检查器中展开图层属性部分:
attr obstacle = brightness < 0.5
该代码用于确定属性映射,在本例中为布尔值 (true/false):
- 要在生成街道时应用障碍地图,请首先在 Scene Editor 中关闭 New Obstacle 图层的可见性框。
- 在视窗中单击以取消选择 Scene Editor 中的 New Obstacle 图层。
- 再次单击主菜单中的图形 > 生成街道...。
- 展开环境设置部分。
- 在 Obstaclemap 旁边,单击下拉菜单并选择 New Obstacle 以分配障碍地图。
- 单击应用。
生成街道工具将在障碍地图的白色区域创建街道,而非黑色区域。
您的场景应该类似 Part_2_End.cej 场景。
注:
生成街道工具还允许您使用参数自动创建街道模式。 有关详细信息,请参阅街道模式示例。
清理街道
有时,街道网络具有需要清理的冲突图形段。 当无法创建正确的形状时,这些错误将以红色突出显示。 可以使用清理图形工具 清理街道网络问题。
- 打开 Part_3_Start.cej 场景。
- 缩放到以红色标记的冲突图形段。
- 可以使用选择工具 选择冲突段周围的区域。
- 单击工具栏上的清理图形工具 (C) 或者选择主菜单中的图形 > 清理图形... 以打开清理图形对话框。
- 保留默认设置。
有关详细信息,请参阅清理街道。
- 单击完成。
将您的场景与 Part_3_End.cej 场景进行比较。
对齐地形
创建的街道通常沿着地形表面或者建筑物的位置。 通常,场景中已创建的对象未与地形正确对齐,例如在导入 2D GIS 数据时。
下表列出了可将街道和形状与地形对齐的工具:
注:
*手动绘制或导入的形状称为静态形状。 关于对齐,动态城市布局工具将创建无法使用对齐工具对齐的动态形状。 由于动态形状将创建为(动态)区块的子区块(对于街道也是如此),因此“区块细分”参数包含对齐的特定参数。 有关详细信息,请参阅区块参数。
将图形与地形对齐
首先,您需要将图形与地形对齐。
- 打开 Part_4_Start.cej 场景。
- 在场景中选择一些形状。
- 单击工具栏上的将图形与地形对齐工具 或者选择主菜单中的图形 > 将图形与地形对齐...。
- 在高度地图旁边,单击下拉菜单并选择地形高程。
有关详细信息,请参阅将街道与地形对齐。
- 将偏移值设置为 0.2。
- 单击 完成。
注:
变化不是很明显。 要获得更强的效果,请更改最大高度值。
将地形与形状对齐
接下来,您需要将地形与场景中的动态形状对齐。
- 再次在场景中选择一些形状。
- 单击工具栏上的将地形与形状对齐工具 或者选择主菜单中的地形 > 将地形与形状对齐... 以打开将地形与形状对齐对话框。有关详细信息,请参阅将地形与形状对齐。
- 保留默认设置,然后单击应用。
注:
由于街道已经与地形对齐,因此发生了非常细微的变化。
- 单击关闭。
- 单击 Scene Editor 中的地形高程图层。
- 在检查器的高程部分下,使用下拉菜单交替禁用和启用应用对齐设置。
地形将在未对齐和对齐状态之间来回切换。 这意味着对齐数据或 elevationDelta 属性存储为文件。
- 展开图层属性部分以查看 elevationDelta 属性如何帮助定义 elevation 属性。
attr elevation = map_01(brightness, minHeight, maxHeight) + elevationDelta + elevationOffset
- 保存场景。
- 单击文件 > 刷新工作空间以刷新教程工程工作空间。
\data\ 文件夹现在包含 \Part_4_Start.cej\ 文件夹中的高程增量文件。
在首次对齐地形后,必须保存场景。
- 要从俯视图查看高程文件,请通过单击主菜单中的窗口 > 新建视窗 > 俯视图创建一个新视窗。
- 将 elevation_delta 文件拖动到俯视图视窗中。
16 位增量地图用于存储高程变化(灰色 = 无变化;黑色 = 较低;白色 = 较高)。 有关详细信息,请参阅高程增量地图。
打开 Part_4_End.cej 场景以查看完成的场景。
动态城市布局
动态城市布局是一组工具和功能,可用于快速创建城市布局。 结果是一系列形状,可以与 CGA 规则配合使用以创建 3D 模型。 主要元素为街道和区块。 如果街道中心线实际包围一个区域(并且网络连接良好),则将创建区块。 您可以选择使用虚线来表示区块。
街段和区块都具有单独的参数,这些参数将驱动创建其子对象,即动态形状。
对象类型
在浏览已生成的街道时,您将发现存在三种可选择的对象类型,其参数将驱动并影响形状创建:段、节点和区块。
段参数 | |
节点参数 | |
区块参数 |
Create Shape 参数对所有三种对象类型都是通用的,用于启用或禁用形状几何创建。 例如,您可能希望为街道创建形状,而非在区块中创建细分。
随意调整不同对象类型的参数,例如调整街道和人行道的宽度;创建一些环状交叉路并编辑其半径;或者创建一些死胡同。
区块细分类型
接下来您将使用区块细分。 在场景中选择一个区块并更改 Subdivision Type 参数。 每个细分算法都拥有自己的参数,并用于创建特定模式。
递归细分 | |
框架细分 | |
偏移细分 | |
无细分 |
现在,您对动态形状创建过程有了更好的了解。 在接下来的部分中,您将探索街道绘制、编辑街道和曲线以及生成街道模型。
使用街道
在之前的部分中,您使用了动态城市布局工具创建街道网络,练习了清理街道,并使用了对齐地形。 现在,您将学习一些使用街道的常见工作流。
手动绘制街道
首先,您将探索使用面街道创建 和手绘街道创建 工具来绘制街道。
曲线段
接下来,您将练习将街道段从直线更改为曲线,反之亦然。
- 选择一些街道。
- 可以使用主菜单中的图形 > 设置曲线直线和图形 > 设置曲线平滑工具。
可以使用这些工具在直线和曲线之间切换街道。 下图是设置曲线直线和设置曲线平滑 工具之间差异的一个很好的示例。
可以使用控点来调整街道的曲率。 有关详细信息,请参阅直线与平滑。
注:
请记住,弯曲街道会产生许多面,因此,建议您将其保持在最小值。 - 编辑已创建的弯曲街道的段数精度。
- 选择街道并单击检查器中的精度参数。
精度参数值设置为 0.5
- 将值更改为 0.25。
- 选择街道并单击检查器中的精度参数。
编辑街道
接下来,您将使用编辑街道/曲线工具 来编辑街道和曲线。
- 单击工具栏上的编辑街道/曲线工具 (C)。
有关详细信息,请参阅编辑街道和曲线。
- 可以使用控点编辑街道和人行道的宽度。
- 编辑切线控点。
根据视角,将显示要编辑的水平或垂直切线控点。
生成街道模型
最后,您将使用 Street Construction Simple.cga 规则生成街道模型。
- 展开 Streetnetwork 图层并右键单击 Network 子图层。
- 右键单击选择对象。
由此将仅选择街道,而非区块。
- 将 Street Construction Simple.cga 规则拖动到所选形状上。
由规则生成街道模型和 3D 对象。
注:
可以编辑街道,包括长度、宽度和曲线,并动态重新生成模型。
- 选择街道形状并单击检查器中的初始规则链接。
由此可在 CGA 编辑器中探索规则。
下图按颜色演示了 StartRules 和相应的街道形状。
注:
通过将 color_streetshapes.cga 规则应用于街道,可以更多地探索颜色形状。
打开 Part_5_End.cej 场景以查看完成的场景。
有关导入街道的详细信息,请参阅教程 4:导入街道。
在本教程中,您探索了创建地形、自动生成街道、清理街道、对齐地形以及创建动态城市布局。 然后,您学习了绘制街道、编辑街道和生成街道模型。
要继续学习 CityEngine,请参阅完整的 CityEngine 教程目录。