教程 3:地图控点

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

CGA 参数

城市由大量对象组成。 通过设置单个建筑物的属性来控制这些对象将非常繁琐,并且几乎是不可能的。 在本教程中,您将首先学习如何使用 CGA 规则参数。

  1. 打开 mapcontrolTutorial_01.cej 场景。

    已打开的场景包含 2 个地图图层(Terrain 和 Water)以及具有大量形状的街道网络图层。 如果您现在选择单个地块并在检查器(窗口 > 检查器)中检查其属性,则尚未分配规则参数(“规则参数”窗格为空)。 将规则文件分配给地块时,这将发生变化。

  2. 场景编辑器中选择 Streetnetwork 图层。
  3. 单击形状 > 分配规则文件,然后选择 simpleBuildingShells_01.cga 规则文件。
  4. 再次选择单个地块。

    现在,检查器视图中将存在可见属性 height

    显示属性的检查器窗口

  5. 这些属性源自哪里? 将规则文件分配给形状(在本例中为地块)后,规则文件的属性将显示为该地块的规则参数。 Source 列中的规则项目显示该值源自规则文件。
  6. 单击检查器中的规则文件链接以打开分配的规则文件。
  7. 将在顶部定义高度属性:
  8. 该值在规则文件中用于定义建筑物的高度。

    // height value
    attr height = 80
  9. 重新选择地块,并生成建筑物。
    结果为一幢高 80 米的建筑物。
  10. 在检查器中将高度值从 80 更改为 150。
    请注意,规则项目随即消失。 现在,此建筑物的规则参数“高度”将被您设置的值所取代。 所有其他未受影响的地块仍将使用规则文件中的高度值。
  11. 重新生成建筑物,并注意建筑物高度的变化。
  12. 您的场景应该类似于以下屏幕截图:
    建筑物的屏幕截图
    或者,可以打开 mapcontrolTutorial_02.cej 场景以查看建筑物结果。

控制天际线

在本部分中,您将学习如何使用地图来控制城市的参数。

如果尚未打开 mapcontrolTutorial_02.cej 场景,请将其打开。

天际线地图

如果您已使用当前设置生成了一些建筑物,则您的城市将类似于下图:

已生成建筑物的屏幕截图

这不是很有说服力,因为所有建筑物的高度均为 80 米。 优美的天际线可以改善外观。 与在第一部分中手动设置 CGA 形状属性不同,您将使用以下红色的天际线地图同时控制所有建筑物的高度。 较小的图像为地形图,以蓝色表示湖泊。

红色天际线地图
地形图

天际线地图上的红色通道表示该区域中建筑物的高度。 在对天际线地图和地形图进行比较时,可以看出在湖泊拐角附近形成了天际线。 城市的左上角还存在第二个中心。

  1. 单击图层 > 新建地图图层 > 映射以新建地图图层。
  2. 选择 skylineMap.png 作为映射文件。
  3. 取消选择保持比例按钮。
  4. 将 X 和 Z 大小更改为 3000
  5. 确保将对齐设置为居中(单击对齐图标可更改模式)。
  6. 映射区域中单击鼠标右键,然后单击添加行
    “映射”对话框
  7. 将该属性命名为 skylineValue
  8. 要将图像的红色通道解释为高度,请从通道下拉列表中选择红色
  9. 建筑物高度应在 20 米(0% 红色)和 200 米(100% 红色)之间变化。
  10. 针对最小值,键入 20;针对最大值,键入 200
  11. 单击完成,然后在检查器中重命名已创建的图层 Skyline Map
    “映射”对话框
  12. 在检查器中调整新地图图层的高程偏移,以使其处于可见性更好的位置。 使用 Alpha 值以使其具有一定的透明度。
  13. 现在,可以使用天际线地图来控制规则参数 height
  14. 将规则文件重新分配给地块,以便 CityEngine 完成连接。
  15. 选择所有地块。
  16. 单击高度属性中的下拉列表,然后在检查器中选择连接属性
    连接属性

    随即打开属性连接编辑器对话框。

  17. 单击图层属性,然后选择新的 Skyline Map 图层和 skylineValue 属性。
    “属性连接编辑器”对话框
    将源设置为天际线图层后,该值显示 ? 字符。这意味着选择内容包含不同的值(所有地块形状具有不同的高度值)。
  18. 选择单个地块,然后在检查器视图中查看其属性。 height 的值现在将连接到天际线地图。
    显示高度值的检查器视图
  19. 在湾区周围选择一些地块,并生成建筑物。
    建筑物的屏幕截图
  20. 天际线的外观有所改善,接下来您将使用更高级的 CGA 技术对其进行改进。
    打开 simpleBuildingShells_02.cga 规则文件并找到以下函数:

    带有变体的高度计算

    // calc height with variation
    getHeight(area) = 
    	case area > 600 : rand(0,40)+height
    	case area > 200 : rand(0,40)+height/2
    	else: rand(15,30)
    将使用以上用户定义的函数,而非将高度值从天际线地图直接映射到建筑物高度。 (有关 CGA 规则和函数的详细信息,请参阅 CGA 形状语法教程)。 此函数将执行以下两项操作:
    • 将仅在大面积地块上创建较高的建筑物。
    • 将为输入的地图值添加一个随机值,以使天际线有所变化。
  21. 在场景编辑器中选择地块图层。
  22. 通过右键单击图层 > 分配规则文件来分配 simpleBuildingShells_02.cga 规则。

    您的场景应该类似于以下屏幕截图:

    生成场景的屏幕截图

