教程 19:使用 Alembic 的 VFX 工作流

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

简介

本教程演示了一些基于 Alembic 导出器的 VFX 相关工作流。 我们提供了三个示例:(1) 带有 Mantra 的Houdini,(2) 带有 VRay 的 Maya 和 (3) 带有 RenderMan 的 Katana 作为处理和渲染 Alembic 城市模型的下游工具。 要完整完成本教程,您需要安装 SideFX Houdini(Apprentice 或更高版本)、Autodesk Maya (2018) with VRay、The Foundry Katana (3.x) 和 Pixar RenderMan 22 for Katana。 如果这些工具之一不可用,也可以跳过相应部分。

注:

这些工作流教程只是将模型转换为 DCC 工具的一种方法。 您应该考虑修改这些示例以适合您的自定义管道。 无法保证这些示例包含针对特定管道的最有效工作流。

基础导入到 Houdini 中

在本部分中,您将以 Alembic 格式导出单个建筑物,并将其材料参数映射到 Houdini Mantra 渲染器。

CityEngine

  1. 打开 vfx_workflows.cej,将其另存为 vfx_workflows_part1.cej,然后使用 CityEngine 生成默认模型。
  2. 单击天际线照相机书签。
    天际线
  3. 打开海滨照相机书签以转至绿色色调的教程建筑物。
    海滨
  4. 通过在检查器中将 Level_of_Detail 属性设置为,可以提高细节层次以使其更引人注目。
    具有细节的海滨
  5. 单击文件 > 导出模型... > Alembic 以将模型导出到 Alembic(使用默认设置);例如,将文件导出到 part1_waterfront_building.abc。 现在,您将仅导出单个建筑物,以演示整个管道的工作原理。

    “针对模型导出选择格式”窗口
    Alembic 设置
    注:

    CityEngine Alembic 导出器可将材料属性附加到 Alembic <polymesh>/.userProperties 复合属性节点。 有关 Alembic 节点树布局的详细信息,请参阅导出 ABC (Alembic) 中的逻辑示意图。

Houdini

  1. 启动 Houdini,并在教程工程子目录 workflows/cityengine_alembic_workflow_v1.hipnc 中打开准备的 Houdini 场景。
  2. 选择 AbcCityEngine 节点内的 abc 子节点,然后浏览至 part1_waterfront_building.abc 文件。
    Houdini 中的 abc 子节点
    Houdini 中的 Alembic 文件
  3. 在 Houdini 视口中,键入 F 以聚焦在建筑物模型上。 您将看到其边界框制图表达。
    Houdini 中的焦点模型
    注:

    Houdini 将针对所有 Alembic 叶子网格显示边界框。 尚未显示中间 Alembic 节点的制图表达。

  4. abc 参数检查器中,将显示为字段在完整几何边界框之间切换。
    完整几何
    注:

    未设置 Houdini 场景以将材料属性分配给 Houdini OpenGL 视口中的预览。 可以按照与以下步骤 7 中的 Mantra 材料类似的方法执行此操作。

  5. 渲染视图中,将照相机设置为场景视图 1,然后单击渲染
    渲染视图
  6. 接下来,您将详细了解材料分配。 选择 abc 节点,转至几何电子表格选项卡,然后在图元模式下过滤“图元”。 Houdini 将在 abc_userProperties 列中以 JSON 结构显示 CityEngine 材料属性。
    几何电子表格
  7. 保持几何电子表格选项卡处于打开状态,然后选择 abcJSON 节点。 它包含一些 Python 代码,用于将 JSON 块分成单独的图元属性。
    几何电子表格 JSON

    最后,ce_to_mantra 节点将使用 Houdini 材料覆盖功能来覆盖具有图元属性的基础材料设置。 可以随意自定义此选项,并将更多 CityEngine 材料属性映射到 Mantra 材料。

在 Houdini 中使用实例

