译者前言

这个原版官方教程的操作内容其实并不多,但是描述的篇幅较长。一方面是因为在某些点上补充了知识,但另一方面是描述非常详细,甚至有些“过于”详细了。因此我删减了少量的内容,主要包括一些重复描述的操作(比如原文选择节点的操作每次都要描述并截图)和过于基础的讲解(比如讲解Switch节点的用法)。

另外,本教程的起点并不是空白文件,而是Houdini安装目录\help\files\pdg_tutorials\intro_to_pdg\fxworkflow_tutorial.hip。这个文件里已经存在些基础节点,包括建立简单的几何体和场景,以及基础的特效模拟。不过,教程中的所有操作将不会改动它们,所有操作都会是在TOP网络下的,毕竟教程的重点是PDG。

关于本教程

在 Houdini 中,你可以使用 TOP节点 生成 work item来为你做任务或存储信息。使用 TOP 节点网络,你可以创建一个有伸缩性的“菜谱”来生成 work item ,在本地或农场上运行它们,并在所有 work item 之间建立依赖关系网络,然后找出尽可能高效完成所有工作的方法。而这个“菜谱”称为 PDG。

在本教程中,你将学习如何创建一个线性 TOP 网络,将几何体与“渲染”和“影像合成”连接在一起,然后将最终所有的帧放入到 MP4 中(译注:如果没有安装FFmpeg,建议先参考附录进行安装再进行教程,因为安装并设置环境变量后应该需要重启Houdini)。为了让事情变得简单,你将 不会 需要使用脚本节点或执行任何复杂的网络。本教程将为学习更复杂PDG之前打些基本概念的基础。

Tip
要了解有关 TOP 和 PDG 的更多信息,可参阅 翻译Houdini官方文档:PDG/TOPs介绍。

先决条件

  • 没有先前的 PDG 知识。
  • 有对 Houdini 中特效的基本理解。
  • 一些使用 SOP、DOP 和 ROP 创建特效网络的经验。

你会学到什么

  • PDG 的基础概念。
  • 最常用的TOP节点。
  • 特效的基本 TOP 网络设置和 PDG 工作流程。

步骤 0 - 复制教程 HIP 文件

在开始之前,请建立一个自己的位置,然后复制将在本教程中使用的 Houdini HIP 文件:
Houdini安装目录\help\files\pdg_tutorials\intro_to_pdg\fxworkflow_tutorial.hip

可以打开它并观察下其中的内容:

  • \obj上下文:

    • Smoke Sourcing and Simulation (烟雾源和模拟)

      • smoke_src SOP :提供给pyro模拟的源几何体
      • smoke_sim DOP :生成烟雾的pyro模拟
      • smoke_import SOP :pyro模拟的输出
    • Render(渲染)
      • render_background SOP:背景的渲染几何体
      • render_smoke SOP :pyro模拟输出的渲染
      • render_sphere SOP :球体的渲染
      • render_light1 和 render_light2 :灯
      • render_cam :相机
  • \task上下文:

    • topnet1:TOP网络

      • local_scheduler TOP :执行 work item 的本地调度程序
      • opengl_render ROP :渲染帧的OpenGL网络
      • mosaic COP2 :加载渲染帧并将它们组装成 2×2 网格的COP2网络。

步骤 1 - 定义烟雾的变化

在该教程的第一步骤中,将使用 Wedge TOP 节点来为下游的Pyro模拟(烟雾)提供一系列 变种,方式是通过 attribute 来设置变化的数目以及该如何变化。

这使你可以在本教程的后面生成和比较烟雾的变化。

1. 打开fxworkflow_tutorial.hip

2. 打开\task上下文并进入topnet1网络。

3. 创建一个 Wedge 节点(你可以在⇥ Tab菜单中Data类别找到),然后将其重命名为smoke_variations

Wedge 节点上的参数将设置要更改的 attribute 的百分比,并定义要生成的 wedge 的数量。
在本教程中,你将为pyro模拟定义一组四种不同的配置,这些配置将改变施加到烟雾上的力和烟雾源的大小。

