Aide pour After Effect, techniques, expressions.

mardi 25 mars 2014

Laissez-moi là

Bonjour à tous.

Cela fait très longtemps que rien n'a été écrit sur ce blog, non pas par manque d'envie, mais par manque de contenu. En effet, en général un article sort de terre quand un travail demande de trouver une nouvelle astuce. Et cela faisant donc longtemps que je n'avais pas du remettre un peu les mains dans le cambouis.

Je reviens donc avec une petite astuce pour, en quelque sorte, animer un lien de position.
En d'autre terme, c'est comme si on coupait un lien de parent-enfant entre 2 objets, mais uniquement pour la position.


L'idée est la suivante :
-suis la même position qu'un autre calque, plus un décalage spatial si nécessaire.
-Si on te dit de ne plus avoir ce lien, garde la dernière position que tu avais avant qu'on t'ait dit d'arrêter.

Voilà en gros comment faire :

On a 2 carrés, le rouge est le parent, le vert est l'enfant. Attention !! Il ne faut pas créer de lien de parenté !

Tout se passe donc sur le carré vert.
On rajoute à ce dernier un modificateur "Paramètre case", qui permet d'avoir une value intégrale (entière) de 0 (non) ou de 1 (oui). Appelons le "oui non".
Quand la valeur est égale à 0, le carré ne suivra pas, quand la valeur est égale à 1, il le suit.

On ouvre la position du carré vert, et c'est parti :

target=thisComp.layer("Parent");
I=effect("oui non")("Case");

"Case", c'est ainsi que j'ai nommé mon effet "Paramètre case".

Maintenant, on va chercher la clef "case" la plus proche de nous.

N=I.nearestKey(time);
Ni=N.index;

C'est assez simple, on a créé une autre variable Ni qui contient l'index de la clef la plus proche.

if ( N.time>time) { Ni=Ni-1};
Ngood=I.key(Ni);

Grace à ces 2 lignes, on fait en sorte que la clef la plus proche soit forcément celle qui soit derrière nous, c'est à dire dans le passé. Cela nous servira uniquement dans le cas où on souhaite recréer le lien de parent après l'avoir cassé.

Nt=Ngood.time;

Nt vaut donc la position de la clef "non" qui est juste derrière nous.

if ( I==1) { target.position + value }
else {
target.position.valueAtTime(Nt) +value }

Si I=oui, ajoute à ta positon la position du carré rouge.
Si I=non, ajoute à ta position la position du carré au moment où I t'as dit non.

REMARQUE : il faut mettre une clef "oui" ou "non" à l'image 0 de la composition, sinon ça bug.

Et voilà. C'est assez basique et écrit rapidement, je verrai comment cela peut être affiné.