官方文档:PDG Tutorial 3 HDA Processor Part 1
关于这个教程
在Houdini中,HDA让你可以将复杂的场景组件、工具、甚至额外的文件打包到一个特殊的节点中,你可以设计自定义的控制方式,也很容易在随后进行安装和分布。
通过PDG,你可以用 HDA Processor 节点 来配置HDA的参数并生成work items
(或者说“任务”)并cook它。
这篇教程的流程是:
- 使用 wedge 的方式来创建一个HDA的多个变种
- 使用 HDA Processor 来对多个变种运行任务,并使用多个cook方式
- 过滤出你不想要的版本
- 降低输出几何体的质量
(对于TOPs和PDG的基础知识,可见之前的博客《翻译Houdini官方文档:PDG/TOPs介绍》)
你将会学到什么
- 指定HDA的参数设置
- 创建一个HDA的变种
- 使用三种不同的Cook方式来Cook一个HDA
- 可视化PDG的输出
- 设置PDG服务
步骤 0 - 拷贝所需的HDA文件
导航到路径Houdini安装目录/houdini/help/files/pdg_tutorials/intro_to_hdaprocessor
:
找到 he_polyreduce.hda 和 SideFX_spaceship.hda,
在你自己的工作目录中新建一个名为PDG_TUTORIAL_FILES的文件夹,将上面两个hda拷进来:
步骤 1 - 观察HDA
在这个步骤中,你将打开 SideFX_spaceship.hda 并熟悉其中的内容。
(1) 运行Houdini编辑器打开一个新场景。
(2) 导入SideFX_spaceship.hda 并实例化(关于如何导入HDA,可参见 Install and manage digital assets)
(3) 看一下飞船HDA的 Controls 页面的参数:
(4) 尝试调节下其中的参数:
可以注意到,调节参数会对几何体的形状造成影响。
教程随后将会使用不同的TOP节点来调整飞船HDA的设置,然后输出几何体修改后的版本。
步骤 2 - 设置PDG输出的可视化
在中,你将设置一个特殊的 File节点,让你可以在视窗中看到对飞船HDA的调整
(1) 运行Houdini编辑器打开一个新场景。
(2) 保存场景
- 将文件命名为 hdaprocessorpt1tutorial.hip
- 保存到 \PDG_TUTORIAL_FILES 文件夹中
这就是你接下来的工程文件
(3) 在 节点网络编辑器 中,导航到obj网络
中(如果你还不在的话)
(4) 创建一个Geometry节点,然后进入创建出 geo1 节点
(5) 创建一个File节点
(6) 在File节点的 Geometry File 参数中填:
`@pdg_output`
注意:@pdg_output 必须在“反单引号”之中(按键位置在键盘中数字键“1”的左边,其上档符号是“~ ”)这是因为 Geometry File 参数是“字符串”类型的参数。详细信息见Using attributes in expressions
@pdg_output
告诉Houdini去显示当前选择的work item
的几何体。
再随后的教程中,当你在TOP网络中你点击一个work item
时,你将可以在视窗中看到其对应的宇宙飞船的变体。
(7) 保存文件
步骤 3 - 定义HDA变种的属性
在这一步中,你将使用Wedge节点来设置一系列SideFX_spaceship.hda的变种。方式是定义PDG的哪些属性(与HDA的 Control 页面的参数相关联)有变种,而变种的数目又是多少。
这些节点所创建的wedge让你可以在随后的【步骤4】中生成和比较宇宙飞船HDA的多个版本。
(1) 在 节点网络编辑器 中,导航到tasks网络
中,然后进入 topnet1节点
光滑度Wedge:
(2) 创建Wedge节点,然后命名为smoothness。
(3) 选择smoothness节点,配置其参数:
- Wedge Count 为
2
这将决定生成的wedge(或者说变种)的数目 - Wedge Attributes 为
1
这将决定有多少个变化的属性
- 在Wedge Attributes 下:
- Attribute Name 填
smoothness
这将让你可以在你的wedge中变化smoothness
这个属性
这个属性在随后会控制宇宙飞船的 Smoothness 参数 - Attribute Type 填
Integer
这将会确保smoothness
的值总会是一个整数 - Wedge Type 填
Range
,而 Start/End 保留默认值0
到1
这将表示smoothness
是一个“二值”(只能是0或者1)
- Attribute Name 填
(4) 对smoothness节点进行Cook
可以看到出现了两个work item
,对应了两个wedge
smoothness节点生成了两个宇宙飞船HDA的版本,其中一个smoothness参数的值为0
(0%光滑),另一个smoothness参数的值为1
(100%光滑)
Tip:
可以通过点击节点的右下角来打开PDG的“任务图表(Task Graph Table)”,或者右键节点菜单选择
机身长度Wedge:
(5) 创建Wedge节点,命名为bodylength,将其连接到smoothness之后:
(6) 选择bodylength节点,配置其参数:
其中:
- Start 为
0.5
,End 为2
这将告诉节点为bodylength
属性选择均匀分布在 Start 和 End 之间的值。
(7) 对bodylength节点进行Cook
可以看到bodylength节点创建了20个wedge,10个光滑,10个非光滑,而bodylength
的值则均匀从0.5变化到2。
机翼长度Wedge:
(8) 创建Wedge节点,命名为wingslength,将其连接到bodylength之后:
(9) 选择wingslength节点,配置其参数:
(10) 对wingslength节点进行Cook
将会出现200个work item
(11) 点击wingslength节点中的work item
,可以看到在smoothness和bodylength节点上的work item
与wingslength节点上的相关work item
之间出现的线。 这些线及其相应高亮的点显示了work item
之间的依赖关系。
Tip
你可以使用“[”键和“]”来逐步浏览节点中的 work item。
(12) 保存你的场景
步骤 4 - 创建HDA几何体变种
在这一步中,你将使用一系列的HDA处理器节点依据Wedge中的设置来创建SideFX_spaceship.hda的变种。这个步骤的目的是创建不同版本的HDA,然后比较它们的视觉表现。
每个HDA处理器节点将使用不同的Cook方法(常规,batch、service)输出飞船HDA几何体的变种。 在本教程外你自己的基于HDA的TOP网络中,使用不同的Cook方式也会为你节省大量时间。
常规方式:
(1) 创建 HDA处理器节点,命名为regular_cook,将其连接到wingslength的后面。
这个节点中的参数会设定要使用的HDA文件,以及如何引用Wedge节点的属性。
(2) 选择regular_cook节点,然后配置其参数:
在 Generation 分页中,在 HDA File 中选择$HIP
(你的工作目录)下的SideFX__spaceship.hda:
这告诉了节点使用哪个HDA。
当你选择了HDA后将会有下列事情发生:
- Operator Type 被自动识别:
- HDA的所有参数被对应创建:
在 Work Items 分页中,选择 Cache Mode 为 Write Files
这将告诉节点,当缓存文件已存在时则去覆写它。
在 HDA Parameters 分页中,使用@
的符号来引用之前在Wedge节点中创建的属性。
Note
使用@attribute
来引用属性被称作是pull-style的wedge。想要了解更多关于不同种TOP节点的wedge技术,请看 Pull vs. push
Tip
在教程之外你自己的配置中,你可能会需要为你的HDA处理器节点排查些故障,因此我们建议你做如下的事情:
- 打开 Generation 分页 中的 Save Debug .hip File
- 找到你的Local Scheduler 节点,修改Temp Directory 中的 Location 为
Working Directory
,这样你就可以更容易找到你的调试HIP文件。
(3) 对regular_cook节点进行Cook
将会有200个work item
出现并且开始cook。
regular_cook为每个work item
启动一个进程,然后分别cook每个任务。 regular_cook使用HDA处理器节点默认的cook方式,这也是其最慢的方式。 通常对于这种cook方式,开始这个过程所花费的时间,比实际cook该节点所花费的时间更长。
(4) 点击regular_cook节点中代表着work item
的圆点
在 点网络编辑器 中,请注意在smoothness,bodylength和wingslength节点上的work item
之间以及在regular_cook节点上的相关work item
之间出现的连线。 这些连线以及其相应高亮的点显示了work item
之间的依赖关系。
在视窗中,请注意宇宙飞船的变化,这个预览的效果归功于我们在步骤2中设置的File节点(其Geometry File 为@pdg_output
)。
Tip
- 你可以使用“[”键和“]”来逐步浏览节点中的 work item。
- 你可以双击一个单独的 work item 显示其细节面板,然后点击“Output”来在Gplay中预览它。
(5) 点击regular_cook节点中代表着work item
的圆点,观察它们的值。
注意smoothness
bodylength
wingslength
属性的值如何在work item
之间变化。 是这些值让飞船HDA形状发生变化。
(6) 保存场景。
现在你已经创建了 HDA处理器节点,也理解了它如何工作。接下来你将尝试用其他更快的cook方式。
batch方式:
(7) 拷贝regular_cook节点(注意,复制出来的节点会自动连接到wingslength节点的后面),命名为batch_cook
这个节点将采用 batch 的cook方式。
(8) 选择batch_cook节点,然后将 Batch Mode 改为All Items in One Batch
:
这告诉节点在一个 job 中 cook 所有宇宙飞船HDA的几何体变种。 这将节省大量的cook时间,因为启动单个过程的开销比cook该工作中实际任务所花费的时间要大得多。
Tip
- 当HDA处理器的 work item 是大量的小型任务时,请对它进行批处理,这样可以更快完成。
- 当HDA处理器的 work item 需要很长时间才能完成时,流程的启动成本变得无关紧要,此时请勿进行批处理。
(9) 对batch_cook节点进行cook。
在许多情况下,此cook方法比regular_cook节点使用的cook方法要快。 在本教程中,batch方法肯定是两种cook模式中速度更快的一种。
(10) 保存场景
现在你已经创建了第二个HDA处理器节点,也理解了batch方法是怎么工作的。下一个你将创建的HDA处理器节点会是 最快 的。
service方式:
(11) 拷贝regular_cook节点,命名为service_cook
(12) 在 节点网络编辑器 中,点击Tasks,然后点击 PDG Services
此项详见PDG Service Manager
(13) 在 PDG Services 中点击 Add Services 按钮
(14) 随后在出现的窗口中,做如下配置:
然后点Add按钮。
(15) 在 PDG Services 窗口中点击 Start 按钮:
随后你可以在任务管理器中看到你的Houdini进程下多了10个(数目是指定在上面的Pool Size中的) HDA处理器服务实例:
(16) 配置service_cook节点的参数:
- 选择 Job Options 分页,打开 Use HDA Processor Service
- 在 Service Name 中选择刚才创建的服务
(17) 对service_cook节点进行cook。
service_cook使用10个正在运行的HDA处理器服务实例(进程)来cook其每个工作项。 在本教程中,service的cook方法绝对是最快的cook模式。 但是,在本教程之外的场景中,你的工作可能需要很长的时间进行处理,因此,也可能常规Cook或批处理是更好的模式。
(18) 在 PDG Services 窗口中关闭服务,然后关闭窗口。
(19) 保存场景。
现在,你已经创建了第三种HDA处理器节点,也懂得了如何建立PDG服务。
接下来你可以过滤出你不需要的HDA几何体变种。
步骤 5 - 过滤不需要的HDA几何体变种
在这一步中,你将使用 Filter by Expression 节点 来过滤出未经光滑的版本,只保留光滑的版本。
当你在自己的工作流中想要删除输出的HDA几何体变种时,此步骤很有用。
(1) 创建一个Filter by Expression 节点 ,命名为smooth_only,将其连接到 batch_cook节点之后。
Filter by Expression节点的参数将会决定哪些HDA几何体变种会保留,而哪些将会被过滤掉。
(2) 选择smooth_only节点,然后调节参数:
在 Filter Expression 中填 @smoothness != 1
这个表达式将会告诉节点:移除smoothness
这一wedge属性的值不为1的任何HDA几何体变种。
Note
在这个教程中,以下都等价:
- Remove Matching Items 时的
@smoothness != 1
- Remove Matching Items 时的
@smoothness = 0
- Keep Matching Items 时的
@smoothness = 1
(3) 对smooth_only节点进行Cook
它过滤掉了100个非光滑的版本,保留了100个光滑的版本。
(4) 选择其中work item
的圆点,观察对应关系:
可以看到其只对应了上游节点中下半部分的work item
,因为下半部分节点的smoothness
属性都是1
。
(5) 保存场景
现在,你已经学会如何对HDA几何体变种进行过滤,只保留自己想要的变种了。
接下来你将学习如何添加额外的修改。
步骤 6 - 降低最终HDA输出的质量
在这最后一步中,你将使用另一个HDA处理器节点,它使用另一个HDA文件,将会对宇宙飞船进行一些处理。
使用这个HDA处理器节点,你将会减少几何体面数。
当你在自己的工作流中创建模型的LOD时,这个步骤很有用。
(1) 创建一个 HDA处理器节点,命名为reduce_polygons,然后将其连接到smooth_only之后。
(2) 选择reduce_polygons节点,对其参数做如下配置:
- 选择HDA文件为
he_polyreduce.hda
- 选择批处理模式
- 勾选Create File Inputs
这将会告诉节点使用传入的宇宙飞船几何体作为输入
- 在参数分页,设置 Percent To Keep 为
50
,表示保留50%的面数
(3) 对reduce_polygons节点进行cook
(4) 查看其中的work item
,注意减面的效果:
(5) 保存场景
完成
恭喜!你完成了这个教程
如果你想看最终的TOP网络是什么样子,你可以在Houdini安装目录找到场景文件:
如果想继续学习PDG流程,你可以看Houdini文档中的其他初学者教程,或者访问我们网站上的Learning Path。
问题解决
1. 字符串名字末尾不容易发现的空格
将属性的名字复制到参数中的时候,末尾多了空格,导致之后引用时没找到。
(在属性表中可以看到末尾有下划线)
2. 减面节点cook错误
报错:
比对了一下官方的范例文件,发现:
Scheduler节点有不一致:
修改后重新打开场景,发现没有错误了