Documentos de Académico
Documentos de Profesional
Documentos de Cultura
35
After Effects
Expresiones
Imprescindibles
Txetxu de la Portilla
After Effects - 35 Expresiones Imprescindibles
1. Animación Aleatoria - Wiggle.......................................................................................pg.1
2. Animación Aleatoria en una Dimensión - Wiggle.................................................pg.1
3. Escala Uniforme - Wiggle.................................................................................................pg.2
4. Bucle Animación Aleatoria - Wiggle..........................................................................pg.2
5. Animación Aleatoria - Wiggle Entrecortado..........................................................pg.2
6. Péndulo...................................................................................................................................pg.3
7. Péndulo 2...............................................................................................................................pg.3
8. Animación Aleatoria 2....................................................................................................pg.4
9. Mantener Animación Aleatoria - Wiggle.................................................................pg.5
10. Ondulaciones......................................................................................................................pg.6
11. Girar........................................................................................................................................pg.6
12. Lanzar....................................................................................................................................pg.7
13. Time........................................................................................................................................pg.7
14. Rebote Inercial...................................................................................................................pg.8
15. Rebote.................................................................................................................................pg.10
16. Rebote 2.............................................................................................................................pg.11
17. Bucles..................................................................................................................................pg.12
18. Espiral..................................................................................................................................pg.12
19. Encoger y Estirar.............................................................................................................pg.13
20. Números Binarios Aleatorios......................................................................................pg.13
21. Movimiento Aleatorio de Capas................................................................................pg.14
22. Movimiento Aleatorio de Líneas...............................................................................pg.15
23. Animación Básica con Audio....................................................................................pg.15
24. Aparecen Capas con el Audio..................................................................................pg.16
25. Empezar Movimiento con Audio...........................................................................pg.17
26. Transición Automática.................................................................................................pg.18
27. Rastro de Movimiento................................................................................................pg.18
28. Conexión Elástica...........................................................................................................pg.19
29. Remapeo de Tiempo Controlado por Audio......................................................pg.20
30. Remapeo de Tiempo Entrecortado.........................................................................pg.20
31. Panorámica y Exploración Aleatoria.......................................................................pg.21
32. Esconder Capa Cuando la Cámara no Mira......................................................pg.23
33. Orientar Automáticamente al Eje Y.......................................................................pg.23
34. Cronómetro......................................................................................................................pg.24
35. Contador Universal.......................................................................................................pg.25
1.Animación Aleatoria - wiggle
Para conseguir una animación aleatoria de cualquier parámetro y que esta tenga
una “esencia orgánica” utilizamos la expresión wiggle(x,y);
Digamos que queremos tener una animación aleatoria pero solo en la posición vertical, y
y dejar la posición horizontal como esta.
Copiar y pegar al parametro de Posición con la capa en 3D. Las dimensiones que tengan
la “w” se verán afectadas por la expresión de wiggle, mientras que las que tengan “value”
se quedan como están.
1
3. Escala Uniforme - wiggle
Cuando aplicamos wiggle a la escala de una capa, esta nos da una escala que no es uniforme.
Para conseguir una escala uniforme copi y pega esta expresión.
t = time % bucle;
2
6. Péndulo
veloc = 7;
amplitud = 80;
decay = .7;
amplitud*Math.sin(veloc*time)/Math.exp(decay*time)
Lo mismo que el péndulo pero preparado para la escala en el parametro vertical. De nuevo
la posición del punto de anclaje es vital para que el efecto funcione.
veloc = 35;
amplitud = 30;
decay = 1.0;
y = amplitud*Math.cos(veloc*time)/Math.exp(decay*time);
value + [0,y]
veloc = 35;
amplitud = 30;
decay = 1.0;
y = amplitud*Math.cos(veloc*time)/Math.exp(decay*time);
value + [y,1]
3
8. Animación Aleatoria 2
Esta animación aleatoria es más compleja que la expresión wiggle, pero nos da mucho más
control sobre los valores que proporciona.
end = 0;
j = 0;
while (time >= end){
j ++;
seedRandom(j,true);
start = end;
end += random(tMin,tMax);
}
endVal = random(minVal,maxVal);
seedRandom(j-1,true);
dummy = random(); //valor desechable
startVal = random(minVal,maxVal);
ease(time,start,end,startVal,endVal)
end = 0;
j = 0;
while ( time >= end){
j ++;
seedRandom(j,true);
start = end;
end += random(tMin,tMax);
}
endVal = random(minVal,maxVal);
seedRandom(j - 1,true);
dummy = random(); //valor desechable
startVal = random(minVal,maxVal);
ease(time,start,end,startVal,endVal)
4
Copiar y pegar a Escala:
end = 0;
j = 0;
while (time >= end){
j ++;
seedRandom(j,true);
start = end;
end += random(tMin,tMax);
}
s = random(minVal,maxVal);
endVal = [s,s];
seedRandom(j-1,true);
dummy = random(); //valor desechable
s = random(minVal,maxVal);
startVal = [s,s]
ease(time,start,end,startVal,endVal)
A veces cuando cambiamos el orden de una capa, la animación que teníamos de un wiggle
cambia. Si preferimos tener la animación original pero tenemos que cambiar el orden de la
capa, podemos mantener dicha animación con seedRandom(); De esta manera nuestra
animación aleatoria siempre será la misma. Incluso la podemos copiar a mas capas.
seedRandom(1);
5
10. Ondulaciónes
11. Girar
Animar sin fotogramas clave a velocidad constante.
6
12. Lanzar
Animar sin fotogramas clavea velocidad constante.
13. Time
Utilizamos esta expresión para obtener el valor del tiempo en el parámetro que hemos
seleccionado. Podemos multiplicar por un número para que obtengamos mayor velocidad.
Ideal para tener una animación constante sin fotogramas.
//Te da valores que van incrementando con el tiempo y los multiplica por 10.
time*10
7
14. Rebote Inercial
Precioso “rebote” para nuestras animaciones, Necesita de dos fotogramas clave con el
valor inicial y el valor final.
// Rebote Inercial (Se mueve a posición final después de haber rebotado un poco)
n = 0;
if (numKeys > 0){
n = nearestKey(time).index;
if (key(n).time > time){
n--;
}}
if (n == 0){ t = 0;
}else{
t = time - key(n).time;
}
if (n > 0 && t < 1){
v = velocityAtTime(key(n).time - thisComp.frameDuration/10);
value + v*amp*Math.sin(freq*t*2*Math.PI)/Math.exp(decay*t);
}else{value}
8
Copiar y pegar a Rotación:
n = 0;
if (numKeys > 0){
n = nearestKey(time).index;
if (key(n).time > time){
n--;
}}
if (n == 0){ t = 0;
}else{
t = time - key(n).time;
}
if (n > 0 && t < 1){
v = velocityAtTime(key(n).time - thisComp.frameDuration/10);
value + (v/100)*amp*Math.sin(freq*t*2*Math.PI)/Math.exp(decay*t);
}else{value}
9
15. Rebote
Con esta expresión conseguiremos un efecto “rebote” de nuestra animación la cual ya tiene
fotogramas clave.
e = .7; // Elasticidad
g = 5000; // Gravedad
nMax = 9;
n = 0;
if (numKeys > 0){
n = nearestKey(time).index;
if (key(n).time > time) n--;
}
if (n > 0){
t = time - key(n).time;
v = -velocityAtTime(key(n).time - .001)*e;
vl = length(v);
if (value instanceof Array){
vu = (vl > 0) ? normalize(v) : [0,0,0];
}else{
vu = (v < 0) ? -1 : 1;
}
tCur = 0;
segDur = 2*vl/g;
tNext = segDur; nb = 1 // number of bounces
while (tNext < t && nb <= nMax){
vl *= e;
segDur *= e;
tCur = tNext;
tNext += segDur;
nb++
}
if(nb <= nMax){
delta = t - tCur;
value + vu*delta*(vl - g*delta/2);
}else{
value
}
}else
value
10
16. Rebote 2 Otra animación de Rebote, un poco más natural.
Copiar y pegar a Parametro de al menos una dimensión (Posición, Rotación,
var p = 3; // elasticidad
var a = 100; // amplitud elastica
var s = 3; // cuanto de rebote
function outBack(t, b, c, d, a, p) {
if (s == null) s = 1.70158;
return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b;
}
function rebote2() {
var n = 0;
if (numKeys > 0) {
n = nearestKey(time).index;
if (key(n).time > time) { n-- }
}
try {
var key1 = key(n);
var key2 = key(n+1);
} catch(e) {
return null;
}
// Cuantas dimensiones se necesitan
var dim = 1; // tiene que tener al menos una dimension
try {
key(1)[1];
dim = 2;
key(1)[2];
dim = 3;
} catch(e) {}
t = time - key1.time;
d = key2.time - key1.time;
sX = key1[0];
eX = key2[0] - key1[0];
if (dim >= 2) {
sY = key1[1];
eY = key2[1] - key1[1];
if (dim >= 3) {
sZ = key1[2];
eZ = key2[2] - key1[2];
}
}
if ((time < key1.time) || (time > key2.time)) {
return value;
} else {
val1 = outBack(t, sX, eX, d, a, p, s);
switch (dim) {
case 1:
return val1;
break;
case 2:
val2 = outBack(t, sY, eY, d, a, p, s);
return [val1, val2];
break;
case 3:
val2 = outBack(t, sY, eY, d, a, p, s);
val3 = outBack(t, sZ, eZ, d, a, p, s);
return [val1, val2, val3];
break;
default:
return null;
}
}
}
(rebote2() || value); 11
17. Bucle
Utiliza esta expresión para obtener un bucle de la animación que hayas creado con tus
fotogramas clave.
Copiar y pegar a cualquier animación (el resultado es un efecto ping pong, la animación
llega hasta el final y después va marcha atrás::
18. Espiral
Movimiento en espiral.
r = rMax/Math.exp(time*decay);
a = degreesToRadians(aStart + aRate*time);
offset = (r/offsetFactor)*Math.sin(freq*time*Math.PI*2);
center + [Math.cos(a),Math.sin(a)]*(r + offset);
12
19. Encoger y Estirar
t = time - inPoint;
x = scale[0] + maxDev*Math.sin(spd*t)/Math.exp(decay*t);
y = scale[0]*scale[1]/x;
[x,y]
posterizeTime(freq);
randMin = Math.pow(2,cols);
randMax = randMin*2;
s = "";
13
21. Movimiento Aleatorio de Capas
Recrea un movimiento aleatorio de las capas que tengan esta expresión.
gap = this_comp.width/columns;
origin = [gap,gap];
xGrid = columns - 1;
yGrid = Math.floor(this_comp.height/gap) - 1;
start = 0;
end = 0;
j = 1;
14
22. Movimiento Aleatorio de Líneas
Recrea un movimiento aleatorio líneas moviendose en el eje x.
end = 0;
j = 0;
while (time >= end){
j++;
seedRandom(j,true);
start = end;
end += random(tMin,tMax);
}
endVal = random(thisComp.width);
seedRandom(j - 1,true);
x = random(); //this is a throw-away value
startVal = random()*this_comp.width;
x = ease(time,start,end,startVal,endVal);
[x,value[1]]
maxStretch = 2.0;
audioLev = thisComp.layer("Audio Amplitude").effect("Both Channels")("Slider");
stretch = linear(audioLev, minAudio, maxAudio, 1.0, maxStretch);
value * stretch
15
24. Aparecen Capas con el Audio
Aparte de Analizar el Audio hay que crear un Controlador de Expresión. Mirar vídeo para
entender mejor los pasos.
n = 6; // Número de Capas
16
25. Empezar Movimiento con Audio
Recordad, se tiene que analizar la pista de audio antes de aplicar esta expresión a la
capa que queramos se vea afectada por la amplitud de onda del archivo de audio.
17
26. Tranisición Automática
Haz que una capa “aparezca” y “desaparezca” al principio y final de la composición sin
fotogramas clave.
if (marker.numKeys<2){
tSecs = transition / ( 1 / thisComp.frameDuration);
linear(time, inPoint, inPoint + tSecs, 0, 100)
- linear(time, outPoint - tSecs, outPoint, 0, 100)
}else{
linear(time, inPoint, marker.key(1).time, 0, 100)
- linear(time, marker.key(2).time, outPoint, 0, 100)
}
opacityFactor = .75;
Math.pow(opacityFactor,index - 1)*100
18
28. Conexión Elástica
Esta expresión nos permite crear una cnoexión elástica entre dos capas. Básicamente la capa
a la que se aplica esta expresión seguirá a la capa “leader” pero con un efecto elástico.
restLength = 20;
damp = .95;
leader = thisComp.layer("leader");
fDur = thisComp.frameDuration;
currFrame = Math.round(time / fDur);
p2 = position.valueAtTime(0);
v2 = 0;
for (f = 0; f <= currFrame; f++){
t = f*fDur;
p1 = leader.transform.position.valueAtTime(t);
delta = p2 - p1; nDelta = normalize(delta);
a = 2 * nDelta * (length(delta) - restLength) * fDur;
v2 = (v2 - a) * damp;
p2 += v2;
}
p2
19
29. Remapeo de Tiempo controlado por Audio
Haz que el ritmo de tu capa de Audio controle la velocidad del vídeo. Acuérdate de pasar
el Audio a fotogramas clave.
Elíge un trozo de tu vídeo para que esta expresión te haga un efecto de entrecortado,
if(time >= start && time <= end) random(start,end) else time
20
31. Panorámica y Exploración Aleatoria
Con esta expresión te creará un efecto de cámara aleatoria a una imágen mas grande que
la composición. Debes crear un Punto de Control para la capa (mirar vídeo)
scaleTime = 1;
holdTime = .5;
maxScale = 50;
minScale = Math.max(thisComp.width/width,thisComp.height/height)*100;
totalTime = scaleTime + holdTime
seed =Math.floor(time/totalTime) + 2;
seedRandom(seed,true);
newScale = random(minScale,maxScale);
seedRandom(seed - 1,true);
oldScale = random(minScale,maxScale);
[oldScale,newScale];
scaleTime = 1;
holdTime = .5;
pixFactor = source.pixelAspect/thisComp.pixelAspect;
totalTime = scaleTime + holdTime;
segTime = time%totalTime;
oldScale = effect("Point Control").param("Point")[0];
newScale = effect("Point Control").param("Point")[1];
seed = Math.floor(time/totalTime) + 133;
seedRandom(seed,true);
maxX = (width/2)*(newScale/100)*pixFactor;
minX = thisComp.width - (width/2)*(newScale/100)*pixFactor;
maxY = (height/2)*(newScale/100);
minY = thisComp.height - (height/2)*(newScale/100);
newPos = random([minX,minY],[maxX,maxY]);
seedRandom(seed - 1,true);
maxX = (width/2)*(oldScale/100)*pixFactor;
minX = thisComp.width-(width/2)*(oldScale/100)*pixFactor;
maxY = (height/2)*(oldScale/100);
minY = thisComp.height - (height/2)*(oldScale/100);
oldPos = random([minX,minY],[maxX,maxY]);
if(segTime > scaleTime){
newPos
}else{
percent = segTime/scaleTime;
ease(percent,oldPos,newPos)
}
21
Copiar y pegar a la Escala:
scaleTime = 1;
holdTime = .5;
totalTime =scaleTime+holdTime;
segTime = time%totalTime;
oldScale = effect("Point Control").param("Point")[0];
newScale = effect("Point Control").param("Point")[1];
if(segTime > scaleTime){
[newScale,newScale]
}else{
percent = segTime/scaleTime;
ease(percent,[oldScale,oldScale],[newScale,newScale])
}
22
32. Esconder capa cuando la cámara no mira (3D)
Hace desaparecer una capa cuando la cámara no mira a esa cara. Mirar vídeo para explicación.
Hace falta una cámara para que funcione y que las capas sean 3D.
23
34. Cronómetro
function padZero(n){
if (n < 10) return "0" + n else return "" + n
}
clockTime = clockStart + rate*(time - inPoint);
if (clockTime < 0){
sign = "-";
clockTime = -clockTime;
}else{
sign = "";
}
t = Math.floor(clockTime);
hr = Math.floor(t/3600);
min = Math.floor((t%3600)/60);
sec = Math.floor(t%60);
ms = clockTime.toFixed(2).substr(-2);
sign + padZero(hr) + ":" + padZero(min) + ":" + padZero(sec) + "." + ms
24
35. Contador Universal
t = time - inPoint;
s = linear (t, 0, dur, beginCount, endCount).toFixed(numDecimals);
prefix = "";
if (s[0] == "-"){
prefix = "-";
s = s.substr(1);
}
if(dollarSign) prefix += "$"; // Cambia el signo de moneda aqui
if (commas){
decimals = "";
if (numDecimals > 0){
decimals = s.substr(-(numDecimals + 1));
s = s.substr(0,s.length - (numDecimals + 1));
}
outStr = s.substr(-s.length, (s.length-1)%3 +1);
for (i = Math.floor((s.length-1)/3); i > 0; i--){
outStr += "," + s.substr(-i*3,3);
}
prefix + outStr + decimals;
}else{
prefix + s;
}
25