將houdini與deadline連接遇到的狀況跟解決方法紀錄在這裡。
Hython版本修改
不知道為什麼在configure plugins改hython版本沒有用,後來在
DeadlineRepository\plugins\Houdini\Houdini.param
直接修改才順利執行對應版本。
自製ROP的連動
houdini在deadline的算圖,是slave會用hython呼叫hrender_dl.py
副本並把參數寫進去,hrender_dl.py
的主文件位置在
DeadlineRepository\plugins\Houdini\hrender_dl.py
。
而hrender_dl.py
在經過一連串的設定後,是呼叫hou.RopNode.render()
來算圖,在這邊用自製ROP遇到問題。
我在自製的ROP裡有用hou.frame()
取現在格數的方式來做計算,如果呼叫hou.RopNode.render()
的frame_range
參數start
跟end
是一樣的話(例如(103, 103)
),用hou.frame()
取到的值會是1.0,但如果frame_range
參數start
跟end
不一樣(例如(103, 106)
),hou.frame()
取到的值就會是正確的103~106。
解決辦法即是更改hrender_dl.py
,加入自製ROP的判斷式用hou.setFrame
先移到想要的格數。
# ...取自hrender_dl.py最後段,以上省略。 elif ropType == "Redshift_ROP": # blablabla # 增加自製ROP的判斷式,並更改格數讓自製ROP的hou.frame()可以吃到正確格數 elif ropType == "eli_sepExrRop": if startFrame == endFrame: hou.setFrame(startFrame) if tileRender: # blablabla frameString = "" if startFrame == endFrame: frameString = "frame " + str(startFrame) else: frameString = "frame " + str(startFrame) + " to " + str(endFrame) if isWedge: # blablabla else: print( "Rendering " + frameString ) # 如果是一般的自製ROP,整個py只會執行方才增加的判斷式跟下面這行 rop.render( frameTuple, resolution, ignore_inputs=ignoreInputs )