Noise, random e aleatoriedade
Aleatoriedade controlada é o segredo de animações que parecem orgânicas. O after tem várias formas de gerar valores aleatórios, cada uma com comportamento diferente.
Math.random() vs seedRandom()
Math.random() // diferente a cada frame — raramente útil em expressõesPara aleatoriedade estável:
seedRandom(index, true); // true = seed por layer, não por temporandom() // valor entre 0 e 1, estável por layerseedRandom(n, timeless):
- Primeiro argumento: seed (layers diferentes = seeds diferentes)
true= sem variação no tempo;false= varia com o tempo
gaussRandom()
Valores com distribuição gaussiana: mais próximos do centro (0), raramente nos extremos.
seedRandom(index, true);gaussRandom()Útil pra variações “naturais”: na vida real, a maioria está na média.
noise()
Ruído Perlin: suave e contínuo, sem saltos abruptos.
noise(time * 0.5) // varia suavemente, retorna -1 a 1
// 3D: mais variaçãonoise([time, thisLayer.index, 0])// posição baseada em noisevar n = noise([time * 0.5, thisLayer.index]);var amp = 100;[thisComp.width/2 + n * amp, thisComp.height/2 + noise([time * 0.5, thisLayer.index + 10]) * amp]random() que muda de forma controlada
// muda a cada segundo, estável dentro do segundoseedRandom(Math.floor(time), false);random(0, 100)Interpolação suave entre estados aleatórios:
var rate = 1;seedRandom(Math.floor(time * rate), false);var v1 = random();seedRandom(Math.floor(time * rate) + 1, false);var v2 = random();var t = (time * rate) % 1;linear(t, 0, 1, v1, v2)random() com range
random(min, max)random([0,0], [100,200]) // array com valores aleatórios por componenteSeed por layer: rotação fixa diferente pra cada layer
seedRandom(index, true);random(-45, 45)Cada layer tem uma rotação aleatória que não muda com o tempo.