幻灯片-CityEngine城市引擎

ArcGIS CityEngine for Houdini

ArcGIS CityEngine for Houdini 是SideFX Houdini的一个插件。它提供了操作节点,可以执行CityEngine的“规则”。因此,3D 环境艺术家无需离开熟悉的 Houdini 工具集即可使用 CityEngine 的程序化建模功能。它不再需要复杂的导出导入流程,这也意味着程序化建筑模型无需再进行“烘焙”。建筑物在整个建模工作流程中(甚至在渲染时也可以)都保持程序化。因此,3D 环境艺术家可以在制作过程中的任何时间点使用参数化界面轻松更改建筑物的高度、风格和外观。

CityEngine for Houdini 需要所谓的规则包 (RPK) 作为输入,这些规则包是在 CityEngine 中编写的。RPK 包含资源和一个编码建筑风格的 CGA 规则文件。下方提供了完整的 RPK 示例,可“开箱即用”。

CityEngine for Houdini 非常适合管理数字场景中建筑 3D 内容的程序化生成。然而,它仅限于单个建筑/物体的程序化生成。CityEngine for Houdini 不包含 CityEngine 的城市布局和街道网络编辑工具,也就是说,仍然需要 CityEngine 丰富的工具集来从零开始(或基于地理数据)设计城市。

快速入门

  1. 从发布页面下载最新的 CityEngine for Houdini 二进制文件。

  2. 将档案提取到您的<home>\Documents\houdiniX.Y(Windows) 或<home>/houdiniX.Y(Linux) 目录中,以便文件最终位于相应的configdsopackages子目录中。

  3. 启动 Houdini,您将在 下的 OBJ 操作符菜单中找到新的pldAssign和节点。pldGeneratecustom

  4. 在 Houdini 中,通过设置一个grid具有 2 列/行的节点来创建四边形作为初始形状。

  5. 在网络编辑器中打开几何节点并将网格输出连接到新pldAssign节点。

  6. 创建一个新pldGenerate节点并将输入连接到前一个pldAssign节点的输出。

  7. 使该pldGenerate节点成为活动渲染节点。

  8. 下载帕台农神庙规则包。或者,在 CityEngine 中下载教程 9,并将“帕台农神庙” CGA 规则导出到 RPK(请参阅创建规则包)。

  9. 选中pldAssign节点,在参数编辑器中将参数设置Rule Package为之前导出的RPK的路径。

  10. 模型应该生成,并且规则属性现在应该可以在参数编辑器中编辑。

    图片[1]-ArcGIS CityEngine for Houdini-软件论坛-CityEngine城市引擎

安装

软件要求(最新版本)

  • Windows 10 或 11(64 位)
  • RedHat Enterprise Linux 8 或 9 及兼容(CentOS、Alma Linux、Rocky Linux 等)
  • 胡迪尼 19.5、20.0、20.5
  • 请参阅发行说明以了解兼容的 CityEngine 版本和商业工作的要求。

来自预构建的二进制文件

  1. 从发布页面下载最新的 CityEngine for Houdini 二进制文件
  2. 将档案提取到您的<home>\Documents\houdiniX.Y(Windows) 或<home>/houdiniX.Y(Linux) 目录中,以便文件最终位于configdsopackages子目录中。
  3. 启动 Houdini,您将在 下的 OBJ 操作符菜单中找到新的pldAssign和节点。pldGeneratecustom

注意:无需修改系统PATH环境变量。

来自源

  1. 建造为 Houdini
  2. install步骤应自动将所有必需的文件复制到您的<home>\Documents\houdiniX.Y(Windows)或<home>/houdiniX.Y(Linux)目录中,然后 CityEngine for Houdini 即可运行。

使用 CityEngine 进行 Houdini

CityEngine for Houdini在“自定义”类别中为 Houdini 添加了两个新的几何体 (SOP) 节点。这些节点可以在任何几何体对象中pldAssign创建。pldGenerateNetwork Editor

pldAssign节点

