Skip to main content

MOPS Replicator e distribuição de instâncias — controlando onde tudo aparece

Uma das perguntas mais comuns de quem começa com MOPS é: “tá, mas como eu controlo onde as instâncias aparecem?” A resposta curta é: você tem várias opções, e o MOPS Replicator é a mais poderosa delas. Mas antes de chegar lá, vale entender a lógica de distribuição do MOPS como um todo — porque você vai combinar essas ferramentas o tempo todo.

A base: pontos são tudo

No MOPS, cada instância existe em cima de um ponto. Então distribuir instâncias = criar pontos. Você pode alimentar o Instancer com qualquer SOP que gere pontos:

[Grid SOP] → pontos em grade regular
[Scatter SOP] → pontos aleatórios sobre superfície
[Points SOP] → pontos manuais
[Wrangle SOP] → pontos via VEX
[MOPS Replicator] → pontos com lógica procedural de padrão

O Instancer não se importa de onde vieram os pontos — ele só precisa que existam.

MOPS Replicator — o que ele faz de diferente

O Replicator não é só um distribuidor de pontos. Ele cria pontos com atributos de padrão embutidos — coisas como index ordenado, direção, grupo, distância do centro. Esses atributos são o que os Falloffs usam pra criar comportamentos interessantes.

Modos de distribuição

Grid — grade regular 2D ou 3D. O mais usado pra motion graphics tipográfico e title sequences.

Parâmetros chave:
- Size X/Y/Z: tamanho total da grade
- Divisions X/Y/Z: quantidade de pontos por eixo
- Center: centraliza na origem

Radial — distribui em círculo ou espiral. Ótimo pra composições circulares.

Linear — linha reta com N pontos. Simples mas muito útil pra sequências em fila.

Random — distribuição aleatória num volume. Menos controle, mais orgânico.

Copy from Geometry — usa os pontos/vértices de uma geometria existente. Aqui fica interessante: você pode distribuir instâncias sobre a superfície de qualquer mesh.

Usando geometria como fonte de distribuição

[Torus SOP]
[MOPS Replicator] (modo: Copy from Geometry)
[MOPS Instancer]
resultado: instâncias distribuídas sobre o torus

Combinado com um Shape Falloff usando o mesmo torus como referência, você tem controle total sobre onde e como os elementos aparecem.

Atributos gerados pelo Replicator

Esses são os atributos que o Replicator cria automaticamente e que você vai usar nos Falloffs:

AtributoTipoO que é
mops_indexintindex sequencial de cada ponto
mops_fallofffloatvalor inicial de falloff (1.0 por padrão)
Nvectornormal do ponto
orientquaternionorientação da instância
scalevectorescala inicial

O mops_index é o que o Index Falloff usa pra criar aquele efeito de onda sequencial. Quanto mais organizado o Replicator, mais previsível o comportamento.

Distribuição com Scatter — quando o Replicator não é suficiente

Para distribuições sobre superfícies orgânicas, o Scatter SOP nativo do Houdini muitas vezes é melhor que o Replicator. A combinação que uso bastante:

[Sphere ou mesh qualquer]
[Scatter SOP] ← gera N pontos aleatórios na superfície
[Sort SOP] ← reordena pontos por distância/posição
[MOPS Instancer]
[MOPS Index Falloff] ← agora funciona porque os pontos têm ordem

O Sort SOP é o segredo aqui. Sem ele, os pontos do Scatter têm ordem aleatória e o Index Falloff fica caótico. Ordenando por distância do centro ou por eixo você recupera o comportamento previsível.

Controlando a orientação das instâncias

Por padrão as instâncias herdam a orientação do ponto de origem. Você pode sobrescrever isso com o MOPS Orient Modifier ou manipulando o atributo orient diretamente:

// Aponta todas as instâncias para a origem
vector dir = normalize({0,0,0} - v@P);
p@orient = quaternion(maketransform(dir, {0,1,0}));

Ou usando o MOPS Look At pra fazer instâncias apontarem pra uma geometria ou nulo animado — muito útil pra partículas que “olham” pra câmera.

Combinando múltiplas distribuições

Você pode mesclar distribuições diferentes com um Merge SOP antes do Instancer:

[Replicator Grid] ──┐
├── [Merge SOP] → [MOPS Instancer]
[Scatter Sphere] ──┘

Só lembre de resetar o mops_index depois do merge se for usar Index Falloff, senão os índices das duas fontes vão se sobrepor:

// Attribute Wrangle depois do Merge
i@mops_index = @ptnum;

Pattern procedural sem Replicator — só com VEX

Se você quer controle total, criar os pontos via Wrangle é o caminho:

// Add Wrangle (run over: detail)
// Cria grid 10x10 com atributos MOPS
int cols = 10;
int rows = 10;
float spacing = 0.5;
for(int x = 0; x < cols; x++){
for(int y = 0; y < rows; y++){
vector pos = set(x * spacing, 0, y * spacing);
int pt = addpoint(0, pos);
setpointattrib(0, "mops_index", pt, x + y * cols);
setpointattrib(0, "mops_falloff", pt, 1.0);
}
}

Mais trabalho, controle total. Vale quando o Replicator não oferece o padrão exato que você precisa.

Recursos


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