PDG(过程相关性图)是Houdini 18中的新增功能,在项目中经常都会用到PDG。所以今天高级技术美术师Matthijs Verkuijlen为大家分享在游戏资产和地形生产中使用PDG的一些见解。


1
什么是PDG


PDG是Houdini 18中的新增功能,已添加了TOP(任务运算符)功能。PDG可以分发和运行许多任务,每个工作项具有不同的设置。WorkItem可以分布在多个核心上,也可以在云中运行。

PDG可用于多种用途,例如使用略有不同的设置渲染具有相同效果的多个版本,以查看最喜欢的版本,生成同一资产的不同版本,应用修改或整理一系列地形的数据瓷砖。

PDG还跟踪依赖关系。更改单个workItem上的设置并重新生成该workItem和所有下游依赖项,而不必重新生成其他内容。


2
PDG的使用


我在Houdini中创建门廊秋千HDA。门廊秋千有几个输入参数,其中一些是秋千的宽度,高度,座椅高度和支撑角度。随着座椅的来回摆动,秋千上有些动感。
这可以植入PDG生成几个不同版本,我创建一个TOP网络,并添加一个楔形节点和HDA处理器。
在楔形节点中,将其设置为生成16个楔形,并具有4个随机属性:高度,宽度,座椅高度和角度,节点上的点称为工作项。
PDG处理器中使用的HDA(尤其是在渲染时)可能需要修改,所以在HDA内添加了Objnetwork和ROP out网络,在其中添加相机,照明设置和渲染设置。我添加了一个目录和一个输出文件名作为HDA输入,并使用楔形数字来确保它不会多次覆盖相同的渲染。然后使用要生成的变量设置HDA处理器。
运行此PDG图后,已绘制出该资产的16个变体。
这不是PDG的最佳用法,但可以让我们知道如何使用一些选项。


3
PDG地形


虽然可以使用PDG生成很多不同的地形,但这会占用大量资源。你可以使用PDG生成一些基本地形来获取灵感,但大多数游戏都希望能对地形进行更多控制。所以我们需要处理地形,并且写出特定的元数据。

PDG可以很好地将整个游戏世界拆分为大小均匀的图块,然后进行单独处理。只要分解输入(例如,道路网络),就可以使用类似方式处理这些图块。

下面道路示例,如果地形为10240x10240米,并且道路弯道作为输入。
道路曲线就需要捕捉到地形,并对其进行少量修改,潜在地识别交叉路口,以便在整个地形中找到更多自然路径。
由于地形大小,可能会导致大片区域没有道路。重新计算所有步骤的所有数据非常浪费,这是PDG的用处。如果将这个世界分成512x512米的图块,则每个轴有20个图块:
覆盖在道路曲线上的同一网格:
在下图中,将受道路影响的所有图块都涂成绿色,将所有未受影响的图块都涂成红色。
在400个图块中占48个。尤其开始执行时,不必重新计算未受影响的区域。


4
测井与遥测


当使用PDG时,尤其是开始在非自己的机器上运行图形时,从中获取正确的信息有时是成功的一半。日志将写到顶级网络中本地调度程序上设置的“临时目录”中。建议将目录更改为你实际查找日志的位置(如果在云上运行,则该位置可以上传这些日志,方便访问)。

找到日志后,确保写入日志的信息有用是很重要的。默认情况下,并非所有警告和错误都会写入日志,尤其是VEX日志,但所有printf语句都会写入。

当图形变大时,需要知道跟踪时间在哪里。添加到正在处理的每个HDA的事情之一是计时器,它由两个Python节点组成,一个在图的开头,一个在图的结尾,以毫秒为单位捕获当前时间。这里要知道节点的开始时间和结束时间,因为我可以计算出执行该工作项所花的时间。

因为日志数量会快速膨胀,并且我不想手动筛选数百个日志以比较数字,所以我构建一些Python工具,这些工具使用一些简单的正则表达式从日志中过滤出重要信息并将其全部添加到一本大日志。拥有每个workItem的所有信息,但现在只是一种更具可读性的格式。

我对遥测数据做类似的事情,在日志中浏览并使用正则表达式找到适合编写遥测方式的行,将遥测数据写入一个json文件,这样就可以很容易地看到这些数字。


5
总结


我认为PDG是Houdini工具箱中非常有用的工具。我们可以通过使用PDG来解决问题,但对于很多问题,PDG是不必要使用的。

建立PDG图对于生成同一资产的许多不同版本很有用,也可以并行完成的任务,方便我们快速创作。