Skip to main content

Copy to Points e Instancing

Se o MoGraph do C4D tem o Cloner, o Houdini tem o Copy to Points. Mas no Houdini você tem controle absoluto de como a cópia acontece — porque é tudo atributo.

Copy to Points: O Conceito

O SOP Copy to Points pega um objeto (a “estampa”) e cria uma cópia em cada ponto de outro objeto (os “pontos de destino”).

[Box] ──→ Copy to Points ──→ resultado: um cubo em cada ponto do grid
[Grid] ─↗

A potência está nos atributos dos pontos de destino: se um ponto tem @pscale = 2, a cópia ali será duas vezes maior. Se tem @N (normal), a cópia orienta baseada nessa normal.

Atributos que Afetam a Cópia

AtributoTipoEfeito
@pscalefloatEscala uniforme
@scalevector3Escala por eixo
@orientquaternionRotação via quaternion
@Nvector3Normal (orienta a cópia)
@upvector3Vetor “cima” para orientação
@Cdvector3Cor herdada pela cópia

Randomizando as Cópias com Wrangle

Para adicionar variação aleatória antes do Copy to Points, use um Attribute Wrangle nos pontos de destino:

// Escala aleatória por ponto
@pscale = rand(@ptnum) * 2 + 0.5;
// Rotação aleatória
@orient = quaternion(rand(@ptnum) * 6.28, {0,1,0});
// Cor por posição
@Cd = set(@P.x, @P.y, @P.z) * 0.5 + 0.5;

Variando a Estampa (Multiple Objects)

Para usar múltiplos objetos diferentes como estampa:

  1. Crie múltiplos objetos e Merge numa única geometria com grupos separados
  2. No Copy to Points, ative Pack and Instance
  3. Use o atributo @instance nos pontos de destino para controlar qual variação vai em cada ponto:
// Atribui aleatoriamente entre 3 variações (grupos 0, 1, 2)
i@variant = int(rand(@ptnum) * 3);

Scatter: Distribuindo Pontos em Superfície

O SOP Scatter gera pontos distribuídos sobre uma superfície, respeitando a área de cada primitiva:

[Sphere] → Scatter (1000 pontos) → Copy to Points → [Box] copiado em 1000 pontos

Parâmetros úteis do Scatter:

  • Count — número de pontos
  • Relax — distribui mais uniformemente (Poisson disk)
  • Force Total Count — garante o número exato
  • Seed — varia a distribuição aleatória

Animação com @Time e @Frame

Para animar as cópias com base em dados dos pontos:

// Cada cópia rotaciona em velocidade diferente baseada no id
float speed = rand(@ptnum) * 2 + 0.5;
float angle = @Time * speed * 6.28;
@orient = quaternion(angle, {0,1,0});

O @Time é o tempo atual em segundos. @Frame é o frame atual. Ambos mudam a cada frame, criando animação procedural.

Recursos


Última atualização: 2026 | Parte do wiki Zé do Motion