控制土地利用类型

现在,您将学习如何使用地图来控制每个建筑物的土地利用类型。

如果尚未打开 mapcontrolTutorial_03.cej 场景,请打开该场景。

控制建筑物的土地利用类型

城市通常具有特定土地利用类型的区域。 本部分将介绍如何设置三种不同土地利用类型的属性。 以下地图显示了蓝色的商业区、红色的工业区和绿色的住宅区:

土地利用地图
地形图

创建土地利用地图图层

在创建地图图层之前,请查看 simpleBuildingShells_03.cga 规则文件,并查找三个 CGA 属性:

CGA 土地利用类型属性

// land use types
attr t_industrial = 0
attr t_commercial = 0
attr t_residential = 0

您创建的地图图层需要具有匹配名称的属性。

  1. 通过单击场景编辑器中的眼睛符号可以隐藏天际线图层
  2. 单击图层 > 新建地图图层 > 映射以新建地图图层。
  3. 选择 areatypes.png 作为映射文件。
  4. 取消选择保持比例按钮。
  5. 将 X 和 Z 大小更改为 3000
  6. 确保将对齐设置为居中(单击对齐图标可更改模式)。
  7. 映射区域中单击鼠标右键,然后单击添加行
  8. 添加了以下 3 个映射属性:
    • t_industrial > 红色通道
    • t_commercial > 绿色通道
    • t_residential > 蓝色通道
    您将再次对规则文件中的这些参数进行评估,因此默认的最小值 0 和最大值 1 是非常好的通用映射值,以备将来使用。
  9. 单击完成以创建地图图层。
    映射对话框
  10. 在检查器中重命名图层 LandUse Map
  11. 在检查器视图中调整新地图图层的显示偏移,以使其处于可见性更好的位置。 使用 alpha 值以使其具有一定的透明度。
  12. 选择新地图图层,然后在检查器中检查其属性。
  13. 检查 3 个 CGA 属性是否具有正确的映射。 要稍后更改地图图层的某些设置,请使用检查器。
    显示图层属性的检查器窗口

    现在,您将评估土地利用地图的值。

  14. 选择所有地块。
  15. 分配 simpleBuildingShells_03.cga 规则文件。
  16. 将土地利用参数的源设置为 LandUse Map 图层。
    显示土地利用参数的检查器窗口
  17. 在生成最终的建筑物场景之前,请查看 simpleBuildingShells_03.cga 规则文件并定位颜色声明和 functionlanduseTypeColor

    土地利用的颜色类型。

    // color declarations
    red = "#ffaaaa"
    green = "#aaffaa"
    blue = "#aaaaff"
    white = "#ffffff"

    土地利用的颜色类型。

    // Functions
    landuseTypeColor = 
    	case t_industrial > t_commercial && t_industrial > t_residential : red
    	case t_commercial > t_industrial && t_commercial > t_residential : blue
    	case t_residential > t_industrial && t_residential > t_commercial : green
    	else : white
    此函数将分析来自土地利用地图的值,并相应地返回颜色。 如果来自地图的颜色通道值大于其他通道的值,则将返回相应的土地利用颜色:红色代表工业,蓝色代表商业,绿色代表住宅。 通过使用调用土地利用颜色函数的颜色操作 color(landuseTypeColor),可将颜色应用于生成的建筑物。
  18. 在场景中生成所有建筑物。
  19. 或者,可以打开 mapcontrolTutorial_04.cej 场景并生成建筑物。
    最终生成的建筑物场景