Deadline 跟 Houdini 連動筆記

將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參數startend是一樣的話(例如(103, 103)),用hou.frame()取到的值會是1.0,但如果frame_range參數startend不一樣(例如(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 )