4. 选择 smoke_variations 节点,然后配置(或者说 wedge outforcesize这两种attribute:

  • Wedge Count设置为4。
    这决定了要生成的变化(或者说 wedge)的数量。

  • Wedge Attributes设置为2。
    这决定了要变化的属性的数量。

  • 在第一个 Wedge Attributes 中,执行以下操作:

    • Attribute Name参数字段中,键入force
      这让你可以改变force wedge 中的属性。
    • Wedge Type参数下拉菜单中,选择Value List
      这让你可以为force的每个wedge的属性设置特定值。
    • Values字段中,键入4
      出现四个Value字段。
      在每个值字段中,键入以下数字之一:1、10、20和50。
  • 在第二个 Wedge Attributes 中,执行以下操作:

    • Attribute Name参数字段中,键入size
    • Wedge Type参数下拉菜单中,选择Range
      这让你为size的每个wedge设置属性的值范围。
    • Start字段中键入0.5,在End字段中键入2
      这告诉节点在 Start 和 End 字段值之间为size属性选择随机值。
  • 将其他所有参数保留为默认值。

    5. 为节点的 work item 进行 生成cook
    在 TOP 节点可以执行任何工作之前,你首先需要通过生成节点的 work item 来创建你希望它执行的任务。而为了运行这些任务,你需要对TOP节点进行 cook。

  • 右键单击smoke_variations节点并从出现的菜单中选择 Generate Node
    smoke_variations节点上会出现四个点。每个点代表一个 work item,节点生成的每个 work item 是一组forcesize属性变种(或者说 wedge)。

  • 右键单击smoke_variations节点并从出现的菜单中选择Cook Selected Node
    smoke_variations节点的 work item 点和状态图标会改变颜色以表明它们正在处理,并且当它们完成 cook 时,它们再次变化以表明它们已被运行。

    要了解有关各种 TOP 节点 UI 元素的更多信息,请参阅 PDG 节点网络界面。
    节点上的每个点现在也代表一个 wedge。

Note
在 TOP 中,有两种类型的节点:静态和动态。静态节点可以在没有任何输入的情况下生成它们的work item,因为它们不依赖于任何上游数据。另一种,动态节点需要来自其上游输入的信息以生成work item。这就是为什么动态节点只能在 cook 后生成work item。
在本教程中,smoke_variations是众多静态节点之一。要了解有关静态和动态 TOP 节点及其在 TOP 网络中的意义的更多信息,请参阅静态与动态。

Tip
cook一个节点也会在该节点上生成任何需要生成的 work item。

6. 右键单击smoke_variations节点上的 work item 点。
请注意wedgeindexforce以及size属性是怎样在wedge和wedge之间改变的。

Tip
你可以使用[和]键来在节点上的work item之间跳转。

7. 保存场景。

步骤 2 - 缓存烟雾的源几何体

在此步骤中,你将使用 ROP Geometry Output TOP 节点为每个wedge变化缓存pyro模拟的输入(或者说源几何体)。源几何体将在你的场景中发出烟雾。

该节点将缓存pyro模拟的初始烟点,并将源几何体与模拟分离。这样当你改变你的模拟参数值(就像你的 wedge)时,你就不需要重新烘焙它的源几何体。相反,节点将只获取源几何体并运行pyro模拟。

1. 在网络编辑器,创建一个ROP Geometry Output TOP (你可以在⇥ Tab菜单中Geometry类别找到),将其重命名为smoke_src,然后将其连接到smoke_variations节点下面。

smoke_src TOP将会指向smoke_src SOP网络。它将生成许多具有你指定的attribute的 work item,以从第 1-120 帧为每个wedge变化 cook(运行)该 SOP 网络。

2. 选择smoke_src TOP节点,然后配置以下参数:

  • Evaluate Using参数下拉菜单中,选择Frame Range
    Frame Range参数的默认值是$FSTART$FEND变量。这些变量内置于 Houdini 中,对应于Houdini播放栏的Global Animation Start FrameGlobal Animation End Frame值。因此,当你更改播放栏的Global Animation Frame值时,节点上的帧范围值将自动更新。
  • SOP Path选择为/obj/smoke_src/create_density_volume
    节点现在知道作为模拟的源几何要使用哪个几何体了。
  • 指定smoke_src的输出路径。
    由于你要为每一帧wedge出四个输出文件(每个wedge变化一个),因此需要创建一个包含 wedge number 的唯一文件路径,以便输出文件 不会 相互覆盖。因此在Output File参数中输入:
    $HIP/geo/@HIPNAME.$OS.`@wedgeindex`.$F.bgeo.sc
    wedgeindex是由 Wedge 节点自动创建的属性。它标识wedge数目中的每个wedge编号。

    Note
    如果你使用 nested wedging,其中有一个接一个的wedge节点,则每个 wedge 将具有唯一的wedge indexwedge number来自wedge数目,它来自wedge节点内部。然而,wedge index是特定wedge变化的全局唯一序号。因此,wedge number以 0、1、2、3 等顺序递增,但wedge index从 0 开始并递增到 work item 的数量。wedge index保证是唯一的。
    对于本教程,wedge numberwedge index是一样的,因为你没有使用nested wedging。然而你应该在输出文件名中使用@wedgeindex,以便你的文件名总是唯一的。

  • 将所有其他参数保留为默认值。

3. 检查 smoke_src 生成的 work item。

  • 为节点生成 work item。
    节点内出现 480 个点。这些点中的每一个都代表一个wedge(120 帧 x 4 wedge)的每一帧的源几何体 work item。
  • 查看smoke_src 节点的所有 work item。
    请注意,你无法看到节点上 work item 的所有点。
    当网络编辑器中的节点内显示太多 work item 时,你可以打开 work item spreadsheet 或 Task Table Graph 窗口。
    要打开 Task Table Graph 窗口,请单击节点右下角的“两列图标”。

    你可以使用Task Table Graph以易于浏览和理解的表格形式来检查节点上所有 work item 的状态。

4.smoke_src节点启用批处理。

  • smoke_src节点中,选择ROP Fetch分页。
    查看Frames per Batch参数。
    如果使用它当前的值,节点会cook并产生你想要的输出,但它会很 低效,因为节点将为每个workitem都创建一个进程。然而由于你正在cook的网络速度非常快,因此大量时间将浪费在生成进程和管理这些进程的调度上,而不是实际的工作。
    为了加快速度,你需要增加批量的大小。
  • Frames per Batch参数设置为10
    批量大小为10意味着节点将在每个进程中 cook 10个workitem,而不是一个。
    通过以这种方式收集要cook的workitem,节点可以分担启动进程的一些开销。

5.smoke_src进行Cook
你将看到smoke_src节点上各种workitem的cook状态出现在网络编辑器中的节点上以及 Task Table Graph 窗口中。

所有workitem的cook状态也会出现在网络编辑器的任务菜单栏中。

要了解有关workitem点颜色和状态图标的更多信息,请参阅 PDG node network interface。

Note
smoke_src节点上的每个点现在也代表动画几何体的一帧
cook 一个TOP 节点也会 cook 其 TOP 网络中的任何上游未cook的节点。在这种情况下,如果smoke_variations未cook,则也会对它cook,因为它是一个输入。

6. 启用By Batch任务折叠选项。
当前,smoke_src节点上的所有workitem都显示为单个点,即使它们是批处理workitem。
要减少你在节点上看到的workitem的数量,你可以打开By Batch任务显示模式。

  • 在网络编辑器中,选择 ViewDisplay Options,然后在Task Collapse Mode中选择By Batch
  • 节点上的所有workitem点现在都显示为批处理圆环。由于Frames per Batch设置为10,因此每个环代表一批 10 个workitem。以这种方式可视化workitem可以更轻松地管理和调试节点的workitem中发生的事情。
  • 通常,你会保持此显示选项处于打开状态。但是,为了你可以在本教程中看到任务之间的联系,请关闭它。

7. 观察网络中的@引用。

  • 切换到\obj上下文。
  • 进入 smoke_src SOP 网络。
  • 选择sphere1节点并查看其Uniform Scale参数的值。
    请注意,球体的size参数使用@变量引用了PDG 属性。

    由于@size变量是smoke_variations这个 Wedge 节点workitem上的一个属性,这意味着它引用了你在 PDG 中的属性,并且 SOP 网络也知道如何使用该wedge变量。
    @属性引用为你提供了一种交互的预览wedge属性外观的方法。如果smoke_src在视口中显示SOP 网络,则可以通过单击wedge来预览输出几何体wedge的变化。此外,每次@size变量更改时,Houdini 都会刷新sphere1节点并显示它相对于wedge属性的新值的状态。

Note
使用@属性引用来创建这些类型的关系称为拉式wedge。要了解有关不同类型的 TOP wedge技术的更多信息,请参阅拉与推。

  • 打开sphere1节点的display标志。
  • 返回 Object 上下文。
  • 打开 smoke_src SOP的display标志。
  • 返回到 \task 上下文。
  • 单击smoke_variations的wedge以在视口中预览几何体的变化。

8. 保存场景

步骤 3 - 导入烟雾的模拟输出

在此步骤中,你将使用 ROP Geometry Output TOP节点为每个wedge变化导入和运行pyro模拟(烟雾)的输出。
1. 在网络编辑器,创建一个 ROP Geometry Output TOP节点,其重命名为smoke_sim,然后将其连接到smoke_src下面。

smoke_sim TOP将会指向smoke_sim SOP网络。它将生成许多具有你指定的attribute的 work item,以从第 1-120 帧为每个wedge变化 cook(运行)该 SOP 网络。

2. 选择smoke_sim TOP节点,然后配置以下参数:

  • ROP Geometry分页中,将Evaluate Using参数保留为其默认值Single Frame
    不需要 配置此参数。由于smoke_sim节点连接到smoke_src 节点,并该节点已经有workitem,因此smoke_sim将为输入上的每个 源workitem自动生成一个 模拟workitem。
  • SOP Path设置为/obj/smoke_import/import_pyrofields
    smoke_sim节点需要指向实际的pyro模拟输出,而不仅仅是模拟源。该smoke_sim节点会拿到DOP模拟网络的输出,并把它放入几何。
  • Output File设置为:
    $HIP/geo/$OS.`@wedgeindex`.$F4.bgeo.sc
    就像使用smoke_src TOP 节点一样,您需要创建一个包含 wedge index 的唯一文件路径,以便输出文件不会相互覆盖。@wedgeindex将让你创建具有唯一文件名的输出文件。

3. 为你的模拟设置缓存。

  • ROP Fetch分页中,从Cache Mode参数下拉菜单中选择Write Files
    这会写出pyro的模拟帧,以便您可以更快地在视口中播放wedge的模拟帧。

4. 检查由你的smoke_simTOP节点生成的workitem。

  • 为节点生成workitem。
    节点内出现 480 个点。这些点中的每一个都代表一个wedge(120 帧 x 4 wedge)的一帧的pyro模拟workitem。
  • 单击smoke_sim节点内的一些worktiem点。
    请注意smoke_sim节点上的pyro模拟任务、节点上相关的源几何体以及smoke_src节点上的相关wedge之间出现的线。这些线以及相应的高亮点表示节点workitem之间的依赖关系。

Note
PDG以通用的特殊格式存储其所有文件路径,已让它可以访问存储在农场中不同平台(Windows、Linux 等)上的文件。这种特殊格式在文件路径中使用特殊的 PDG标记。

  • 双击smoke_simTOP 节点上的work点。
  • 在出现的Task Info弹出窗口中,查看Command、Input和Output的路径。
    默认情况下,这些路径以人类可读的格式显示。
  • 单击“Task Info”弹出窗口顶部的文件夹图标。
    路径现在以其原始 标记化格式显示。这就是路径在worktiem上的对应attribute中的存储方式。

5.smoke_sim进行cook

  • ROP Fetch分页中,启用All Frames in One Batch
    由于smoke_sim正在导入和运行模拟,并且模拟帧之间存在依赖关系(第二帧依赖于第一帧,依此类推),你需要在单个进程或作业中cook所有节点的工作项。你可以使用All Frames in One Batch参数来执行此操作。

    Warning
    任何时候运行模拟时,你总是应该启用All Frames in One Batch。否则,你将在模拟中遇到问题,因为你无法在多个进程中运行模拟。

  • smoke_sim进行cook
    你将看到smoke_sim节点上各种workitem的cook状态出现在网络编辑器、任务表图窗口和网络编辑器的任务菜单栏中的节点上。

    节点上的每个点现在也代表一个模拟帧。

6. 观察网络中的@引用。

  • 切换到\obj上下文
  • 进入smoke_sim DOP 网络。
  • 选择uniformforce1节点并查看其Force参数的值。
    请注意,Force使用@force,这是你创建的wedge变量。这就是模拟如何让Force从wedge中提取属性并利用它。

    就像使用smoke_src TOP 节点一样,此@属性引用为你提供了一种交互式预览wedge属性在模拟中的外观的方法。如果smoke_sim在视口中显示DOP 网络,则可以通过单击wedge来预览wedge变化。此外,每次@force变量更改时,Houdini 都会刷新uniformforce1节点并显示它相对于wedge属性的新值的新表现。
  • 打开uniformforce1节点的输出标志。
  • 返回 \obj上下文。
  • 打开smoke_sim DOP 网络的显示标志。
  • 返回到 \task上下文。
  • 播放你的模拟并单击smoke_variations的wedge以在视口中预览你的模拟。

    7. 保存场景。

步骤 4 - 过滤掉不含烟雾的帧

在此步骤中,你将使用 Filter by Range TOP 节点来过滤掉模拟的前几帧。

smoke_sim 节点导入的 pyro 模拟直到第 25 帧左右才非常明显。过滤掉看起来几乎为空的帧将修剪上游帧范围,以便下游节点(如渲染节点)只需要处理一个子集输入帧范围。

1. 在网络编辑器,创建 Filter by Range TOP 节点(你可以在⇥ Tab菜单中Data类别找到),其重命名为render_range,然后将其连接到smoke_sim下面。

2. 选择render_range节点,然后配置以下参数:

  • 在第一个 Filter Range参数字段中,输入25
    这将第 25帧设置为模拟帧范围的第一帧。
  • 在最后一个 Filter Range 参数字段中,输入$FEND变量。
    这会将当前Global Animation Frame Range设置为模拟帧范围的最后一帧。

3.render_range节点进行生成
请注意节点上的workitem数是384(96 帧 x 4 wedge)。这是因为每个wedge变化的前 25 帧已被render_range节点排除。

4. 单击smoke_sim节点中的第一个workitem点。
请注意在下面单击的workitem点没有和任何节点workitem之间出现依赖关系线。这是因为你单击的帧已被render_range节点过滤,因此未为其生成workitem。

5.render_range进行cook

6. 右键单击render_range节点上的workitem点。
请注意range属性变为以 25.0, 120.0, 1.0 反映新的输出帧的范围。

7. 保存场景

步骤 5 - 渲染出烟雾

在这一步中,你将使用两个 ROP Fetch TOP节点(一个是高质量 的,另一个是低质量 的)来让 GPU openGL 为每个wedge变化渲染出pyro模拟(烟雾)的帧。

由于Houdini 没有openGL的TOP渲染节点,因此这些节点将指向两个已建立的openGL ROP网络。此外,由于 openGL 只能在 Houdini 的本地图形session中工作,因此对于本教程,你将只能在本地(不能在农场)进行渲染。

Tip
即使TOP的⇥ Tab菜单不支持所有 ROP,你仍然可以使用 ROP Fetch TOP 节点来指向任何行为类似于 ROP 的节点。例如,像Vellum I/O节点或文件缓存节点。
如果你对农场渲染、光线追踪或使用 USD 感兴趣,你可以在本教程之外随时使用ROP Mantra Render TOP节点(Mantra 渲染器支持光线追踪)或USD Render TOP节点(Karma 渲染器支持 USD 和 LOP )。

1. 在网络编辑器,创建一个ROP Fetch TOP节点(你可以在⇥ Tab菜单中Render类别找到),其重命名为gl_render,然后将其连接到render_range节点下面。

这将是你的高质量openGL 渲染节点。

2. 选择gl_render节点,然后配置以下参数:

  • 指定ROP Path/tasks/topnet1/opengl_render/opengl
    现在gl_render节点知道使用哪个 ROP 网络来渲染你的pyro模拟(烟雾)的帧了。

    • 你不需要指定openGL渲染输出帧的路径,因为在opengl节点里已经帮你设置好了。
    • OpenGL 将使用你系统的显卡 (GPU) 来渲染你的帧。
  • Frames per Batch参数设置为40
    对于渲染节点,你总是希望运行某种程度的批处理,这样你就不会花费大量时间等待进程启动或帧渲染。
    在本教程之外,你选择的批量数目应取决于你的硬件和你正在cook的工作的性质。如果你将批量数目设置得太大,那么你的cook将不会 非常高效,因为你只启动了少量的进程,并且需要很长时间才能完成大量工作。如果你将批量数目设置得太小,那么你将支付很多用于启动进程的开销。

    Tip
    选择批量数目的一个好规则如下:将批量数目设置为 “workitem数目” 除以 “你渲染机器的核心数”. 例如,如果你有 24 个核,那么理想情况下你需要 24 个进程(每个核一个进程)。

3. 选择gl_render节点,按⌃Ctrl + c,然后按⌃Ctrl + v
一个新的复制的渲染节点命名gl_render1出现在网络编辑器,其输入已经连接到了render_range节点之后。将其命名为gl_render_preview

这将是你的低质量openGL渲染节点。

4. 选择gl_render_preview节点,然后配置以下参数:

  • ROP Path设置为/obj/topnet1/opengl_render/opengl_preview
  • Frames per Batch参数设置为20

5.gl_rendergl_render_preview节点进行cook。

预览版 openGL 渲染器会相当快地处理你的workitem,但更高质量的 openGL 渲染器将需要更多时间来处理。

渲染节点完成后,你将获得最终渲染的帧。

6. 查看你的渲染帧

查看gl_rendergl_render_preview的节点信息,点击Output里的.exr链接:

随后视频将会出现的MPlay中:

请注意opengl.exr视频质量将高于opengl_preview.exr.(译注:原文是这么说的,但我自己没看出来二者有啥区别,不知道是不是渲染器本身的参数设置有问题?)

步骤 6 - 为渲染器设置切换开关

在这一步中,你将使用 Switch TOP节点设置一个切换开关,让你可以选择在 TOP 网络中使用哪个输入渲染器gl_render(高质量)或gl_render_preview(低质量)。

Tip

  • 添加此开关会将你的网络分成两个分支。在本教程之外,可能会出现你需要以不同分辨率输出帧的情况(例如,用于自己的审查、回合或样片)。
  • 即使 Switch 节点只会 cook 网络的一个分支,你仍然可以手动cook任何渲染节点。

1. 在网络编辑器,创建一个Switch TOP节点(你可以在⇥ Tab菜单中Utility类别找到),其重命名为select_render,然后将其连接输入到输出的gl_rendergl_render_preview节点。

现在,你可以在二者之间进行切换

Note

  • 当你在渲染器之间切换时,如果之前未cook这些节点,则需要为切换到的渲染器分支重新cook下游节点。
  • 如果上游节点先前已经被cook,则切换渲染器不会导致变脏。

2.select_render节点的输入切换为gl_render_preview节点。
在本教程的其余部分,你将使用gl_render_preview节点的渲染帧。

3. 保存场景

步骤 7 - 为渲染帧添加字幕

在此步骤中,你将使用名为 Overlay Text 的特殊预配置 ROP Composite Output TOP节点在渲染帧的顶层添加文本。此文本将提供有关每个帧的重要wedge变化信息,例如它们的帧编号、Force值和Size值。

当你查看和比较wedge变体(例如,来自四个不同wedge变体的第 50 帧)时,这种文本是有用的参考。它将帮助你快速识别用于生成你喜欢的帧的设置,并且在你调试特效时,它也是非常有用的信息。

1. 在网络编辑器,创建一个 Overlay Text 节点(你可以在⇥ Tab菜单中Images类别找到),其重命名为wedge_overlay,然后将其连接到select_render节点后面。

2. 选择wedge_overlay节点,然后配置以下参数:

  • Overlay分页中,在Text字段中键入以下表达式:
Frame: $F3
Size: `@size`
Force: `@force`

$F3是 3 位的帧号,@size引用size这个wedge的workitem的属性,并且@force同理。
每个workitem都计算此表达式。它接受一个输入渲染帧,计算该帧workitem的属性,然后确定要在渲染帧中放置的文本。

  • ROP Composite分页中,在Output Picture参数字段中输入以下内容:
    $HIP/comp/$HIPNAME.$OS.`@wedgeindex`.$F4.exr
  • ROP Fetch分页,启用All Frames in One Batch
    该节点其实是受益于批处理的。但是在本教程中,因为这个COP节点很快,在几乎实时的速度cook,所以你不会需要用批处理。

3.wedge_overlay节点进行cook

4. 查看效果
注意视频中的文字:

5. 保存场景

步骤 8 - 收集图像

在此步骤中,你将使用 Partition by Frame TOP 节点来收集图像并将其组织到 partitions 中。

你的图像需要按帧编号进行组织,然后才能将它们传递到将在 “步骤 9” 中创建的 mosaic 节点

1. 在网络编辑器,创建 Partition by Frame TOP 节点(你可以在⇥ Tab菜单中Partitioner类别找到),其重命名为collect_frames,然后将其连接到wedge_overlay节点之后。

2.collect_frames的参数保留为默认值
不需要 改变此节点的任何设置。

3.collect_frames进行cook。
collect_frames节点产生所有叠加的图像,并把他们的workitem基于帧放入对应的partition。每个partition有四个workitem,每个wedge变体各一个。
因此节点中会出现 96 个小矩形(384 / 4个wedge)。

collect_frames将图像收集到其partition中。
每个collect_frames的workitem仅在其所有四个相同编号的wedge_overlay图像完成cook时才完成cook。

4. 右键单击collect_frames节点上的workitem点。
查看每个workitem的输出。请注意节点如何在每个partition中对 4 个帧进行分组——来自每个wedge的相同帧。

5. 保存场景。

步骤 9 - 将partition的图像组装成 2×2 网格图像

在此步骤中,你将使用 ROP Composite Output TOP节点将每个帧编号的图像的所有四个wedge变化组合为 2×2 网格。

这些网格将允许你比较每个wedge的每一帧。比如,你可以同时观察来自所有四个wedge分别的第 50 帧。

1. 在网络编辑器,创建一个ROP Composite Output TOP节点,其重命名为wedge_mosaic,然后将其连接到collect_frames节点之后。

2. 选择wedge_mosaic节点,然后配置以下参数:

  • ROP Composite分页,打开Composite分页中的Use External COP
  • COP Path设置为/tasks/topnet1/mosaic/mosaic1
    现在wedge_mosaic节点知道该用哪个COP网络来处理组合图像的任务了。
  • Output Picture保留为默认值。
    由于此节点将获取图像的所有四种变体,然后将它们转换为单个图像,因此不需要再使用@wedgeindex来确保文件不会覆盖了。

3.wedge_mosaic节点进行cook。
节点内出现 96 个点。每个点代表一个组合网格图像workitem。

4. 查看效果
请注意,视频将包含按帧号顺序排列的所有 2×2 网格图像。

5. 保存场景

步骤 10 - 等待所有图像处理完

在此步骤中,你将使用 Wait for All TOP节点来收集单个partition中的所有输入图像。

你需要拥有所有完整的图像,然后才能将它们传递到将在 “步骤 11” 中创建的视频节点。

1. 在网络编辑器,创建一个Wait for All TOP节点(你可以在⇥ Tab菜单中Dependencies类别找到),保持默认waitforall1名称,然后将其连接到wedge_mosaic节点后面。

2.waitforall1进行cook。
节点的workitem将显示为一个矩形。

该节点将所有图像收集到一个partition中,其将显示为一个矩形。

在将图像传递到下游 FFmpeg编码视频节点 之前,waitforall1节点将等待来自wedge_mosaic节点的所有合成完成。

这很重要,因为视频节点需要所有合成图像才能生成和输出视频。

3. 保存场景

步骤 11 - 将图像变成视频

在这最后一步中,你将使用 FFmpeg Encode Video TOP 节点将所有图像组合成单个 MP4 视频。

为了能够使用此节点,你需要安装FFmpeg程序,如果没有安装,可以参见【附录:安装FFmpeg】(安装之后应该需要重启Houdini)。

1. 在网络编辑器,创建一个FFmpeg Encode Video TOP 节点(你可以在⇥ Tab菜单中Images类别找到),将其重命名为make_movie,然后将其连接到waitforall1节点后面。

2. 将节点参数保留为默认值

3. 对节点进行cook(如果有报错,可能是安装FFmpeg并配置环境变量后没有重启Houdini导致的,也可能是附录中记录的问题,可以查看)

4. 看看最终的效果

5. 保存场景

译者附录:安装FFmpeg

FFmpeg Encode Video TOP节点其实就是ffmpeg命令行工具的封装,因此所谓的“安装FFmpeg”其实就是从FFmpeg官网上下载exe,然后放到节点可以找到的位置。

而FFmpeg Encode Video TOP节点将根据参数可以从三个位置中找到exe:

  • 系统的Path环境变量中
  • 环境变量PDG_FFMPEG
  • 直接在节点中指定FFmpeg二进制文件的路径。

其默认值是系统的Path环境变量,所以设置Path变量是最方便的方式,因为配置好以后都不需要在节点上做任何配置了。


首先,可以在cmd中查看ffmpeg是否已经在系统Path环境变量中了。我这里没有

因此,需要从官网下载页面进行下载。
这里我选择了Windows,gyan.dev的Build(不知道和下面的Build有没有区别)

然后选择了release builds 中的 ffmpeg-release-essentials.zip。

下载解压后,我将文件放在了C盘。因此我的ffmpeg.exe的路径为C:\dev\ffmpeg-4.4-essentials_build\bin

下面,将此路径填入系统Path环境变量中:

现在,再次在cmd中输入ffmpeg将不会出现找不到的提示了:

(应该需要重启cmd才可以)

译者问题记录:FFmpeg失败问题

第一次配置好后,我的FFmpeg节点不能输出视频,有报错:

我在这里: FFmpeg problem, doesn’t find the cooked item. 也找到了对相关问题的讨论,并找到了一种回答:

我按照其的描述,将 localschedulaerLocation改为Working Directory

之后确实没有报错并生成视频了。

不过看讨论,似乎也有别的说法。
另外,在设置环境变量后似乎也必须重启Houdini。所以这个报错并不一定是由上面的操作解决的。

总之这个问题后续可以关注。

译者后记:测试使用缓存

原文教程中将很多缓存都保存了文件,但似乎并没有真正派上用场。
我想做个测试使用缓存,比如直接导入Pyro模拟的结果而跳过模拟计算。

我在相同的HIP文件路径下建立一个新的HIP。

然后添加了一个File节点用于读取缓存文件。

由于模拟的缓存的文件参数是$HIP/geo/$OS.`@wedgeindex`.$F4.bgeo.sc
其中$OS是那个节点的名字,即smoke_sim。而@wedgeindex的0~3是四个wedge。

File节点参数的路径我填入:
$HIP/geo/smoke_sim.3.$F4.bgeo.sc
这将表示第四个wedge的缓存文件

效果确实成功读取到了缓存:

翻译PDG官方教程:一个最简单的特效PDG流程(步骤详细)相关推荐

  1. java爬虫好的教程_[Java教程]一个更加简单粗暴的爬虫

    [Java教程]一个更加简单粗暴的爬虫 0 2017-09-30 16:00:13 今天上午看到一篇文章:一个简单粗暴的爬虫 - 必应今日美图.我也用自己的方式更加简单的实现了这个功能.下面我就贴一下 ...

  2. Grunt 入门教程一:开始使用Grunt(翻译自官方教程)

    关于Grunt翻译: 用了Grunt一段时间,确实极大提高了前端开发效率,所以决定翻一下官方文档,方便英文基础不太好的童鞋们(本人英文也不怎么样).虽然在github上找到了一个中文的翻译,但是翻译质 ...

  3. Tensorflow 2 当场抓获官方教程

    文章目录 0. 写在前面 1. 最简单的教程 0. 写在前面 本教程内容与Tensorflow 2 官方教程没什么区别,区别大概就是作者做了个翻译然后加了点自己的理解粑,也就是将官方教程-- 1. 最 ...

  4. Matlab配置libsvm并实现官方教程

    文章导航 libsvm的安装 官方教程 一个简单的测试实例 libsvm的安装 libsvm是一个实现了SVM支持向量机的库,可以在MATLAB上配置调用,以下是我的安装流程,包括记录一下在安装过程中 ...

  5. 大白小课程-跟着官方教程学习Scratch3.0-P04制作音乐

    本文是视频教程:大白小课堂:跟着官方教程学习Scratch3.0系列的讲义版本,方便大家查阅 视频地址:https://www.bilibili.com/video/av54055338/ 我们今天一 ...

  6. Caffe官方教程翻译(10):Editing model parameters

    前言 最近打算重新跟着官方教程学习一下caffe,顺便也自己翻译了一下官方的文档.自己也做了一些标注,都用斜体标记出来了.中间可能额外还加了自己遇到的问题或是运行结果之类的.欢迎交流指正,拒绝喷子! ...

  7. Caffe官方教程翻译(8):Brewing Logistic Regression then Going Deeper

    前言 最近打算重新跟着官方教程学习一下caffe,顺便也自己翻译了一下官方的文档.自己也做了一些标注,都用斜体标记出来了.中间可能额外还加了自己遇到的问题或是运行结果之类的.欢迎交流指正,拒绝喷子! ...

  8. Caffe官方教程翻译(6):Learning LeNet

    前言 最近打算重新跟着官方教程学习一下caffe,顺便也自己翻译了一下官方的文档.自己也做了一些标注,都用斜体标记出来了.中间可能额外还加了自己遇到的问题或是运行结果之类的.欢迎交流指正,拒绝喷子! ...

  9. Caffe官方教程翻译(5):Classification: Instant Recognition with Caffe

    前言 最近打算重新跟着官方教程学习一下caffe,顺便也自己翻译了一下官方的文档.自己也做了一些标注,都用斜体标记出来了.中间可能额外还加了自己遇到的问题或是运行结果之类的.欢迎交流指正,拒绝喷子! ...

  10. Caffe官方教程翻译(4):CIFAR-10 turorial

    前言 最近打算重新跟着官方教程学习一下caffe,顺便也自己翻译了一下官方的文档.自己也做了一些标注,都用斜体标记出来了.中间可能额外还加了自己遇到的问题或是运行结果之类的.欢迎交流指正,拒绝喷子! ...

最新文章

  1. meteor从入门到精通_我已经大规模运行Meteor一年了。 这就是我所学到的。
  2. JPA(七):映射关联关系------映射双向多对一的关联关系
  3. SAP MM MB21创建预留单据报错- Error during conversion to alternative units of measure -
  4. 15.8.2 泛型数组
  5. tgp饥荒 服务器无响应,tgp饥荒联机版缺少fmod_event.dll文件怎么办?具体解决方法介绍...
  6. 12星座的出生年月日性格_12星座男人最爱的女人性格
  7. NLPIR使用(1)
  8. ubuntu 14.04 下hadoop2.9.1 64位编译
  9. 色斑图制作及后端无人值守自动出图kriging.js+chrome+html2canvas.js+DOS+BIGEMAP超低成本实现气象要素色斑图
  10. w10计算机右键管理,Win10右键菜单怎么管理
  11. JAVA内存泄漏原因和检测工具
  12. Centos破解密码
  13. OpenStack核心组件原理与应用之Glance
  14. R read.table Error:appears to contain embedded nulls
  15. 其實,硪想要的不是這種生活。
  16. 带你玩转CSS浏览器兼容问题——囊括了目前我所有已知的兼容性问题
  17. 图灵社区 : 图书 : 深入浅出CoffeeScript
  18. 科研信息基础设施的运行治理模式研究
  19. SPSS方差分析【005期】
  20. LoLSkip2.0使用说明(英雄联盟换肤全皮肤版本)

热门文章

  1. WebService-WSDL报文解析
  2. android 界面置顶,Android实现界面滚动时顶部部分内容置顶(附源码)
  3. comsol学习中心:建模工作流程
  4. POC-T框架学习————7、相关脚本深入学习三
  5. 从30天到1天,专业视频制作背后的技术探索之路
  6. 反斜杠“\”的几个用法!
  7. 挨踢部落故事汇(9):女程序媛的开发梦
  8. H3CIERS+(H3C认证路由交换互联网专家介绍)
  9. Win7/Win8如何配置jdk环境变量(配置java环境变量)
  10. debian安装缺少网卡驱动rtl_nic/rtl8168e-2.fw和bcm43xx-0.fw