Aller au contenu
Enter

Scripts After effect – Les rebonds

Par :
Philippine
-
Consultante Design & Innovation
-
Publié le :
24.7.20

OUTILS SCRIPTS CHEATSHEET

Scripts de Rebond pour After Effect

Soyons francs : il y a deux moyens d’animer un effet de rebond sous after effect. Ou bien vous savez réellement faire de l’animation et de manière assez intuitive vous positionnez les bonnes keyframes au bon endroit, ou bien vous utilisez un script qui calcule le rebond pour vous.

Sans surprise c’est cette deuxième solution qu’on vous propose. Les script suivants sont dévié de ceux créés par l’excellent Dan Ebberts de motionscript.com, ils sont très simples à utiliser pour peu que vous ayez quelques restes de vos cours de physique de collège. (Et là on en voit quelques uns qui transpirent, rassurez-vous en testant au petit bonheur quelques valeurs, ça marche aussi !)

Comment utiliser cet outil ?

En fait de scripts il y a deux scripts différents qui correspondent aux deux types de rebond : le rebond contre une surface et le rebond élastique (respectivement “Bounce back” et “Overshoot” en anglais)

rebond

Une fois votre type de rebond sélectionné, vous pouvez l’intégrer facilement dans after effect en cliquant sur le chronomètre de votre paramètre (position dans l’exemple ci-dessus) tout en maintenant la touche alt / option. Cela ouvrira un champs texte dans lequel vous pouvez coller le script et voilà ! Il ne vous reste plus qu’à animer votre élément, le rebond sera calculé automatiquement !

Et les cours de physique dans tout cela ? Et bien pour que votre rebond ait exactement le style qui vous intéresse vous allez devoir modifier légèrement quelques valeurs du script.

Le précieux code !

Rebond normal (Bounce back)

e = .7;

g = 5000;

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

Très simple : vous n’avez qu’à jouer avec deux valeur :

  • “g” qui représente la gravité (Plus elle est faible plus votre élément va “flotter” un peu comme un cosmonaute sur la lune)
  • “e” qui représenterait ici l’élasticité  de la surface (En gros est-ce qu’on se cogne contre un mur en pierre (E faible) ou un trampoline (E élevé)

Rebond elastique (Overshoot)

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);

amp = .05;

freq = 4.0;

decay = 8.0;

value + v*amp*Math.sin(freq*t*2*Math.PI)/Math.exp(decay*t);

}else{

value;

}

Ici ça se corse un peu puisque vous avez 3 valeurs a éditer :

  • “amp” qui correspond à l’amplitude des rebonds (Est-ce que votre élément dépasse son but de beaucoup ou non)
  • “freq” qui correspond à leur fréquence (Est-ce que votre élément dépasse et revient rapidement ou non)
  • “decay” qui indique la rapidité d’amortissement de l’oscillation (Plus il est élevé, moins vous aurez d’oscillations)

On est globalement sur une formule moins instinctive que la précédente mais en jouant avec vos trois variables vous devriez réussir à trouver votre bonheur.

Script gratuit after effect

À lire aussi

Veille digitale, regard d’experts et retours d’expérience