Skip to main content

Solver e Feedback Loops

Tip

O Solver SOP é onde o VEX transcende a geometria estática. Com ele dá pra criar simulações e sistemas que evoluem no tempo: sem o DOP network, direto nos SOPs.

o problema com SOPs normais

SOPs normais são stateless: cada frame é calculado independentemente. Se você move um ponto baseado em @Time, o resultado no frame 10 não “sabe” o que aconteceu no frame 9.

Para simulações, onde o estado atual depende do estado anterior, você precisa de um sistema com memória.

Solver SOP, geometria com memória

O Solver SOP (Tab > Solver) tem duas entradas:

  • Input, geometria inicial (frame 1)
  • Prev Frame, a geometria do frame anterior (automático)

Dentro do Solver, você coloca um Attribute Wrangle que modifica a geometria usando o frame anterior como referência:

// Dentro do Solver SOP:
// @P é a posição atual (= posição do frame anterior)
// Adiciona velocidade ao movimento:
vector vel = point(1, "vel", @ptnum); // lê velocidade da entrada
@P += vel * @TimeInc; // integra: posição += velocidade * delta_tempo

exemplo, partículas simples sem DOP

// Solver Wrangle, simula partículas com gravidade:
float gravity = ch("gravity");
float damping = ch("damping");
// Integra velocidade com gravidade:
@vel.y -= gravity * @TimeInc;
@vel *= damping; // aplica amortecimento
// Atualiza posição:
@P += @vel * @TimeInc;
// Colisão com plano Y=0:
if (@P.y < 0) {
@P.y = 0;
@vel.y *= -0.6; // ricochete com perda de energia
}

feedback loop manual com File Cache

Para sistemas mais complexos, você pode cachear o resultado de cada frame e usar como entrada do próximo:

  1. Wrangle calcula o frame atual
  2. File SOP salva em disco (/tmp/frame.$F4.bgeo.sc)
  3. Outro File SOP carrega o frame anterior ($F - 1)
  4. O resultado do frame anterior alimenta o Wrangle do próximo

É essencialmente o que o Solver faz internamente, mas manualmente você tem mais controle.

CHOPs para dados temporais

Para séries temporais simples (não simulações físicas), CHOPs podem ser mais adequados:

# No CHOP network:
# Constant CHOP → Math CHOP (acumula) → Export CHOP

O CHOP Lag, por exemplo, atrasa e suaviza qualquer sinal. Muito útil para câmeras que seguem com amortecimento.

VEX em DOPs, Pop Wrangle

Para acessar VEX dentro de simulações DOP (RBD, partículas), usa o Pop Wrangle (partículas) ou Geometry Wrangle (RBD):

// Pop Wrangle, roda em cada partícula durante a simulação DOP:
// Atrai partículas para a origem:
vector toOrigin = -@P;
float dist = length(toOrigin);
@Force += normalize(toOrigin) * (10 / (dist * dist + 0.1));