Expresiones de JavaScript en After Effects

Este tutorial de trabajar con Expresiones de JavaScript en After Effects lo publiqué en Cristalab a finales de 2008, como todavía tiene vigencia ya que es un tema que sigue siendo interesante, lo reproduzco aquí actualizándolo a nuestros días. El tutorial está realizado en After Effects CS6 pero se puede seguir sin ningún problema si se posee una versión anterior de este programa.

El tema que vamos a tratar ha creado siempre polémica entre nosotros los diseñadores. La mayoría del gremio tiende a discriminar las soluciones en las que tengamos que escribir código siempre y cuando se pueda realizar con un proceso manual. Tenemos el paradigma –que no siempre se cumple– de que si lo hacemos a mano terminamos mucho más rápido que si tenemos que programar.

After Effects es un programa que específicamente ha sido creado para realizar animaciones y añadir efectos a nuestros vídeos, tengo muchos amigos que opinan que es una excentricidad utilizar Expresiones Javascript para este propósito, que el hacerlo es cosa de friquis. El problema real es, que cuando se trata de una animación simple como un cambio de escala o una rotación es verdad que el método de interpolación entre propiedades es el más efectivo y más rápido. Pero cuando necesitamos animar numerosos objetos, que estos cambien sus propiedades dependiendo de ciertas condiciones o parámetros, o que la animación siga patrones regidos por fórmulas matemáticas el trabajo se tornaría demasiado engorroso si intentamos hacerlo a mano. En este caso tendríamos que recurrir a un plugin o dependiendo del caso, ver si se podría resolver mediante expresiones JavaScript.

La intención de este pequeño tutorial es que quien no conozca que se puede trabajar con expresiones de JavaScript en After Effects se entere de que sí es posible y que quien sí lo sabe pero por pereza o falta de tiempo nunca se ha preocupado en consultarlo tenga un motivo para hacerlo. Creo que así contribuyo a que más profesionales se interesen por todas las posibilidades que encierra esta increíble herramienta.

Tutorial para trabajar con expresiones JavaScript en After Effects

Para comenzar creamos una nueva composición:

expresiones-de-javascript-en-after-effects-new-composition

Le ponemos el nombre que deseemos, en mi caso la voy a nombrar “javascript”1 y como no necesitamos que tenga mucha calidad porque es para hacer sólo un ejemplo voy a escoger como preset HDV/HDTV 720 252 (vídeo HD a 25 cuadros por segundo):

expresiones-de-javascript-en-after-effects-composition-settings

Pasamos ahora a importar una imagen a nuestro proyecto, para hacerlo podemos ir a File > Import > File, podemos dar doble-click en el panel Project o simplemente presionar CTRL + I en Windows o ⌘ + I en Mac OS. Después de importada la imagen vamos a trasladarla del panel Project al panel Timeline:

expresiones-de-javascript-en-after-effects-add-to-timeline

Marcamos las propiedades de Motion Blur4 (desenfoque de movimiento) y 3D Layer5 (capa 3D) de la capa correspondiente a la imagen que acabamos de importar:

expresiones-de-javascript-en-after-effects-layer-motion-blur-settings

Ahora desplegamos las propiedades de la capa e iremos directamente a Transform > Position, aquí presionando la tecla ALT daremos un click en el icono de Time y se desplegará a la derecha un espacio con el texto transform.position. En este espacio es donde vamos a escribir el código JavaScript:

expresiones-de-javascript-en-after-effects-open-expression-window

Como hemos marcado la opción 3D Layer, la posición estará compuesta por tres parámetros x, y y z, al final de todo nuestro script debemos culminar con un array de tres valores donde cada uno de ellos representará la posición en el mismo orden de los parámetros de posición anteriormente comentados. En caso de que el array no contenga alguno de los parámetros After Effects asumirá que los valores omitidos equivalen a cero. En el caso de que quisiéramos introducir una expresión en una propiedad compuesta por un solo parámetro entonces nuestra expresión debería finalizar con un número y no con un array.

Explicado lo anterior vamos a crear los scripts respectivos a hallar cada uno de los valores de la posición. Trabajaremos solo con x e y, e ignoraremos el valor de z por lo que resultará 0:

incremento = 0; 
angle = time * 100 + incremento; 
radian = degreesToRadians(angle); 
radio = 400; 
x = thisComp.width / 2 + Math.cos(radian) * radio; 
y = thisComp.height / 2 + Math.sin(radian) * radio * .5; 
 
