要访问 CityEngine 中的教程,请单击帮助 > 下载教程和示例...。 在选择教程或示例后,系统会自动下载工程并将其添加到工作空间。
创建地形
通常,CityEngine 场景的起点是地形的创建。 可以根据简单图像文件或数字高程模型 (DEM) 创建地形。 在后一种情况下(例如,使用 GEOTiff 文件),将支持地理配准信息。
目前,CityEngine 仅支持基于图像的地形(灰度高度地图),不支持 3D 网格。 如果您仅拥有 3D 网格或任何其他数据类型,则需要使用诸如 Daylong Graphics 的 Leveler (http://www.daylongraphics.com/) 等工具将其转换为高度地图。
- 打开 Part_1_Start.cej 文件。
- 打开地图文件夹,然后将 height.jpg 图像拖放到视口中。
随即显示地形导入对话框。
- 使用浏览按钮将 Texture 文件更改为 topo.png 文件。
- 编辑边界,以使对话框如以下屏幕截图所示。
如果加载不含地理位置信息的图像,则其像素分辨率将设置为地形尺寸。
请注意保持比例和对齐按钮(默认值将居中;单击图标即可进行编辑)。
- 编辑最小和最大高程值(= 黑色和白色像素值高程),然后单击完成。
创建地形地图图层后,可以在场景编辑器中将其选中,然后在检查器窗口中查看其属性。
注:
可以编辑地形分辨率(地形平面的细分数)和线框 Alpha 值。 在视口的显示选项中,如果激活阴影/纹理上的线框选项(切换为 7),则后者将显示地形上的线框线。
- 浏览地形的属性。
生成街道 - 高度地图和障碍地图
生成街道 - 与地形对齐
在教程 1 中,您学习了如何在没有高程的平面格网上生成街道。 现在,您将使用生成街道算法以直接使生成的街道适应实际地形高程。
- 单击图形 > 生成街道以打开生成街道对话框并展开环境设置。
- 将高度地图下拉选项更改为地形的名称。
- 生成一些街道,然后查看其如何自动与地形对齐。
生成街道 - 障碍地图
您可能已注意到,生成街道功能将随机生成街道。 这将包含您可能根本不希望存在街道的区域。 为了允许您将这些区域留空,并最大程度地减少手动清理过程,CityEngine 具有障碍地图功能。 障碍地图为黑白图像,其中亮度将定义可生成区域。 要创建障碍地图,请完成以下步骤:
- 在场景编辑器中右键单击街道,然后选择删除以移除之前生成的街道。
- 单击图层 > 新建地图图层 > 障碍。
- 浏览至教程地图文件夹中提供的 barriers.png 图像文件。
- 定义与地形范围相同的范围。
- 保持通道处于亮度。
- 障碍阈值可定义图像亮度,以区分障碍和非障碍。
创建 Obstacle 图层后,将其选中并单击检查器中的其图层属性选项卡。 您将找到以下代码,该代码用于确定属性映射,在本例中为布尔值 (true/false):
attr obstacle = brightness < 0.5
- 在场景编辑器中隐藏障碍图层,以使其不会在视觉上干扰地形。
- 再次打开生成街道对话框并分配障碍地图。
- 将再次生成。
- 要在特定区域中生成更多街道,在生成更多街道之前,请选择一些现有图形段。
街道 - 清理图形工具
在某些情况下,CityEngine 的动态城市布局系统可能无法将街道网络中的冲突部分求解为正确的形状。 在这种情况下,CityEngine 将以红色突出显示冲突的图形段。
要解决此问题,可以通过编辑街道宽度、曲线半径或其他参数来手动解决此问题,但这可能是一项繁琐的工作。 快捷方式是使用清理图形工具。
- 找到冲突的图形段(或创建一个图形段)。
- 选择冲突区域周围的对象。 是否还选择了形状或其他对象类型并不重要。
- 单击工具栏上的清理图形工具。
随即显示清理图形对话框。
- 浏览设置,并阅读帮助中的“清理图形”工具文档。
- 现在已清理网络,类似于以下屏幕截图:
对齐对象
实际上,街道通常沿着地形表面或者在地形上放置建筑物的位置。 场景中新创建的对象很少能够直接正确对齐(例如,在导入 2D GIS 数据之后),因此需要特定的对齐工具。 CityEngine 提供了一系列命令,用于将某些对象类型与其他对象类型对齐。
下表列出了常见对齐类型:
对象 | 对齐类型 | 示例 |
---|---|---|
图形段 | > Terrain | 将街段投影到地形上 |
静态形状 * | > Terrain | 将覆盖区形状投影到地形上 |
地形 | > Shapes | 将地形与形状(街道组等)对齐。 |
注:
*手动绘制或导入的形状称为静态形状。 由于 CityEngine 自己用于创建形状的系统动态城市布局将动态创建形状,因此这些形状称为动态形状。 一个重要的细节是动态形状无法与对齐工具对齐。 由于动态形状将创建为(动态)区块的子区块(对于街道也是如此),因此 Block Subdivision 参数包含对齐的特定参数。 有关 Block Subdivision 的其他信息,请参阅本教程中的以下部分。
- 在场景中选择所有图形段。
- 单击工具条上的将图形与地形对齐按钮 。
- 选择您的地形作为高度地图。
- 添加偏移 0.2。
- 单击完成。
在此场景中,由于没有静态形状,因此需要继续将地形与已有的形状对齐。
- 选择场景中的所有形状(是否还选择了图形段都没有关系)。
- 单击工具条上的将地形与形状对齐按钮 。
- 在检查器中打开地形的图层属性。
- 多次切换启用 elevationDelta 复选框。
请注意地形如何在未对齐状态和已对齐状态之间来回切换。 这意味着必须以某种方式存储对齐数据 (levationDelta)。
- 保存场景。
- 刷新工程的数据文件夹。 (例如,右键单击该文件夹,然后使用快捷菜单中的刷新)。
现在,数据文件夹包含一个新文件夹,该文件夹与场景文件具有相同名称。 除非您在首次地形对齐后保存场景,否则此文件夹和 deltaMap 将不存在。
下图显示了用于存储更改(灰色 = 无更改;黑色 = 较低;白色 = 较高)的(16 位)增量地图。 该图像在您的示例中可能看起来完全不同。
动态城市布局
对象类型
动态城市布局是一组工具和功能,可用于快速创建城市布局。 结果是一系列形状,可以与 CGA 规则配合使用以创建 3D 模型。 主要元素为街道和区块。 如果街道中心线实际包围一个区域(并且网络连接良好),则将创建区块。 您可以选择使用虚线来表示区块。
街段和区块都具有单独的参数,这些参数将驱动创建其子对象,即动态形状。
在浏览目前已生成的街道时,您将发现存在三种可选择的对象类型,其参数将驱动并影响形状创建:图形段、图形节点和区块。
图形段
图形节点
图形节点是图形段的“末端”。
区块
这三种对象类型共有 shapeCreation 参数,用于确定特定对象类型是否可以生成形状。 例如,您可能希望在区块中获得街道形状,但不进行细分。 同样,动态形状是图形段、图形节点和区块的形状创建结果。
现在即可执行以下操作:
- 探索不同对象类型的所有参数。
- 创建一些环状交叉路,并编辑其半径。
- 创建一些死巷。
现在,您将专注于区块细分。 每个细分算法都拥有自己的参数,并用于创建特定模式。
注:
“形状创建”是一项使用动态城市布局的纯交互式任务。 “形状创建”和“区块细分”是与 CityEngine 规则系统 (CGA) 无关的任务。 必须首先存在(创建)形状,然后才能将 CGA 规则分配给形状以最终生成 3D 模型。
但是,可以选择使用 CGA 来细分完整区块形状(或任何其他宗地形状)。
街道 - 创建
除了导入图形段的选项之外,CityEngine 还在工具条上提供两个工具,专门用于创建街道图形:手绘街道创建和面街道创建工具。
- 可以使用两种工具来绘制一些街道。
- 转至图形 > 街道创建设置。
随即显示街道创建设置对话框。 可以在此对话框中定义街道灌木丛。
- 探索“街道创建设置”选项,并绘制更多街道。
曲线段
要使用曲线段创建街道,请完成以下步骤:
- 选择一些街段。
- 探索图形 > 设置曲线直线和设置曲线平滑命令。
选择单个图形段后,您还可以编辑精度参数以设置曲线街道的细分(段数)精度。 请记住,弯曲街道会产生许多面;最好将其保持在最小值。
街道 - 编辑
- 单击工具条上的编辑街道/曲线工具,或者针对键盘快捷键按 C。
- 编辑一些街道和人行道的宽度。
- 编辑一些切线。 根据视角,只能编辑水平切线或垂直切线。
街道 - 生成模型
- 探索在检查器中创建的街道的初始规则。 系统提供 5 种类型(您需要更改某些街道节点的类型参数才能找到它们)。
- 将提供的 Street Construction Simple.cga 规则分配给所有街道,然后生成模型。
- 在实时重新生成模型时,继续编辑街道。
街道模式示例
作为印象的工作流示例
- 创建一条单独的街道。
- 使用栅格模式的第一个生成阶段。
- 使用栅格模式的第二个生成阶段。
- 将连接两个网络。
参数集
- 栅格模式。
- 径向模式。
- 有机模式。
- 径向模式为主,栅格模式为辅的街道。
- 有机圆形模式。
- 蜂巢样式。
- 眼镜样式。
- 栅格的有机分布。