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_tempoexemplo, 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:
- Wrangle calcula o frame atual
- File SOP salva em disco (
/tmp/frame.$F4.bgeo.sc) - Outro File SOP carrega o frame anterior (
$F - 1) - 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 CHOPO 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));