[x,y]
Variable Explicación
time Objeto global que representa el tiempo en segundos de nuestra composición
thisComp Objeto global que representa la composición actual en la que está insertada la expresión
width Propiedad de la composición que nos devolverá el ancho en píxeles de la misma
height Propiedad de la composición que nos devolverá el alto en píxeles de la misma
Math.cos Función matemática para calcular el coseno de un ángulo en radianes
Math.sin Función matemática para calcular el seno de un ángulo en radianes
degreesToRadians Función matemática para convertir un ángulo de grados a radianes

La fórmula que hemos creado lo que hace es calcular las coordenadas en x e y de una circunferencia de radio 400, con centro en la mitad de nuestra pantalla, lo que dividiendo las posiciones en las y entre dos, por lo que el resultado será cercano a lo elíptico. La variable angle se irá incrementando mientras la animación avance, ya que su valor viene dado por la variable time. Hemos creado también una variable incremento la cual se utilizará más adelante. A continuación una captura con la muestra del código ya insertado:

expresiones-de-javascript-en-after-effects-expression-inserted-1

Si probamos avanzar por la línea de tiempo observaremos como la imagen va adquiriendo nuevas posiciones describiendo una elipse, es algo que si quisiéramos hacerlo animado nos costaría un poco más de esfuerzo. Por otro lado si en cualquier momento deseamos que se mueva en un radio diferente sólo tenemos que cambiar un número, mientras que por otros métodos tendríamos que volver a realizar la animación.

Seguiremos añadiendo expresiones a otras propiedades. Vamos a ir a la propiedad de Scale y para calcular el valor de esta vamos a tomar como referencia la posición de la capa de la imagen. De la misma manera que hicimos con la posición iremos a Scale y con ALT presionado daremos click en el icono de Time y en el área de scripts pondremos:

sc = thisLayer.position[1] / 25; 
 
[sc, sc]
Variable Explicación
thisLayer Objeto global que representa a la capa que contiene la expresión
position Propiedad de posición de la capa la cual devuelve un array con cada valor de esta propiedad

Lo que hemos hecho es tomar el valor de la posición en las y, dividirlo por 25 y el valor resultante se lo asignamos a la escala en las x e y y la escala en las z la hemos ignorado.

Veamos un resultado animado de lo realizado hasta el momento:

Siguiendo los mismos pasos anteriores vamos a añadir el siguiente script a la propiedad de Opacity:

thisLayer.position[1] / (thisComp.height / 2) * 100;

Con esto logramos que cuando la posición en las y sea menor que la mitad del alto de la pantalla la capa adquiera menos opacidad y cuando sea mayor tendrá valores superiores a 100 por lo que será totalmente opaca, esto provocará un efecto mayor de profundidad. Veamos un ejemplo animado de esta última expresión:

Ahora viene la parte que demuestra la cantidad de trabajo que podemos ahorrarnos si hacemos más uso de las expresiones de JavaScript en After Effects. Vamos a duplicar 5 veces la capa de la imagen, para ello la señalamos y presionamos CTRL + D en Windows o ⌘ + D en Mac OS 5 veces hasta llegar a la cantidad deseada. Al duplicar las capas se duplicarán también los scripts contenidos en ellas. La primera capa es la original por lo tanto la dejaremos intacta, pero vamos a ir a los scripts relativos a Position de las demás capas y variaremos la variable incremento:

  • Capa 2: incremento = 60;
  • Capa 3: incremento = 120;
  • Capa 4: incremento = 180;
  • Capa 5: incremento = 240;
  • Capa 6: incremento = 300;

Lo que hemos hecho es crear una diferencia entre todas las capas de 60 grados, con solo cambiar el valor de estas variables este será el resultado:

Creo que este sencillo tutorial es suficiente para demostrar lo poderoso que puede resultar utilizar Expresiones de Javascript en After Effects para realizar animaciones complejas. Sé que hay muchos que no concuerdan con mi opinión y que al igual que varios colegas prefieren pasar de estas “cosas de friquis” y hacer todo a mano, pero sé que hay muchos otros a los cuales este tutorial servirá de ayuda y le abrirá nuevas puertas en el mundo de la animación digital.

Si quieren profundizar más en las Expresiones de Javascript en After Effects será de gran ayuda consultar la Referencia de lenguaje de expresión.

Descarga el proyecto

Descarga el proyecto para que puedas seguir el tutorial paso a paso.

Share on FacebookTweet about this on TwitterShare on Google+Share on LinkedInShare on StumbleUpon

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Puedes situar fragmentos de código dentro de etiquetas <pre></pre> y código HTML o XML entre etiquetas <xmp></xmp>.

Time limit is exhausted. Please reload CAPTCHA.