hhacks/hhacks.py
2019-02-21 21:06:50 +01:00

106 lines
3.4 KiB
Python

# Set of startup scripts for SideFX's Houdini
import hou
# def render_flipbook():
def install_aliases():
aliases = [
(3, "from hhacks import rop_redshift;rop_redshift()"),
(4, "from hhacks import redshift_quick_anim;redshift_quick_anim()"),
(5, "redshift_quick_anim()"),
(6, "make_sim_cache()"),
(7, "from hhacks import iprs; iprs()[0].killRender();iprs()[0].startRender()"),
(8, 'from hhacks import *; rop,_=rop_redshift(); rop.parm("trange").set(1); render(rop)'),
(9, 'from hhacks import *; rop,_=rop_redshift(); rop.parm("trange").set(0); render(rop)'),
(10, "from hhacks import *; render((hou.selectedNodes() or rop_redshift())[0])"),
(11, "from hhacks import save_n_render as fn; fn(inc=False)"),
(12, "from hhacks import save_n_render as fn; fn(inc=True)"),
]
for fkey, hcmd in aliases:
hou.hscript("alias F{} 'python -c \\'{}\\''".format(fkey, hcmd))
def rewind():
frame = int(hou.frame())
hou.setFrame(1)
return frame
def make_sim_cache():
ffwd = rewind()
hou.node('/obj/smoke_output/make_cache').parm('execute').pressButton()
hou.setFrame(ffwd)
def rop_redshift():
out = hou.node('/out')
rop = out.node('Redshift_ROP1')
if not rop:
try:
rop = out.createNode('Redshift_ROP')
except:
return None, None
rop.moveToGoodPosition()
rop.parm("ProgressiveRenderingEnabled").set(True)
rop.parm('PrimaryGIEngine').set('RS_GIENGINE_BRUTE_FORCE')
rop.parm('SecondaryGIEngine').set('RS_GIENGINE_PHOTON_MAPPING')
rop.parm('UnifiedMaxSamples').set('1024')
ipr = out.node('Redshift_IPR1')
if not ipr:
ipr = out.createNode('Redshift_IPR')
ipr.moveToGoodPosition()
ipr.parm('linked_rop').set(rop.path())
return rop, ipr
# Workaround for redshift rendering
def redshift_quick_anim(end_frame=hou.playbar.playbackRange()[1]):
from time import sleep
rop, ipr = rop_redshift()
frame = int(hou.frame())
hou.setFrame(1)
hou.node('/obj/smoke_output/timeshift1').bypass(False)
print('range', frame, int(end_frame)+1)
for frame in range(frame, int(end_frame)+1):
print('rendering frame:', frame)
hou.node('/obj/smoke_output/timeshift1').parm('frame').setExpression('$F+{}-1'.format(frame))
rop.parm('ProgressiveRenderingNumPasses').set(64)
try:
rop.render()
except:
pass
sleep(40)
hou.node('/obj/smoke_output/timeshift1').bypass(True)
hou.setFrame(frame)
def redshift_still():
redshift_quick_anim(end_frame=hou.frame())
def save_n_render(inc=False):
if inc:
hou.hipFile.saveAndIncrementFileName()
else:
hou.hipFile.save()
if not hou.selectedNodes():
print("no node selected")
return 1
if not isinstance(hou.selectedNodes()[0], hou.RopNode):
print("no ROP node selected")
return 1
return render(hou.selectedNodes()[0])
def render(rop):
x, y = [rop.parm(name) for name in 'executebackground', 'execute']
render = x or y
if not render:
print("not a render node")
return 1
render.pressButton()
return 0
def iprs():
return [pane for pane in hou.ui.paneTabs() if isinstance(pane, hou.IPRViewer)]
def ipr_render():
ipr = iprs()[0]
ipr.killRender()
ipr.startRender()