Найти в Дзене

Рецепты Houdini. Автоматизация с Python

В гудини есть шикарная технология TOP, но там нет одной полезной функции - нажимать кнопку сохранить, в статьях про сохранения FBX я описывал про специальную ноду ropfbx, но что если нужно сохранять другие сущности или просто выполнять действия, тут нам поможет Python. Представим блюпринт где у нас выполняются какие-то действия с HeightField и нам нужно сохранить несколько слоев в свой файл. в примере у нас есть нода ctrl6 у которой есть параметр NoTile (notile) и восемь HeightFieldOutput, каждый сохраняет слой в файл $HIP/T_Relef2_`chs("../ctrl6/notile")`_`chs("red_channel")`.png Цель автоматизации в том чтобы переключать NoTile и в каждой ноде HeightFieldOutput (hf_save1) нажать кнопку Save to Disk node = hou.pwd()
geo = node.geometry()
for i in range(2, 13): # от 1 до 12 включительно
ctrl = hou.node("/obj/geo1/ctrl6")
ctrl.parm("notile").set(i);
out_node1 = hou.node("/obj/geo1/hf_save1")
# cook() блокирует выполнение, пока нода не докукится
out_node1.cook(force=True)
out

В гудини есть шикарная технология TOP, но там нет одной полезной функции - нажимать кнопку сохранить, в статьях про сохранения FBX я описывал про специальную ноду ropfbx, но что если нужно сохранять другие сущности или просто выполнять действия, тут нам поможет Python.

Представим блюпринт где у нас выполняются какие-то действия с HeightField и нам нужно сохранить несколько слоев в свой файл.

в примере у нас есть нода ctrl6 у которой есть параметр NoTile (notile)

-2

и восемь HeightFieldOutput, каждый сохраняет слой в файл

-3
$HIP/T_Relef2_`chs("../ctrl6/notile")`_`chs("red_channel")`.png

Цель автоматизации в том чтобы переключать NoTile и в каждой ноде HeightFieldOutput (hf_save1) нажать кнопку Save to Disk

-4
node = hou.pwd()
geo = node.geometry()
for i in range(2, 13): # от 1 до 12 включительно
ctrl = hou.node("/obj/geo1/ctrl6")
ctrl.parm("notile").set(i);
out_node1 = hou.node("/obj/geo1/hf_save1")
# cook() блокирует выполнение, пока нода не докукится
out_node1.cook(force=True)
out_node1.parm("execute").pressButton()
out_node2 = hou.node("/obj/geo1/hf_save2")
out_node2.cook(force=True)
out_node2.parm("execute").pressButton()
...
out_node8 = hou.node("/obj/geo1/hf_save8")
out_node8.cook(force=True)
out_node8.parm("execute").pressButton()

как только снимаем Baypass (желтый флаг) с ноды, запускается автоматизация