本部分将演示 Houdini 中场景的实例化和导出后编辑。

  1. 在 CityEngine 中,再次打开 vfx_workflows.cej 并将其另存为 vfx_workflows_part2.cej
  2. 单击巴台农神庙花园照相机书签并关闭地形图层可见性。
    巴台农神庙花园

    请注意如何多次重用相同的树模型以及神庙部分(例如,列)。

  3. 使用俯视图,选择神庙及其周围的几棵树,然后将文件导出到 part2_parthenon_gardens.abc
    巴台农神庙花园俯视图
  4. 在 Houdini 中,保存 Houdini 教程场景的副本,然后加载 part2_parthenon_gardens.abc 文件。
  5. 选择 Alembic 节点,然后按 F 以将照相机聚焦在新内容上。 您将看到已导出场景的边界框制图表达。
    具有边界框的巴台农神庙

    您可以看到每个资产实例如何显示为单独的边界框,以及 Alembic 导出器如何保留树木的实例信息。 由此可以对每个实例进行基础编辑。

  6. 如果您不喜欢树木在照相机设置中阻挡神庙的视图,则可以调整照相机并将“渲染”选项卡移动到其自己的窗口中,然后开始渲染。 查看完整图像
    具有树木的巴台农神庙
  7. 设置具有俯视图的分割视口,以选择要移除的树木。
    选择树木
  8. 然后将其移开。 查看完整图像
    已移除树木的巴台农神庙

导入 Maya 中并使用 VRay 进行渲染

本部分将演示如何在渲染时使用 VRay 翻译后 Python 脚本,根据源 Alembic 文件来填充 VRayProxy 的材料。

Beta:

由于有关纹理坐标的问题尚未解决,因此该部分仍处于测试阶段。

  1. 打开 vfx_workflows.cej 并将其另存为 vfx_workflows_part3.cej
  2. 使用海滨照相机书签将海滨的一部分导出到 Alembic。

    或者,您也可以使用提供的 Maya 场景,并在“网格”VRay 代理节点中设置 Alembic 文件的路径(无论如何,必须在翻译后脚本中调整路径)。

  3. 在 Maya 中,通过单击创建 > VRay > 导入代理...可以导入 Alembic 文件作为 VRayProxy。
  4. 在大纲视图中,选择新的网格对象,然后按 F 以聚焦该对象。 您将看到最终模型的近似版本(VRay 基本上会随机移除三角形,直至达到其预览三角形限制为止)。
    Maya 导入 Alembic 模型
  5. 在属性编辑器中针对 mesh_vraymesh 选中使用全名选项。
    Maya 使用全名
  6. Tutorial_19_VFX_Workflows/workflows/maya_vray/vray_post_translate_py_snippet.txt 中的 Python 代码段复制粘贴到 VRay 渲染设置 Post Translation Python Script 字段中。 确保将路径修改为 教程 19:VFX Alembic 工作流 CityEngine 工程的位置。
    Maya 翻译后
  7. 单击渲染(使用 VRay)。

    整个场景的最终渲染。 查看完整图像

    Maya VRay 完整场景

使用 Katana 和 RenderMan 的细节层次

本部分教程要求安装 Katana 3.x 和 RenderMan for Katana 22 或更高版本。

CityEngine:使用属性图层控制细节层次

本教程部分的目标是在 RenderMan for Katana 中创建天际线照相机书签视图的高质量渲染。

  1. 在 CityEngine 中,再次打开 vfx_workflows.cej 并将其另存为 vfx_workflows_part4.cej
  2. 选择天际线照相机书签并按空格键以最大化视口。 如果您使用广角屏幕,则结果将类似于下图。
    天际线
  3. 本教程中使用的 CGA 规则继承自示例 NYC2259 2015.0,包含细节层次 (LOD) 转换;换句话说,规则中包含的细节比默认生成的细节更多。 可以通过在前景中选择一些形状并将 level-of-detail 属性设置为“高”来尝试这一点。

    level-of-detail - 低level-of-detail - 高
    低 LOD高 LOD
  4. 您可以更加明智并使用地图来控制 level-of-detail 属性,而非使用高 LOD 导出所有模型。 在场景编辑器中,转至 Maps 图层组并更改 Level of Detail 图层的可见性。 缩小一点以更加清楚地查看 LOD。
    LOD 地图

    灰度将控制 level-of-detail 属性,如下所示:

    亮度等级level-of-detail植物制图表达

    0 .. 0.3

    想象

    0.3 .. 0.6

    想象

    0.6 .. 1.0

    真实

  5. Level of Detail 图层包含 mapLODOverride 属性,用于启用或禁用地图的影响。 将 mapLODOverride 设置为 -1.0 可以激活所有形状的地图。
  6. 要测试 LOD 地图,请选择 New Development 图层的所有形状,然后单击生成或按 Ctrl+G。 您将能够根据 LOD 在地图上查看模型。
    注:

    Level of Detail 图层的可见性不会影响其对 level-of-detail 属性的影响。 可以再次隐藏 Level of Detail 图层以更好地查看其他图层。

    生成 LOD 地图
    注:

    使用高 LOD 的一个重要方面是不要过度使用生成按钮。 在视口中生成过多几何将最终导致 CityEngine 慢慢停止运行。 CityEngine 导出器将生成(或重新生成)任何选定的形状或模型,而不考虑是否已在视口中生成这些形状或模型。 因此,建议的工作流是预先生成模型的多个选定部分,然后选择所需场景对象并导出所有对象。

  7. 将所有模型导出到 Alembic。 选择图层,单击文件 > 导出模型...,然后将文件另存为 part4_vfx_workflow.abc。 将需要几分钟的时间来生成一个大约 1 GB 的 Alembic 文件,其中包含大约 41 个 Mio 面。
  8. 运行提供的 Python 脚本 Tutorial_19_VFX_Workflows/scripts/textureConversion.py 以将导出的纹理转换为 RenderMan 兼容的纹理格式(脚本默认为 EXR)。 打开该脚本并按 F9 以运行该脚本,由此将在 CityEngine 的 Python 控制台中打印其进度。

