# 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: rop = out.createNode('Redshift_ROP') 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()