Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Las expresiones son líneas de código que le permiten establecer animaciones más o menos
sofisticadas, reduciendo al mínimo las tareas repetitivas de producción de fotogramas clave que
requerirían en un proceso normal. Producen un enlace entre propiedades y efectos dentro de una misma
capa o entre diferentes capas. Le resultará fácil copiar valores de animación de una propiedad o efecto,
para reproducirlos en otras capas o propiedades, o tomar los valores de otra propiedad para sincronizarlo
con otra u otras propiedades o efectos.
Supongamos que buscamos una animación de un objeto que proyecta una sombra y que se desplaza por
la composición al tiempo que gira. Si quiere animar todo el conjunto, necesitará un montón de fotogramas
clave. A través de las expresiones, conseguiremos que todo se mueva de la forma apropiada con un
mínimo esfuerzo en la producción de fotogramas clave.
El lenguaje de expresiones de After Effects está basado en JavaScript 1.2, aunque utiliza solo el núcleo de
este lenguaje y lo adapta a sus necesidades, sustituyendo las extensiones relacionadas con la Web por
otras propias de la aplicación. Si tiene conocimientos de JavaScript le resultará muy sencillo dominar esta
potente herramienta. Si no conoce nada de este lenguaje, no se apure, aún podrá crear expresiones más o
menos sofisticadas sin escribir una línea de código, o alterando mínimamente expresiones existentes para
adaptarlas a sus necesidades. Es decir, dispone de dos maneras de crear expresiones: bien escribiendo el
código de forma manual; o bien, utilizando un proceso semiautomático con ayuda del icono espiral (Pick
Whip). En este capítulo abordaremos las expresiones en sus aspectos más sencillos, pues profundizar más
saldría del alcance de esta guía.
Nota: Para abrir, en la ventana Línea de Tiempo, solo las propiedades de una capa con expresión
14.1.1.
aplicada pulseUsar el icono
dos veces espiral
seguidas para
la tecla E. crear expresiones
Esta utilidad le permite poder hacer uso de las expresiones sin necesidad de saber acerca de códigos
JavaScript. Relaciona propiedades entre capas copiando sus valores y creando automáticamente
expresiones. Puede relacionar los valores de la misma propiedad o efecto en distintas capas para evitar la
repetición de los fotogramas clave con un importante ahorro de tiempo, o relacionar valores de
propiedades o efectos diferentes dentro de una misma capa o de otra distinta para sincronizar acciones.
Por ejemplo, imagine que varios objetos o capas tienen que hacer un mismo recorrido en la composición.
Únicamente necesitará establecer los fotogramas clave para una de ellas y después, por medio de este
icono podrá copiar fácilmente los valores de la propiedad de posición. Si posteriormente modifica la
expresión creada, aumenta las posibilidades de manipulación de la animación. Por ejemplo, podría
introducir un retardo en el tiempo para que una capa comenzase unos segundos después que la otra, o
podría reducir la velocidad para que la capa haga el recorrido a una velocidad diferente.
Veamos el método a seguir para usar este elemento:
1. Seleccione, en la ventana Línea de Tiempo, la propiedad que llevará la expresión y ejecute el
comando del menú principal Animation>Add Expression.
2. Haga un clic y arrastre desde el icono espiral (Pick Whip) hasta la propiedad de la cual
quiere copiar los valores. En el campo de expresión de la ventana aparecerá la expresión.
Véase la figura 13.2.
Si apuntó con el icono espiral (Pick Whip) al nombre de la propiedad la expresión resultante mostrará
los valores en conjunto de la propiedad. Si por el contrario apuntó a uno de los valores en la expresión se
mostrará detallado cada uno de los valores. Tenga en cuenta que no todas las propiedades tienen un
mismo número de variables. Por ejemplo, la propiedad de posición muestra los valores X e Y para capas 2D
o X, Y, Z para capas 3D, mientras que la propiedad de opacidad tiene un único valor.
Es posible establecer más de un enlace con el icono espiral (Pick Whip), aunque para separar las
expresiones debe previamente fijar un punto y coma que separe las líneas. Las nuevas expresiones se
situarán inmediatamente detrás del cursor en el campo de expresiones, cuando éste se encuentre allí. Si no
estuviera activo el campo, entonces la nueva expresión reemplazará al texto previo. Si el campo está activo
y con texto seleccionado, este se reemplaza con la nueva propiedad marcada por el icono espiral.
Una vez generadas las expresiones automáticas con este elemento, puede modificarlas para adaptarlas a
sus necesidades. La manera de hacerlo es escribir directamente sobre la expresión en el campo de
expresiones de la ventana Línea de Tiempo. Uno de los cambios más comunes y sencillos es la
introducción de operadores matemáticos para incrementar o disminuir la acción del código. Así, puede
utilizar el signo (+) para sumar, el signo (-) para restar, el signo (/) para dividir y el signo (*) para multiplicar.
No son las únicas posibilidades, puede utilizar funciones matemáticas más complejas y disfrutar de mayor
libertad de acción. Por ejemplo, la función (*-1) consigue que la acción se aplique a la inversa.
Probablemente entienda esto mejor con un ejemplo sencillo: imitaremos los movimientos de las manecillas
de un reloj. Tenemos cuatro capas: la esfera del reloj, la aguja de las horas, la de los minutos y la de los
segundos que corre en una esfera más pequeña. En realidad lo que hay que modificar es la propiedad de
rotación. Pero previamente tendremos que cambiar el eje de anclaje para que el giro se produzca desde la
base de la aguja, que coincidirá, obviamente, con el centro del reloj, y con el centro del círculo pequeño en
el caso del segundero. Podríamos lograr este efecto animando la rotación de las tres agujas de forma
independiente, de manera que las velocidades fueran distintas en cada una de ellas. Sin embargo,
comprobará que usando una expresión muy simple logrará el mismo objetivo de una manera mucho más
rápida y sencilla, sin necesidad siquiera de escribir una línea de código.
1. Establecemos para la capa que contiene la aguja de los minutos los fotogramas clave para
hacerla rotar 360º. Por ejemplo, en tiempo 0 segundos fijamos un valor de rotación 0º y en el
tiempo 6 segundos, valor de rotación 360º para el 2º fotograma clave (o 1 en el número de
revoluciones).
2. Animamos ahora la capa de la aguja de las horas, pero en lugar de crear fotogramas clave
aplicaremos una expresión: abra la propiedad de rotación y ejecute el comando del menú
principal Animation>Add Expresión.
3. Hecho esto, hay que relacionar la propiedad de rotación de la capa anterior con esta última.
Emplearemos el icono espiral (Pick Whip) de las propiedades de la expresión haciendo un
clic y arrastrando hasta la propiedad de rotación de la capa con la aguja de los minutos, la
que tenía los fotogramas clave. Observe que, tras efectuar esta acción, aparece en el campo
de expresión una línea de código como la siguiente: thisComp.layer("minutos.jpg").rotation.
Véase la figura 14.2.
4. Si no alteramos este código ambas capas rotarán al unísono, pero nosotros queremos retrasar
la velocidad de la aguja de las horas. Con este objetivo añadiremos, escribiendo directamente
en la expresión, los caracteres /12. Así lograremos que la velocidad de la aguja se reduzca, de
manera que, cada vez que el minutero dé una vuelta completa, la aguja de las horas avanzará
una hora. La expresión debe quedar: thisComp.layer("minutos.jpg").rotation/12.
5. Repitamos el mismo proceso para la aguja de los segundos. Abra su propiedad de rotación y
aplique una expresión (Animation>Add Expression). Arrastre el icono espiral (Pick Whip)
hacia la propiedad de rotación del minutero. En esta ocasión la aguja de los segundos debería
moverse más rápido que la de los minutos, 60 veces más deprisa. Entonces modificaremos la
expresión añadiendo *60 y lo habremos conseguido. ¡Así de fácil!
Nota: Si precisa más espacio en el campo de expresiones para ver la totalidad de las líneas de
código, puede ampliar la altura del campo situando el cursor en el lado inferior y arrastrando hacia
abajo.
El lenguaje de expresiones se utiliza para relacionar objetos o propiedades con unos valores numéricos.
Para acceder a estos se usa una cadena de objetos u operadores separados por un punto. Una vez que se
llega a un valor numérico, a una matriz de números o a un booleano (como verdadero o falso) se concluye
la cadena y no se pueden añadir más atributos, aunque sí se pueden añadir operadores matemáticos como
/,*,-,+, etc.
Objetos globales
Todas las expresiones comienzan con un objeto global y el objeto global por defecto, es siempre la
capa en la que se escribió la expresión. De modo que en las expresiones se puede obviar su presencia. Por
ejemplo, si queremos "llamar" a los valores de la propiedad rotación de una capa denominada "capa1",
podríamos utilizar cualquiera de las siguientes expresiones, todas equivalentes:
thisComp.layer("capa1").rotation
thisLayer.rotation
rotation
También podríamos escribir directamente un valor para la propiedad suprimiendo incluso la palabra
Rotation, pues también está implícita. En este caso si escribimos por ejemplo únicamente 90 en el campo de
expresiones, hace referencia al valor de la propiedad de rotación para esa capa, y este será su valor fijo.
Unas líneas adelante veremos cómo podemos introducir variables.
Si los valores a los que queremos "llamar" están en otra capa, deberemos sustituir el nombre "capa1" en la
primera línea por el de la nueva capa. En esta ocasión esta línea sería la única válida.
Echemos un vistazo a la expresión creada en el apartado anterior con el icono espiral (Pick Whip), para
tratar de entender cuales eran sus instrucciones:
thisComp.layer("minutos.jpg").rotation.
Esta expresión relaciona la capa y la propiedad actual con la capa de nombre "minutos.jpg" dentro de la
composición activa (thisComp), y copia los valores (fotogramas clave) de la propiedad de rotación en la
capa con la expresión. Si recuerda el ejemplo anterior, con esta expresión conseguíamos que las dos agujas
rotaran al unísono. Recuerde también, que vimos cómo podíamos introducir un operador para cambiar la
velocidad, en el ejemplo anterior añadimos /12 para reducir la velocidad con respecto a la otra aguja.
Matrices y dimensiones
Los valores de las propiedades se representan por números, matrices de ellos o por vectores, cuando
indican una dirección, aunque en realidad a estos últimos After Effects los trata igual que cualquier otra
matriz.
Las matrices aparecen como números separados por una coma y metidos entre corchetes. La cantidad de
elementos de la matriz indica la dimensión de la propiedad. Así, tendremos hasta un total de cuatro: una
dimensión para aquellas propiedades que muestran un valor único, como por ejemplo las propiedades de
rotación y opacidad; dos dimensiones para las propiedades con dos valores, como pueden ser la posición
de una capa 2D (ejes X e Y), la escala (altura y anchura) y el punto de anclaje (X,Y); tres dimensiones para
las propiedades anteriores en capas 3D (X,Y,Z); y cuatro dimensiones para el color que presenta cuatro
canales o variables (rojo, verde, azul y alfa).
Por ejemplo, una matriz de dos dimensiones podía ser:
[30,100]
matriz que podría representar los valores de posición (x,y) de una capa.
También podemos utilizar los valores independientes, para ello añadimos al nombre de la composición [0]
para el valor de la X, [1] para el valor de la Y y [2] para el valor de la Z.
Position[0] corresponde pues al valor X, en el ejemplo anterior sería igual a 30.
Position[1] corresponde al valor Y, en nuestro ejemplo sería 100.
Es posible establecer variables:
X=position[0];
[X, 45]
Una expresión equivalente sería:
[position[0],45]
Estas serían las coordenadas de posición para la capa con la expresión. Podríamos relacionarla con el valor
del eje X de otra capa, para ello deberíamos escribir una expresión como la siguiente:
[thisComp.layer("capa1").position[0],45]
Con estas instrucciones logramos que el valor en el eje X de la capa sea el valor X de otra capa de nombre
"capa1", mientras que el eje Y permanece fijo.
Si quisiéramos que ambos parámetros fueran variables y que cada uno dependiera de una capa distinta
podríamos escribir la siguiente línea:
X= thisComp.layer("capa1").position[0];
Y= thisComp.layer("capa2").position[1];
[X,Y]
O expresado de otra forma:
[thisComp.layer("capa1").position[0], thisComp.layer("capa2").position[1]]
Hemos utilizado el nombre de la capa para hacer referencia a ella, pero también es posible usar un número
en el orden de apilamiento en la ventana Línea de Tiempo. El número 1 corresponde con la capa superior,
el 2 con la segunda y así sucesivamente. Tiene el inconveniente de que si cambiamos el orden de
apilamiento la acción de la expresión se puede ver modificada.
Así pues, es posible utilizar la expresión thisComp.layer(1).position para relacionar los valores de posición
de la primera capa en el orden de apilamiento con la capa que contiene la expresión.