Skip to main content

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

VEXPython
Velocidademuito rápida (paralela)mais lenta
Uso principalgeometria, shaders, simulaçãoautomação, UI, pipeline
Onde rodadentro dos nós (Wrangle)Script Editor, Python SOP, shelf tools
Acesso à cenalimitado (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 cena
for node in hou.node('/obj').children():
print(node.name(), node.type().name())
# cria um nó geo
geo = 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 path
box = hou.node('/obj/geo1/box1')
# lê um parâmetro
width = box.parm('sizex').eval()
print(f"Largura: {width}")
# seta um parâmetro
box.parm('sizex').set(5.0)
# adiciona keyframe
box.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 SOP
import hou
import math
geo = hou.pwd().geometry()
# cria pontos em espiral
for 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.

Info

Documentação HOM: sidefx.com/docs/houdini/hom