À lire aussi
Veille digitale, regard d’experts et retours d’expérience
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 !)
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)
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 !
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 :
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 :
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.