Python API do Houdini (HOM)
O HOM (Houdini Object Model) é a API Python completa do Houdini. Tudo que você faz na interface pode ser feito via HOM, e algumas coisas só dá pra fazer via HOM.
Acessando o HOM
Python Shell: Windows > Python Shell ou Alt+Shift+P
import hou# Toda a API do Houdini fica no módulo hou# Você SEMPRE precisa do import houHierarquia de nós
import hou
# Raiz da hierarquiaroot = hou.node('/')
# Contextos principaisobj_context = hou.node('/obj')out_context = hou.node('/out')mat_context = hou.node('/mat')
# Acessando um nó específicobox = hou.node('/obj/geo1/box1')print(box.name()) # 'box1'print(box.path()) # '/obj/geo1/box1'print(box.type().name()) # 'box'Criando nós
import hou
obj = hou.node('/obj')
# Cria um geo objectgeo = obj.createNode('geo', 'meu_objeto')
# Dentro do geo, cria um boxbox = geo.createNode('box', 'box1')Lendo e setando parâmetros
import hou
box = hou.node('/obj/geo1/box1')
# Ler parâmetrosize_x = box.parm('sizex').eval()print(f"Size X: {size_x}")
# Setar parâmetrobox.parm('sizex').set(5.0)box.parm('sizey').set(3.0)
# Setar tuple (ex: translate)box.parmTuple('t').set((1.0, 2.0, 0.0))
# Setar expressãobox.parm('sizex').setExpression('sin($F * 0.1) * 2 + 3')Keyframes
import hou
node = hou.node('/obj/geo1')parm = node.parm('ty')
# Cria keyframe no frame 1 com valor 0kf1 = hou.Keyframe()kf1.setFrame(1)kf1.setValue(0)parm.setKeyframe(kf1)
# Cria keyframe no frame 48 com valor 10kf2 = hou.Keyframe()kf2.setFrame(48)kf2.setValue(10)parm.setKeyframe(kf2)Selecionando nós
import hou
# Pega todos os nós selecionados no network atualselected = hou.selectedNodes()
for node in selected: print(f"{node.name()}: {node.type().name()}")
# Seleciona um nó específiconode = hou.node('/obj/geo1')node.setSelected(True, clear_all_selected=True)Navegando pela hierarquia
import hou
node = hou.node('/obj/geo1')
# Filhosfor child in node.children(): print(child.name())
# Todos os descendentesfor n in node.recursiveGlob('*'): print(n.path())
# Paiparent = node.parent()
# Inputs e outputsinputs = node.inputs()outputs = node.outputs()Tip
O atalho hou.node('/obj/geo1').parm('tx').eval() funciona mas fica verboso. Em scripts longos, guarde o nó numa variável: n = hou.node('/obj/geo1') e use n.parm('tx').eval().