Skip to main content

Scripts de Automação no Houdini

Os melhores scripts são os que resolvem o problema específico do seu workflow. Esses aqui são os que mais uso.

Criar setup de render automaticamente

import hou
def create_render_setup(output_path, frame_start=1, frame_end=100):
"""Cria um Mantra ROP com configurações padrão."""
out = hou.node('/out')
# Cria o ROP de render
mantra = out.createNode('ifd', 'render_main')
# Configura o path de output
mantra.parm('vm_picture').set(output_path)
# Configura o frame range
mantra.parm('trange').set(1) # Frame Range
mantra.parm('f1').set(frame_start)
mantra.parm('f2').set(frame_end)
# Resolução
mantra.parm('res_overridex').set(1920)
mantra.parm('res_overridey').set(1080)
print(f"ROP criado: {mantra.path()}")
return mantra
create_render_setup('/renders/projeto/$F4.exr', 1, 120)

Importar referências de arquivo

import hou
import os
def import_alembic_files(folder_path):
"""Importa todos os .abc de uma pasta como nós separados."""
obj = hou.node('/obj')
abc_files = [f for f in os.listdir(folder_path) if f.endswith('.abc')]
for abc_file in sorted(abc_files):
name = os.path.splitext(abc_file)[0]
full_path = os.path.join(folder_path, abc_file)
# Cria geo object
geo = obj.createNode('geo', name)
# Cria alembic SOP dentro
abc_sop = geo.createNode('alembic', 'alembic_import')
abc_sop.parm('fileName').set(full_path)
# Conecta ao output
out_sop = geo.createNode('null', 'OUT')
out_sop.setInput(0, abc_sop)
out_sop.setDisplayFlag(True)
out_sop.setRenderFlag(True)
print(f"Importado: {name}")
import_alembic_files('/assets/characters')

Backup do projeto com incremento

import hou
import os
import re
def save_incremental():
"""Salva o projeto com versão incrementada."""
current_path = hou.hipFile.path()
if current_path.endswith('untitled.hip'):
hou.ui.displayMessage("Salve o projeto primeiro.")
return
# Detecta versão atual
match = re.search(r'_v(\d+)', current_path)
if match:
version = int(match.group(1))
new_version = version + 1
new_path = re.sub(r'_v\d+', f'_v{new_version:03d}', current_path)
else:
# Adiciona _v002 antes da extensão
base, ext = os.path.splitext(current_path)
new_path = f"{base}_v002{ext}"
hou.hipFile.save(new_path)
print(f"Salvo: {new_path}")
save_incremental()

Organizar a cena com layout automático

import hou
def organize_network(network_path='/obj'):
"""Organiza os nós em grid com spacing automático."""
network = hou.node(network_path)
nodes = list(network.children())
if not nodes:
return
cols = 5 # nós por linha
spacing_x = 2.0
spacing_y = -2.0
for i, node in enumerate(nodes):
col = i % cols
row = i // cols
node.setPosition(hou.Vector2(col * spacing_x, row * spacing_y))
print(f"{len(nodes)} nós organizados.")
organize_network('/obj')

Transformar script em shelf tool

Para ter qualquer script como botão na shelf:

  1. Clique direito na shelf > New Tool
  2. Cole o script na aba Script
  3. Defina nome e ícone
  4. Clique OK

O botão aparece na shelf e fica disponível em todos os projetos.