Comunidad de diseño web y desarrollo en internet

Crear efectos en After Effects con Expresiones Javascript

El tema que vamos a tratar es bastante polémico, debido a que nosotros los diseñadores tendemos a discriminar todo lo posible las soluciones en las que tengamos que escribir al menos una línea de código siempre y cuando la solución se pueda realizar de una manera digamos un tanto más técnica.

Tratándose de un programa que especificamente ha sido creado para realizar animaciones y añadir efectos a nuestros videos, muchos diseñadores tienen la opinión que es una excentricidad utilizar Expresiones Javascript para realizar animaciones con After Effects. El problema real es que, cuando se trata de una animación sumamente 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, pero cuando necesitamos animar numerosos objetos y que estos cambien sus propiedades dependiendo de ciertas condiciones y parámetros se tornaría demasiado engorroso hacer la animación a mano, ya que tendríamos que realizar complejos cálculos y nunca quedaría tan exacto como cuando el movimiento es calculado por una Expresión.

Para comenzar crearemos una nueva composición:

Le pondremos de nombre javascript

En advanced escogeremos de Shutter Angle 360

Ahora crearemos un nuevo sólido (CTRL+Y) y le ponemos de nombre Cuadro

Marcamos las propiedades de "Motion Blur" y "3D Layer" del sólido que hemos creado

Ahora desplegaremos las propiedades del sólido e iremos directamente a "Transform>Position", aquí presionando la tecla ALT daremos un click en el icono de Time hasta que veamos que se haya abierto un espacio con el texto "transform.position". En este espacio es donde vamos a escribir las Expresiones Javascript:

Como la posición está compuesta por tres parámetros x, y e z, al final de todo nuestro script debemos culminar con un arreglo de tres valores donde cada uno de ellos representará la posición en el mismo orden de los parámetros, en caso de que nuestro arreglo no contenga la cantidad de parámetros requeridos, After Effects asumirá que los valores omitidos equivalen a cero. En 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 arreglo.

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

incremento = 0; 
angle = time * 100 + incremento; 
radian = degreesToRadians(angle); 
radio = 250; 
x = thisComp.width / 2 + Math.cos(radian) * radio; 
y = thisComp.height / 2 + Math.sin(radian) * radio * .5; 
 
[x,y] 
  • 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(radian): Función matemática para calcular el coseno de un ángulo en radianes.
  • Math.sin(radian): Función matemática para calcular el seno de un ángulo en radianes.
  • degreesToRadians(grados): Función matemática para convertir un ángulo de grados a radianes.

Como pueden notar la fórmula que hemos creado, lo que hace es calcular las coordenadas en x e y de una circunferencia de radio 250, 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, pero si esta llegara a aumentarse, aumenta también la variable angle.

Nos debe quedar algo así:

Ahora movámonos por la línea de tiempo para observar como nuestro sólido va adquiriendo nuevas posiciones describiendo una circunferencia, es algo que si quisiéramos hacerlo animado nos costaría algo más de esfuerzo. Además si deseo que se mueva en un radio mayor sólo se tendría que cambiar un número, mientras que por interpolaciones tendríamos que volver a realizar la animación.

Pero podemos seguir añadiendo expresiones a otras propiedades. Vamos a ir a la propiedad de Scale y para calcular el valor de esta vamos a tomar valores de la posición del sólido. 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] / 15; 
 
[sc, sc, 10] 
  • hisLayer: Objeto global que representa al layer que contiene la expresión.
  • position: Propiedad del layer la cual devuelve un arreglo con cada valor de la posición.

Pueden observar que lo que hemos hecho es tomar el valor de la posición en las y, dividirlo por 15 y el valor resultante se lo asignamos a la escala en las x e y, pero a la escala en las z le hemos puesto un valor fijo de 10.

Veamos un resultado animado de lo realizado hasta el momento:

De la misma manera añadiremos otro 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 el centro de la pantalla entonces nuestro sólido adquiera menos opacidad y cuando sea mayor todo lo contrario.

Seguidamente seleccionaremos el sólido y le aplicaremos un efecto de blur (Effect > Blur & Sharpen > Gausian Blur), nos aparecerá en las propiedades una nueva sección de Effects:

Abrimos la sección de Effects e iremos a la propiedad Gausian Blur > Blurriness y en esta situaremos el siguiente script:

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

El anterior script hace lo contrario del script de la opacidad, ahora cuando la posición en las y sea menor que el centro de la pantalla, el layer adquirirá mayor nivel de blur y cuando sea menor todo lo contrario.

Veamos un ejemplo animado de lo que hemos realizado:

Ahora viene la parte que demuestra la cantidad de trabajo que podríamos ahorrar si utilizamos este método. Vamos a duplicar 5 veces el layer Cuadro, para ello lo señalamos y presionamos CTRL+D 5 veces hasta llegar a la cantidad deseada. Al duplicar los layers estos duplicarán también los scripts contenidos en ellos, bueno el layer 1 es el original por lo tanto lo dejaremos intacto, pero vamos a ir a los scripts relativos a Position de los demás layers y variaremos la variable incremento:

  • Layer2: incremento = 60;
  • Layer3: incremento = 120;
  • Layer4: incremento = 180;
  • Layer5: incremento = 240;
  • Layer6: incremento = 300;

Como pueden ver estamos creando una diferencia entre todos los sólidos de 60 grados, con solo cambiar el valor de estas variables este será el resultado:

Creo que este sencillo experimento es suficiente muestra de lo poderoso que puede resultar utilizar Expresiones Javascript en After Effects para realizar complejas animaciones, se que hay muchos que no concuerdan con mi opinión y que al igual que varios colegas prefieren hacer todo a mano, pero se que hay muchos otros a los cuales este tip servirá de ayuda y le abrirá nuevas puertas en el mundo de la animación digital.

Si quieren profundizar más en las Expresiones Javascript de After Effects será de gran ayuda consultar After Effects expression elements reference.

Más adelante publicaré otros tips referentes a este tema, donde profundizaremos más en este método y realizaremos ejemplos más específicos.

¿Sabes SQL? ¿No-SQL? Aprende MySQL, PostgreSQL, MongoDB, Redis y más con el Curso Profesional de Bases de Datos que empieza el martes, en vivo.

Publica tu comentario

El autor de este artículo ha cerrado los comentarios. Si tienes preguntas o comentarios, puedes hacerlos en el foro

Entra al foro y participa en la discusión

o puedes...

¿Estás registrado en Cristalab y quieres
publicar tu URL y avatar?

¿No estás registrado aún pero quieres hacerlo antes de publicar tu comentario?

Registrate