关于Deadline渲染Houdini工程时内存爆炸的解决办法
说明
我这里使用的Deadline版本是 10.0.20.2。新版本可能会修复。
问题发现
在提交Houdini工程时,会出现内存爆炸的情况导致渲染任务失败,即时内存没爆炸也会渲染非常慢。
查询原因
查到原因是因为Deadline的Path Mapping机制导致,Path Mapping的作用是路径重映射,比如说你的工程路径是D:/test前缀,使用Path Mapping可以在不更改原hip文件下,可以对D:/test进行修改,比如修改成//192.168.1.xxx/test的网络路径。该方法出发点是好的,Deadline官方也说使用Path Mapping是可以支持跨系统路径提交任务。但是官方在对Houdini工程进行Path Mapping时出现了意外。
通过查看Deadline的Houdini插件脚本(xxx/DeadlineRepository10/plugins/Houdini目录下)hrender_dl.py,不管在Deadline上有没有设置Path Mapping,Deadline都对Houdini文件进行Path Mapping检测。其检测方式是检测所有节点(注意这里是所有节点)它们的引用路径,并把他们存起来。问题就出现在检测所有节点的方式上,它这里使用了houdini的自身命令:
hou.fileReferences()
该脚本命令是houdini自身获取场景内所有节点的参数,并且是迭代检测,也就是说封装的内部节点也会检测。所以问题就出现了,当使用该命令时,假如工程里有很多封装节点那么会因为参数庞大而导致内存爆炸,之后就会卡死,这是Houdini自身命令导致的内存爆炸问题与Deadline无关。
解决办法
在Deadline仓库plugins/Houdini脚本下的hrender_dl.py里注销掉path mapping的参数检测,不使用Deadline path mapping功能。
def perform_pathmapping(tempdir):
...
注销
parms = gather_parms_to_map()
if parms:
pathmap_parms(tempdir, parms)