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 houimport 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 houimport osimport 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:
- Clique direito na shelf > New Tool
- Cole o script na aba Script
- Defina nome e ícone
- Clique OK
O botão aparece na shelf e fica disponível em todos os projetos.