pldAssign节点旨在为输入几何体创建所需的元数据(作为原始属性),以便pldGenerate操作员可以程序化地生成几何体。选中后,可以直接在参数编辑器中设置 RPK(规则包)、种子和相应的 CGA 属性。评估后,pldAssign节点会将所需的元数据(以原始属性的形式)附加到几何体,并相应地更新参数编辑器中的 CGA 属性。原始属性也可以在几何体传递给节点之前被覆盖pldGenerate(例如,使用Attribute Create

pldGenerate节点

pldGenerate节点用于生成最终几何体。它以包含元数据的初始形状几何体作为输入(即pldAssign节点的输出),并执行 CityEngine 规则生成 3D 模型。在参数编辑器中,我们可以选择以下选项:

  • 重新发出修改后的 CGA 属性(默认关闭)
  • 发射材质属性(默认关闭)
  • 发出 CGA 报告(默认关闭)
  • 对带孔的多边形进行三角剖分(默认启用)。如果禁用,Houdini 的 CityEngine 将创建类似于“孔”几何节点的“带桥的孔

执行一个简单的 CityEngine 规则

  1. 在 CityEngine 中,创建以下规则文件并将其作为规则包 (RPK) 共享到磁盘的某个位置(或下载提供的示例之一并将其作为 RPK 共享(请参阅创建规则包)):

    attr height = 1
    
    @StartRule
    Init -->
       extrude(height)
    
     

    (您也可以直接使用RPK)

  2. 在 Houdini 中,在新场景中添加一个grid节点。

  3. 进入grid节点,将RowsColumns参数设置为 2,并添加两个 CityEngine for Houdini 节点pldAssignpldGenerate。像这样连接它们:

    图片[2]-ArcGIS CityEngine for Houdini-软件论坛-CityEngine城市引擎

  4. 选择pldAssign节点,Rule Package在参数编辑器中将参数设置为之前导出的RPK的路径。

  5. 将该pldGenerate节点设为活动渲染节点,这将触发分配和生成节点的“烘焙”,并执行 CityEngine 规则。现在您应该看到一个长方体:

    图片[3]-ArcGIS CityEngine for Houdini-软件论坛-CityEngine城市引擎

覆盖规则属性

在上一节中,我们使用了属性的默认值height。让我们在执行之前使用 Houdini 工具修改规则属性。

使用参数编辑器

  1. 确保pldAssign通过连接pldGenerate活动渲染节点来评估

  2. 通过更改生成的句柄中的值,在参数编辑器中编辑规则属性(可以通过调用revert to Defaults或按下ctrl + MMB规则名称来重置规则属性)

    图片[4]-ArcGIS CityEngine for Houdini-软件论坛-CityEngine城市引擎

手动超控

  1. 在和之间添加一个AttributeCreate节点。pldAssignpldGenerate

  2. 将属性名称设置为 ,height并将Class设置为Primitive。由于默认值为 0,因此挤出消失。

  3. 增加该值以height查看实际挤压:

    图片[5]-ArcGIS CityEngine for Houdini-软件论坛-CityEngine城市引擎

请注意一般情况的步骤:

  1. 请参阅 CGA 文件(或 CityEngine)了解可用属性及其数据类型(数字、字符串、布尔值)。
  2. AttributeCreate节点中,设置name为 CGA 属性的名称(确保检查Encode Invalid Attribute Names)。
  3. 设置classPrimitive
  4. 设置typeFloatCGA 数字属性、StringCGA 字符串和Integer8 位精度的 CGA 布尔值。

使用多个分配节点

在本节中,我们将展示如何使用pldAssign单个pldGenerate节点来使用多个节点。

  1. 复制gridpldAssign节点。

  2. 将第二个节点的中心设置grid为(15,0,0)。

  3. Attribute Create在新节点grid和节点之间添加一个新节点pldAssign

  4. 将属性名称设置为“primCls”,将类更改为primitive并将其值更改为1。需要设置此值,以便pldGenerate节点稍后知道哪些初始面应该一起生成或单独生成。

    图片[6]-ArcGIS CityEngine for Houdini-软件论坛-CityEngine城市引擎

  5. 将两个分配节点的输出与一个merge节点合并,并将输出提供给前一个生成节点,如下所示:

    图片[7]-ArcGIS CityEngine for Houdini-软件论坛-CityEngine城市引擎

  6. 您现在可以更改两个节点的规则文件和属性pldAssign,并且它应该正确生成它们

    图片[8]-ArcGIS CityEngine for Houdini-软件论坛-CityEngine城市引擎

使用材质属性

在本节中,我们将连接pldGenerate由 Mantra 着色器生成的材质属性(相同的机制也可用于视口材质)。

使用提供的 HDA

  1. 下载现成的 Houdini 数字资产,其中包含适用于 Mantra 的 CityEngine 材质

  2. 将 HDA 导入到您当前的项目(File>> ImportHoudini Digital Asset并单击安装。

  3. 选择pldGenerate节点并勾选Emit material attributes复选框。打开电子表格,观察现在发出的多个材质原始属性pldGenerate

  4. 创建一个新的 PalladioCityEngineMaterial 节点并将其连接到该pldGenerate节点。使其成为活动渲染节点。

  5. 点击 Mantra 渲染,您将在渲染视图中看到一个红色框。

    图片[9]-ArcGIS CityEngine for Houdini-软件论坛-CityEngine城市引擎

创建新的自定义着色器

  1. 使用语句扩展上一节中的规则color并重新导出它:

    attr height = 1
    
    @StartRule
    Init -->
       color(1,0,0)
       extrude(height)
    
     

    (您也可以直接使用RPK) 图片[10]-ArcGIS CityEngine for Houdini-软件论坛-CityEngine城市引擎

  2. 在 Houdini 中,选择pldGenerate节点并勾选Emit material attributes复选框。打开电子表格,观察现在发射的多个材质原始属性pldGenerate

  3. 添加一个Material节点并将其连接到该pldGenerate节点。使其成为活动渲染节点:

    图片[11]-ArcGIS CityEngine for Houdini-软件论坛-CityEngine城市引擎

  4. 在 中Material Palette,创建一个新Principled Shader实例(通过将其从导航器拖到\mat窗口)并将其重命名为CityEngineShader

    图片[12]-ArcGIS CityEngine for Houdini-软件论坛-CityEngine城市引擎

  5. 输入CityEngineShader节点并将Parameter节点连接到Surface/basecolor输入:

    图片[13]-ArcGIS CityEngine for Houdini-软件论坛-CityEngine城市引擎

  6. 将节点名称设置ParameterdiffuseColor,并将类型设置为Color。此名称将与 发出的原始属性匹配pldGenerate

    图片[14]-ArcGIS CityEngine for Houdini-软件论坛-CityEngine城市引擎

  7. 回到节点的网络中grid,选择Material节点并选择/mat/CityEngineShader参数Material

  8. 点击 Mantra 渲染,您将在渲染视图中看到一个红色框。

    图片[15]-ArcGIS CityEngine for Houdini-软件论坛-CityEngine城市引擎

技巧和窍门

如何从 CityEngine 导出 Alembic 作为 CityEngine for Houdini 的输入

这个简短的 CityEngine 指南解释了如何在将输入几何体导出到 Alembic 时包含随机种子和启动规则分配。

  1. 在场景对象上运行以下 Python 脚本,将随机种子指定为对象属性:

    from scripting import *
    
    ce = CE()
    
    shapes = ce.getObjectsFrom(ce.scene(), ce.isShape)
    for s in shapes:
        seed = ce.getAttribute(s, "/ce/rule/randomSeed")
        ce.setAttribute(s, "seed", seed)
     
  2. 将此 CGA 脚本分配给要报告的所需形状seedrule(起始规则):

    version "2019.0"
    
    attr seed = 0
    
    Lot --> R
    LotInner --> R
    Street --> R
    Sidewalk --> R
    Crossing --> R
    OpenSpace --> R
    Joint --> R
    R -->
        report("seed", seed)
        report("rule", initialShape.startRule)
    
     

    规则seed属性应该已经连接到先前分配的seed对象属性。

  3. 将形状导出到 Alembic,两个报告值现在作为用户属性附加到网格。

将 CityEngine 规则包保留在 Houdini 项目中

rpk将 RPK 放入当前 Houdini 项目的子目录中会很有用。如果您$HIP在 pldAssign 节点中引用 RPK,您的 Houdini 项目将保持可重定位状态。

环境变量

  • CITYENGINE_LOG_LEVEL:控制所有分配和生成节点的全局(最低)日志级别。有效值为“debug”、“info”、“warning”、“error”和“fatal”。默认值为“error”。此外,还可以控制每个节点的日志级别pldAssignpldGenerate
  • HOUDINI_DSO_ERROR:有助于调试加载问题,请参阅https://www.sidefx.com/docs/houdini/ref/env
请登录后发表评论

    没有回复内容