Katana:使用 RenderMan 在 Katana 中渲染场景

  1. 在 Katana 中,打开示例工程文件 Tutorial_19_VFX_Workflows/workflows/katana/ ce_abc_workflow_v2.katana
  2. 节点图表将包含这些主要构建块:
    1. Alembic 输入:CityEngine_ModelAlembic_In_Prman 类型,并且将读取导出的 Alembic 文件。 Store_AbcRoot 节点用于记住场景图中的 Alembic 文件名。
      Katana 和 CityEngine 模型
    2. 着色网络:这是带有 RenderMan PxrSurface 着色器的 Katana NetworkMaterial 节点。 着色器将读取两个纹理贴图(diffuseMap 和 opacityMap)并以散射颜色进行混合。 下面,您将使用 CityEngine Alembic 文件中的值来控制这三个材料属性。
      Katana 和着色网络
    3. OpScript 节点 OpScript_MapCityEngineMaterialProperites 使用 Lua 脚本将 Alembic 用户属性(即 CityEngine 材料)与 RenderMan 着色网络属性连接。
      Katana 和 opscript 节点
  3. 接下来,根据基础导入到 Houdini 中来设置 Alembic 文件:
    1. 在节点图表中,选择 CityEngine_Model 并将 abcAsset 设置为 part1_waterfront_building.abc 文件。
    2. 在场景图表中,将图表展开至 /root/world/geo/asset/CityEngineRoot 并选择 CityEngineRoot
    3. 在查看器中,单击浏览照相机 > .../camera。 按 F。您将看到 CityEngine 模型的边界框(即 Alembic 文件的顶级)。
    4. P 以渲染场景。 您将在监视器中看到 RenderMan 输出。
      海滨渲染
    5. 在场景图表中,展开 CityEngineRoot 下方的树木,并观察如何在查看器中显示各个构建组件。 这是使 Katana 查看器在密集场景中保持交互性的主要动力。
      展开的海滨渲染
  4. 由此即可渲染整个场景。 针对之前导出的 part4_lod_control.abc 文件重复上一步骤。 确保仅将场景图表展开至 CityEngineRoot 下方的一个等级。 在加载几分钟后,您应该会看到格网等级的边界框。
    1. 在 CityEngine 中,将 heightmap 和 water 图层导出至 part4_terrain.abc,在节点 CityEngine_Terrain 中进行分配,然后将该节点连接到合并节点。 或者,您也可以将庙宇地标导出至 Alembic,然后将其连接到准备好的“CityEngine_Landmark”导入节点。
    2. 针对之前导出的 part4_lod_control.abc 文件重复步骤 3。 确保仅将场景图表展开至 City/CityEngineRoot 下方的一个等级。 您将看到格网等级的以下边界框:
      海滨渲染整个场景
  5. 单击渲染以允许 RenderMan 运行。 查看完整图像
    渲染整个场景结果