Python no Houdini
O Houdini tem duas linguagens de scripting: VEX (rápido, para geometria) e Python (flexível, para automação e pipeline). Eles resolvem problemas diferentes e se complementam muito bem.
VEX vs Python
| VEX | Python | |
|---|---|---|
| Velocidade | muito rápida (paralela) | mais lenta |
| Uso principal | geometria, shaders, simulação | automação, UI, pipeline |
| Onde roda | dentro dos nós (Wrangle) | Script Editor, Python SOP, shelf tools |
| Acesso à cena | limitado (só o nó atual) | completo (tudo na cena) |
Regra prática: VEX para processar geometria ponto a ponto, Python para automatizar tarefas e integrar com sistemas externos.
Python Shell
Acesse via Windows > Python Shell ou Alt+Shift+P. Console interativo, você testa código na hora:
import hou
# lista todos os objetos na cenafor node in hou.node('/obj').children(): print(node.name(), node.type().name())
# cria um nó geogeo = hou.node('/obj').createNode('geo', 'meu_objeto')print(geo.path())A 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:
import hou
# acessa um nó pelo pathbox = hou.node('/obj/geo1/box1')
# lê um parâmetrowidth = box.parm('sizex').eval()print(f"Largura: {width}")
# seta um parâmetrobox.parm('sizex').set(5.0)
# adiciona keyframebox.parm('ty').setKeyframe(hou.Keyframe(10.0, hou.frameToTime(1)))box.parm('ty').setKeyframe(hou.Keyframe(0.0, hou.frameToTime(24)))Python SOP: geometria com Python
O Python SOP cria ou modifica geometria usando a API Python. Mais lento que VEX, mas com acesso a bibliotecas externas (numpy, scipy…):
# dentro de um Python SOPimport houimport math
geo = hou.pwd().geometry()
# cria pontos em espiralfor i in range(100): t = i / 100.0 x = math.cos(t * 6.28 * 5) * t * 10 y = t * 5 z = math.sin(t * 6.28 * 5) * t * 10 pt = geo.createPoint() pt.setPosition(hou.Vector3(x, y, z))Shelf Tools com Python
Clique direito na shelf, New Tool, aba Script. Cria botões que rodam scripts Python com um clique:
import hou
# shelf tool: seleciona todos os nós do tipo 'box'for node in hou.node('/obj').recursiveGlob('*'): if node.type().name() == 'box': node.setSelected(True)Callbacks e eventos
Para rodar código quando algo na cena muda:
def onParmChanged(node, event_type, match_pattern): print(f"Parâmetro mudou em {node.name()}")
node = hou.node('/obj/geo1')node.addEventCallback((hou.nodeEventType.ParmTupleChanged,), onParmChanged)Python em outros softwares VFX
Python é o padrão da indústria de VFX. Houdini, DaVinci Resolve, Nuke, Blender, Maya — todos têm API Python completa. Aprende uma vez, usa em vários softwares.
import DaVinciResolveScript as dvr
resolve = dvr.scriptapp("Resolve")project = resolve.GetProjectManager().GetCurrentProject()timeline = project.GetCurrentTimeline()
timeline.AddMarker(1000, "Blue", "Meu Marcador", "Nota", 1)import hou
obj_context = hou.node("/obj")geo = obj_context.createNode("geo", "meu_objeto")box = geo.node("").createNode("box")box.parm("sizex").set(2.0)Info
Documentação HOM: sidefx.com/docs/houdini/hom