Funções e Matemática em VEX
Tip
A maioria dos efeitos em VEX se resolve com um punhado de funções matemáticas. Sin, cos, rand, noise, fit: memoriza essas e você resolve 90% dos casos.
funções matemáticas essenciais
// Valor absoluto:abs(-5.0) // = 5.0
// Arredondar:floor(3.7) // = 3.0 (arredonda para baixo)ceil(3.2) // = 4.0 (arredonda para cima)round(3.5) // = 4.0 (arredonda para o mais próximo)
// Mínimo e máximo:min(3.0, 7.0) // = 3.0max(3.0, 7.0) // = 7.0
// Potência e raiz:pow(2.0, 8) // = 256.0sqrt(16.0) // = 4.0trigonometria
VEX usa radianos, igual ao JavaScript:
// Constante PI:float pi = 3.14159265;
// Seno e cosseno:float s = sin(@Time * 2 * pi); // oscila -1 a 1float c = cos(@Time * 2 * pi);
// Movimento circular:float raio = 2.0;@P.x = cos(@Time * 2) * raio;@P.z = sin(@Time * 2) * raio;// Ponto orbitando na origem no plano XZfit, o remap mais usado
fit(valor, minIn, maxIn, minOut, maxOut) remapeia um valor de um range para outro. É o equivalente ao linear() do after:
// Converte posição Y (de -5 a 5) para cor (de 0 a 1):float t = fit(@P.y, -5, 5, 0, 1);@Cd = set(t, 0, 1 - t); // gradiente vermelho-azulfit01 assume que a entrada já está entre 0 e 1:
float t = fit01(rand(@ptnum), 0.5, 2.0);// Rand gera 0-1, fit01 mapeia para 0.5-2.0rand, aleatoriedade
// Número aleatório entre 0 e 1 baseado no índice do ponto:float r = rand(@ptnum);
// Com seed diferente por atributo:float r2 = rand(@ptnum + 1000);
// Vetor aleatório:vector rv = (vector)rand(@ptnum) * 2 - 1; // cada componente entre -1 e 1Info
O rand() do VEX é determinístico: o mesmo seed sempre gera o mesmo resultado. Diferente do random() do after, que muda a cada frame a menos que você use seedRandom.
noise, o gerador de padrões
// Ruído simples baseado em posição:float n = noise(@P); // 0 a 1 aproximadamente
// Ruído animado (inclui tempo):float n = noise(set(@P.x, @P.y, @P.z, @Time));
// Turbulência (noise fractal com mais detalhe):float n = turbulence(@P + @Time * 0.2, 4, 2.0, 0.5);smoothstep, interpolação suave
// Interpola suavemente entre 0 e 1 com ease in/out:float t = smooth(0, 1, valor); // valor entre 0 e 1
// Aplicação: fade de escala por distância da origem:float dist = length(@P);float fade = 1 - smooth(0, 5, dist); // 1 próximo, 0 longe@pscale = fade * 2.0;chramp, curvas customizáveis
chramp(nome, 0_a_1) lê uma curva ramp que você define nos parâmetros do nó:
// Cria um parâmetro "minha_curva" no nó:float v = chramp("minha_curva", fit(@P.y, -5, 5, 0, 1));@pscale = v;No painel do nó você edita a forma da curva visualmente: muito mais intuitivo que hardcode matemático.