Skip to main content

VEX para Motion Design

Tip

Uma coleção de efeitos específicos para motion design criados em VEX: coisas que você normalmente faria no after ou no C4D, mas com o poder procedural do Houdini.

grid animado (MoGraph-style)

// Num Point Wrangle sobre um grid:
float freq = ch("frequencia");
float amp = ch("amplitude");
float velocidade = ch("velocidade");
float defasagem = ch("defasagem");
// Onda 2D com defasagem por posição:
float phase = (@P.x + @P.z) * defasagem;
@P.y = sin(@Time * velocidade + phase) * amp;
// Cor baseada na altura:
float t = fit(@P.y, -amp, amp, 0, 1);
@Cd = set(t, 0.3, 1 - t);

texto que se dissolve em partículas

// Pré-requisito: converter texto em pontos (Font SOP → Scatter)
// Ponto de destino: posição original (salva como @rest)
// Ponto de partida: posição aleatória no espaço
float progresso = ch("progresso"); // 0 = disperso, 1 = formado
vector rest = @rest; // posição final (guardada antes da dispersão)
vector dispersao = @P_inicial; // posição inicial dispersa
@P = lerp(dispersao, rest, progresso);
@pscale = fit(progresso, 0, 1, 0.02, 0.1);

efeito de data moshing (glitch)

// Desloca blocos de geometria aleatoriamente:
int blocoSize = chi("bloco");
int blocoId = int(@P.x / blocoSize) + int(@P.y / blocoSize) * 100;
float glitchAmt = ch("intensidade");
float glitchFreq = ch("frequencia");
// Só alguns blocos glitcham por vez:
float n = noise(set(float(blocoId) * 0.1, @Time * glitchFreq));
if (n > 0.7) {
@P.x += (rand(blocoId + floor(@Time * 10)) - 0.5) * glitchAmt;
@P.y += (rand(blocoId + 100 + floor(@Time * 10)) - 0.5) * glitchAmt * 0.5;
}

revelar por onda

// Revela pontos de baixo para cima com borda suave:
float limiar = ch("progresso"); // -1 a 2 (animado)
float suavidade = ch("suavidade");
float normalized = fit(@P.y, -2, 2, 0, 1); // normaliza posição Y
float mask = smooth(limiar - suavidade, limiar + suavidade, normalized);
@pscale *= mask;
if (mask < 0.01) removepoint(geoself(), @ptnum);

partículas orbitando

// Cada ponto orbita um raio baseado no seu índice:
float raio = 1.0 + rand(@ptnum) * 3.0;
float velocidade = 0.5 + rand(@ptnum + 1000) * 2.0;
float fase = rand(@ptnum + 2000) * 6.28;
float inclinacao = (rand(@ptnum + 3000) - 0.5) * 1.0;
float angulo = @Time * velocidade + fase;
@P = set(
cos(angulo) * raio,
sin(angulo) * raio * sin(inclinacao),
sin(angulo) * raio * cos(inclinacao)
);
@Cd = set(raio / 4, 0.5, 1 - raio / 4);

exportando para o after

Para usar renders do Houdini em compositing no after:

  1. Renderiza em EXR multilayer com AOVs (Z-Depth, Cryptomatte)
  2. Exporta câmera como FBX
  3. No after, importa com ProEXR
  4. Faz composite sobre outros elementos

Info

A linguagem visual pode ser Houdini, mas a finalização e compositing acontece no after: o melhor dos dois mundos.