Aide pour After Effect, techniques, expressions.

vendredi 18 février 2011

composition 2d en 3d

Oui je sais, une éternité sans post... C'est ainsi.
Petite astuce du jour. Vous avez une photographie, vous avez découpé différentes parties (1er plan, 2ème plan...), et voulez bouger votre caméra pour que l'on s'aperçoive que les différents éléments de la photo sont sur des plans différents.

Comme ça, ça n'a pas l'air bien compliqué, le truc, c'est que si on place les plans sur différentes valeurs de Z, ils n'auront plus le bon rapport de taille entre eux. Nous allons remédier à cela.

Comme tous ces calques seront en 3d, et que cette impression de 3d ne va apparaître que lorsque la caméra va se déplacer, il faut commencer par orienter nos calques dans le cas où la caméra ne serait pas face aux calques :

Donc dans l'orientation des calques :

a=thisComp.layer("Caméra 1").transform.position.valueAtTime(0);
lookAt(position,a)

Maintenant, pour pouvoir déplacer les calques sur l'axe Z de la caméra :
Créer un paramètre glissière sur le calque que vous nommerez "distance camera"

Puis, dans la position :

cam=thisComp.layer("Caméra 1").transform.position.valueAtTime(0);
V=sub(position,cam);
dist=effect("distance camera")("Curseur")/100;
value+V*dist

J'ai déjà expliqué tout ça, donc je ne m'attarde pas. Juste au sujet de "dist", j'ai divisé la valeur par 100 car notre vecteur doit être multiplié par 1 ou -1 pour que le calque soit collé à la caméra ou 2 fois plus loin. Le paramètre glissière sera ainsi plus simple à utiliser, et ça va nous aider pour l'échelle.

Voilà, vous pouvez tester, votre calque se déplace bien sur l'axe de la profondeur de la caméra quand vous modifiez le paramètre glissière.

Passons à l'échelle :
Quand le paramètre glissière est à 0, notre objet est à la bonne taille, son échelle est donc bien de 100. Si notre calque est collé à la caméra, il doit théoriquement avoir une échelle de 0. Si le paramètre glissière vaut 100, le calque sera donc 2 fois plus loin, il doit donc être 2 fois plus gros, etc.

On a donc :

dist=effect("distance camera")("Curseur");

s=dist+100;
[s,s,s]

Et voilà, c'est tout.