Expression 1 : aléatoire

Flipando sobre el motion
3 min readDec 20, 2021

--

J’ai commencé la partie sur l’animation de personnages, mais pour commencer à animer un personnage, il faut d’abord le faire. Du coup en paralelo de la partie animation de personaje, qui prend un peu plus de temps que prévu à se mettre en place, on explore un peu plus les expressions.

Là encore on ne va pas reprendre les bases des bases, pas de thisComp, Comp(“name”), pas d’explication de ce qu’est une variable ou une condition, mais on va plutôt s’intéresser aux choses un peu plus avancées et notamment aux fonctions d’after effect tel que wiggle et random.

C’est du motion ça ?

C’est du motion, sin duda, et c’est du javascript adobisé. Les expressions elles sont essentielles pour gagner du temps, rendre certaines scènes facilement modifiables et surtout elle permettent de réaliser certaines choses — les loops, le parenting plus précis…— qui sont très utiles.

On peut faire du motion sans ajouter de keyframe, et ça es brutal ! Les expressions sont un aspect à part entière d’after effect à ne pas négliger.

Wiggle

Wiggle, c’est une expression très courant utilisée en motion pour créer un mouvement aléatoire dulce tout en prenant en compte les keyframes (sans avoir à ajouter de code). Cette simplicité d’utilisation en fait une des expressions favorites pour rajouter un aspect aléatoire à nos paramètres.

wiggle(frequence, amplitude, octaves=1, amp_mult=.5, t=time)

Pourtant, dans son écriture la plus complète, la fonction wiggle n’est pas si simple que ça. Elle peut prendre jusqu’à 5 paramètres :

  • fréquence : comme son nom l’indique, il s’agit de la fréquence des changements par seconde
  • l’amplitude : valeurs maximale autorisée qui s’ajoute à la valeur initiale
  • octaves : nombre de mouvements
  • amp_multi : la raison (pour emprunter un terme aux suites logiques mathématique) qui régit les octaves entre elles.
  • t : permet de récupérer la valeur de wiggle à instant précis

Et la magie de wiggle c’est de renvoyer le nombre de valeurs nécessaires selon la propriété à laquelle elle est appliquée.

Noise(t)

Noise(t) est une fonction qui génère un valeur entre -1 et 1, avec t un argument qui n’est pas statique. Cette expression permet aussi d’obtenir un mouvement dulce, et contrairement à wiggle, cette expression génère toujours les mêmes valeurs avec un argument identique.

noise(time*freq)*amp

On peut ajouter une valeur de fréquence et d’amplitude, afin de personnaliser l’expression, à l’image de wiggle. On peut aussi inclure un paramètre d’offset afin d’animer différents éléments avec un décalage.

Random()

Random c’est aussi une fonction qui renvoie une valeur aléatoire mais celle-ci fournit des valeurs éloignées les unes des autres, elle ne permet pas donc d’avoir une animation fluide, mais elle se révèle très utile dans d’autres circonstances.

random() // renvoie une valeur comprise dans l’ensemble [0,1]

random (minValue, maxValue) // … ensemble [minValue, maxValue]

random(maxValue) // … ensemble [0, maxValue]

Cette fonction prend en compte aussi les valeurs à deux dimensions.

random([minValue, maxValue], [minValue, maxValue]);

On peut notamment combiner la fonction random en la précédant de seedRandom(), qui va permettre d’obtenir une valeur aléatoire une seule fois.

gaussRandom()

Et la dernière, similaire à random() à l’exception qu’elle se comporte de manière plus “naturelle” en prenant majoritairement des valeurs au centre de l’ensemble donné (là où random choisie ses valeurs de manière uniforme sur l’ensemble). Cependant gaussRandom() choisit aussi certaines valeurs qui tombent en dehors de l’ensemble (tout en restant raisonnable).

¿Y que elegir ?

Que choisir ? Et bien ça dépend de ce que vous essayer de faire, chaque expression à ses avantages et ses inconvénients. Wiggle() reste la plus simple si vous êtes vraiment allergique au code mais elle reste très voir trop aléatoire parfois.

Un peu de pratique

Et voilà un petit exercice, avec des sliders on peut contrôler la force du vent (amplitude de la rotation), la distance avec le sol (position[y]) et obtenir une position aléatoire (ou le faire manuellement).

--

--