Beruflich Dokumente
Kultur Dokumente
Formation de DuDuF
http://formations.duduf.fr
duduf@duduf.com
I - Objets, Valeurs
Que peut-on manier avec les expressions ? Quels sont les types de valeurs ? Comment les utilise-t-on ?
En pratique : manier les outils de cration dexpressions, lier des proprits, crer des contrleurs.
II - Oprations
Variables, Oprations mathmatiques, additionner, multiplier, etc.
En pratique : Combiner plusieurs proprits, utiliser les fonctions mathmatiques...
III - Conditions
If, then, else
En pratique : automatiser des vnements, insrer des conditions.
IV - Fonctions
Fonctions prdfinies, fonctions cres
En pratique : Utiliser les fonctions After Effects, crer ses propres fonctions.
Ce document nest quun rsum, un pense-bte, de la formation dispense par Duduf. Il runit les principaux points
thoriques retenir sans tre exhaustif, et de nombreuses remarques, astuces pratiques et exemples concrets ny sont
pas prsents.
I - Objets, Valeurs
Adobe After Effects a un mode de fonctionnement trs proche du langage JavaScript, couramment utilis sur internet. Cest un langage de programmation orient objet . Lutilisation des expressions est intimement li ce mode de fonctionnement. Commenons donc par y jeter un oeil.
Un objet, cest quoi ?
Pour comprendre, prenons des exemples dobjets : composition, calque, chelle, rotation, flou...
Eh oui, un objet, cest tout ce quon peut manipuler dans une composition, et donc aussi avec les expressions.
Mais encore ?
Tous les objets sont classs de faon hirarchique : Le grade le plus lev est la composition,
le plus bas est le paramtre deffet.
On peut dire que les objets sont imbriqus les uns dans les autres, un peu comme des poupes russes.
Voici un exemple de quatre objets, et la hirarchie entre eux :
Composition
Calque
Transformation
Position
2/17
Marionnette
Filet
Dformation
Coin
Position
3/17
Affichage de la valeur : si
cest en rouge, cest le rsultat dune expression.
Bibliothque de fonctions.
4/17
Et la position ?
Essayons !
- Sur un calque, activez les expressions sur la position.
- Tapez 20 .
Ae, a ne marche pas, After me parle de dimensions...
Souvenez-vous, la position prend un tableau de valeurs !
Cest pour a quAfter Effects demande un rsultat de dimension 2 (un tableau deux valeurs) et pas
1!
- Entrez maintenant [20,20] .
Maintenant a fonctionne. Vous venez de dcouvrir comment entrer un tableau dans une expression, entre crochets, les valeurs spares par des virgules.
Mais, et les valeurs virgule alors ? comment les crire, si la virgule sert de sparateur entre
deux valeurs ?
Nous arrivons un point trs important : les dveloppeurs de After Effects sont amricains !
Les expressions sont donc en anglais et en anglais, les sparateurs sont des virgules, et les nombres
dcimaux scrivent avec un point ! Il va falloir sy faire...
Une constante cest bien, mais le but cest quand mme danimer...
Crons notre premire expression dont le rsultat change dans le temps ! Oui, cest juste a une
animation, un rsultat qui change en fonction de linstant.
La plus simple des expressions animes, cest le lien entre deux valeurs.
- Crez deux solides, dpliez leurs transformations.
- Activez les expressions sur lopacit du premier, et alors que le champ de saisie est actif, utilisez le
lasso pour pointer la valeur de lopacit du deuxime puis validez.
Lexpression ressemble alors thisComp.layer("Nom du Calque").transform.opacity .
On y retrouve la hirarchie des objets, et comment on les dsigne :
La composition thisComp qui montre la composition actuelle.
Le calque layer("Nom du Calque") que lon peut remplacer par layer(X) o X reprsente son
index.
La transformation, et lopacit (toujours en anglais).
Maintenant, si on anime lopacit du deuxime calque, le premier suit exactement la mme animation !
II - Oprations
Nous savons maintenant assigner une valeur et rcuprer la valeur dun autre objet. Cest dj
pratique, mais encore loin des possibilits des expressions. Il sera encore bien plus utile de pouvoir
associer plusieurs valeurs et raliser des calculs. Pour cela nous allons utiliser des oprateurs, pour
raliser des oprations entre diffrentes oprandes.
Un oprateur, cest le signe de lopration (+, -, =, etc.). Il y en a plein, pour faire plein de
choses.
Une oprande, cest llment sur lequel travaille loprateur (dans 2+2=4, les 2 et le 4 sont les
oprandes).
Commenons par les maths, niveau cole primaire.
Quatre oprations, quatre oprateurs : addition +, soustraction -, division /, multiplication *. Rien de bien sorcier... Une expression 20+30 donnera 50, 20*30 donnera 600.
Et puisque cest trop simple, ajoutons un cinquime oprateur, le modulo %. Il retourne le
reste de la division entire des deux oprandes. 10%8 donnera 2. 30%8 donnera 6.
Si on crit une opration plus de deux oprandes, cest comme sur le papier, il y a des priorits : *, /, % auront la priorit sur + et -. Et bien sr, si a ne nous plait pas, on peut ajouter
des parenthses. 2+2*4 donnera 10 et (2+2)*4 donnera 16. Toujours rien de bien sorcier, mais
revenons du plus concret...
Utiliser des expressions pour y mettre des valeurs que lon peut trouver avec une calculatrice,
ce nest pas trs utile. Mais remplaons nos oprandes numriques par des liens vers les valeurs
dautres objets...
- Crez trois solides, animez diffremment lopacit de deux dentre eux, et ajoutez une expression sur
le troisime.
- Liez la valeur dopacit du premier solide, ajoutez +, puis liez la valeur dopacit du deuxime solide. Vous obtenez une expression du type :
thisComp.layer("calque1").transform.opacity + thisComp.layer("calque2").transform.opacity
(on peut ajouter des espaces pour y voir plus clair, les espaces ninfluencent aucunement les expressions).
La valeur dopacit du troisime calque est donc la somme des deux autres, nimporte quel
moment dans le temps. L a commence devenir intressant.
Bibliothque de fonctions.
III - Conditions
Maintenant que nous savons manipuler toutes sortes de valeurs, les lier, les associer, calculer,
il ne reste plus que : A partir de l, change de sens ou encore Si je te met droite, devient transparent. Cest dire les conditions, if(){} else{}
Une seule condition.
Le principe est simple : on veut quun calque devienne transparent si il passe sur la droite de la
composition.
La syntaxe est la suivante :
if (condition) {ce qui se passe si la condition est remplie}
else {ce qui se passe si la condition nest pas remplie}
On mettra donc une expression dans lopacit :
if (transform.position[0] < thisComp.width/2) {100}
else {50}
Notons en passant thisComp.width : la largeur de la compo, en pixels, et le nouvel oprateur
infrieur < dont la priorit passe aprs *, /, %.
Nous allons dailleurs avoir besoin de toute une srie doprateurs de comparaison pour tablir
nos conditions. Les voici :
infrieur <
suprieur >
infrieur ou gal <=
suprieur ou gal >=
galit == ( ne pas confondre avec affectation =)
diffrence !=
Dans les effets/options pour expressions, le paramtre case permettra de crer un bouton pour
allumer ou teindre un calque par exemple :
if (effect("Paramtre case")("Case")==1) {100}
else {50}
La case vaut 1 si elle est coche, 0 si elle est dcoche...
www.cours-ofppt.com
IV - Fonctions
Nous savons maintenant tout faire avec les expressions ! Il ne manque que les fonctions, pour
les plus compliques des expressions, qui permettent daccder certaines proprits de After Effects,
certains calculs, ou encore de simplifier certaines oprations rptitives...
Cest quoi, une fonction ?
Nous en avons dj utilise une... souvenez vous de radianToDegrees(valeur) qui utilisait la
valeur et la convertissait en degrs. Cest a une fonction, cest le fait de prendre une entre ou plusieurs entres (ici la valeur, mais a peut tre des objets, des tableaux...), de faire un certain nombre
doprations avec ces entres, et den resortir (retourner on dit en programmation) quelque chose. Ici
en loccurence, la valeur convertie en degrs.
Il y en a de nombreuses toutes faites et prtes tre utilises dans After Effects, accessible
comme on la vu prcdemment par la bibliothque de fonctions. Chacune est dfinie par son nom,
puis entre parenthses, ses arguments (ce quon doit rentrer). (attention, il y a aussi de simples objets
dans la bibliothque, tout ce qui na rien entre parenthse...).
Nous allons en aborder trois trs utiles titre dexemples.
Wiggle
wiggle(freq, amp, octaves = 1, amp_mult = .5, t = time)
Cest une fonction qui cre une valeur qui varie dans le temps, selon une certaine frquence
et une certaine amplitude. On distingue deux types darguments : les obligatoires (freq et amp) et les
optionnels (les autres, reprables au signe =). Cest dire que dans lusage le plus courant de la
fonction, crire par exemple wiggle(15,20) est suffisant, les autres arguments sont remplacs par
ceux par dfaut. Cest donc exactement quivalent wiggle(15,20,1,.5,time).
Pour tester, essayez sur la position dun calque. On constate en passant que le type de valeur
que cre le wiggle est bien un tableau deux dimensions, puisque a fonctionne sur la position. En
fait, le wiggle sadapte la valeur en cours, et la variation se fait autour de la valeur existante.
freq : cest la frquence, en Hertz, autrement dit en nombre de changements par secondes,
laquelle la variation de valeur se fait. La vitesse du wiggle en quelque sorte.
amp : cest lamplitude du wiggle, sa force.
octave : cette valeur permet de rendre le wiggle fractal. Cest dire, plus simplement, de mettre un wiggle sur le wiggle. La valeur par dfaut 1, fait une variation correspondant la frquence et
lamplitude des deux premiers arguments, la valeur 2 ajoute par dessus une variation a une frquence
deux fois plus leve et une amplitude multiplie par le quatrime argument, amp_mult.
amp_mult : cette valeur doit tre comprise entre 0 et 1, cest le multiplicateur de lamplitude des
wiggles supplmentaires dfinis par loctave.
t : cette valeur dfinit comment le wiggle est gr dans le temps. La valeur par dfaut, time,
permet dutiliser le droulement logique de la timeline. Si lon entre une constante, le wiggle ne se
fait plus (il faut que cette valeur varie dans le temps). Si lon met par exemple time*2 ca revient
doubler la frquence. Si lon met time+2, a dcalle le wiggle de deux secondes dans le temps.
Length
length(point1, point2)
Cette fonction nest pas trs complique, mais trs utile. Les deux arguments sont des tableaux
deux ou trois dimensions, reprsentant des coordonnes. La fonction retourne la distance entre les
deux points. Elle permet par exemple de mesurer la distance entre une camra et le point dancrage
dun calque, permettant de faire varier lopacit ou la couleur du calque par rapport sa distance avec
la camra. Essayons, vous verrez quel point cest utile :
- Crez une camra, en position, mettez la valeur de Z 0.
- Crez un solide, mettez le en mode 3D, et mettez le en Z 1000 (ou -1000, suivant dans quel sens
pointe la camra)
- Dans lopacit du solide, mettez cette expression :
distance = length(thisComp.layer(Camera 1).transform.position,transform.position);
if(distance<1000) { distance/10 }
if(distance>1500) { 200-distance/15 }
if(1000<distance && distance<1500) { 100 }
Dplacez votre solide en Z, a se passe de commentaires...
toWorld
toWorld(vec, t = time)
Cette fonction a deux aspects trs utiles... Lun spatial, qui permet de convertir des coordonnes
pour quelles soient absolues, lautre temporel. Un exemple pour comprendre lutilit de la fonction :
- Crez un solide noir, appliquez-y leffet lumire parasite.
- Crez un objet nul.
- Avec une expression, liez le centre de la lumire parasite la position de lobjet nul, puis dplacez
cet objet nul.
- Jusque l, tout va bien. Cest mme pratique. Mais maintenant, crez un deuxime nul, et liez le
premier ce nouveau nul. Ah mince ! Regardez bien la valeur de la position de lobjet nul : elle change
quand vous le liez un autre objet, donc forcment, le centre de la lumire parasite adopte cette
nouvelle valeur ! Mais pourquoi ? Parce que dans After, les coordonnes de position sont donnes
par rapport au parent ! Si il ny a pas de parent, tout va bien, les coordonnes sont par rapport la
composition. Mais si il y a un parent, la position [0,0] se retrouve sur le point dancrage de ce parent... Cest la quintervient notre fonction toWorld. toWorld sutilise de la faon suivante : objet.
toWorld(coordonnes, t = time). Les coordonnes, ce sont les coordonnes ramener en coordonnes absolues. Lobjet, cest lobjet par rapport auquel les coordonnes avant convertion sont traites
(dans notre cas, le deuxime objet nul, parent du premier). Lusage est donc simple :
- Dans le centre de la lumire parasite mettez lexpression :
thisComp.layer(objet nul 2).toWorld(thisComp.layer(objet nul 1).transform.position)
toWorld sutilise de la faon suivante : objet.toWorld(coordonnes, t = time). Les coordonnes, ce sont les coordonnes ramener en coordonnes absolues. Lobjet, cest lobjet par rapport
auquel les coordonnes avant convertion sont traites (dans notre cas, le deuxime objet nul, parent
du premier). Lusage est donc simple :
- Dans le centre de la lumire parasite mettez lexpression :
thisComp.layer(objet nul 2).toWorld(thisComp.layer(objet nul 1).transform.position)
Maintenant tout fonctionne. Mais il faut avouer que ce nest pas trs pratique... Il faut savoir par
rapport quoi les coordonnes de position sont donnes, ce nest pas forcment vident. Par contre,
les coordonnes dun point dancrage sont toujours donnes par rapport son calque. Donc cest plus
facile de transformer les coordonnes du point dancrage en coordonnes absolu, plus besoin de se
soucier des liens entre les calques. Utilisons maintenant lexpression :
thisComp.layer("objet nul 1").toWorld(thisComp.layer("objet nul 1").transform.anchorPoint) et le tour
est jou !
Quant au deuxime argument, il permet de rcuprer des coordonnes un moment donn
(valeur en secondes). La valeur par dfaut time reprsente linstant courant.
Il y a donc plein de fonctions dans After, mais ne peut-on pas crer les notres ?
La cration de fonction est assez simple : il suffit dutiliser la syntaxe suivante :
function moyenne(argument1,argument2) {
A = argument1 + argument2;
return A/2 ;
}
Le mot return dfinit ce qui sera retourn par la fonction. Ici, le rsultat de lopration A/2.
Et lutilisation de la fonction ainsi cre se fait de la faon suivante :
moyenne(10,12), qui retournera la valeur 11.
Un exemple de fonction utile, revenons nos trois solides de la page 10 :
- Crez trois solides (dune taille plus petite que celle de la compo, pour bien voir leur position)
- Animez la position des deux premiers, et ajoutez lexpression suivante en position sur le troisime :
positionA = thisComp.layer(calque1).transform.position;
positionB = thisComp.layer(calque2).transform.position;
(positionA + positionB) / 2
On pourra remplacer cette expression par la suivante, maintenant quon connait toWorld :
positionA = thisComp.layer("calque1").toWorld(thisComp.layer("calque1").transform.anchorPoint);
positionB = thisComp.layer("calque2").toWorld(thisComp.layer("calque1").transform.anchorPoint);
(positionA + positionB) / 2
Ce qui fera fonctionner lexpression mme si les calques ont des liens. Et en crant une fonction
on pourra encore simplifier cette expression :
function positionAbsolue(calque) {
calque.toWorld(calque.transform.anchorPoint);
}
(positionAbsolue(thisComp.layer("calque1"))+ positionAbsolue(thisComp.layer("calque2"))) / 2
Ce qui est trs utile si on doit manipuler de nombreux calques...
ANNEXE
Liste des oprateurs :
Calcul :
+ addition
- soustraction
/ division
* multiplication
% modulo
= affectation
Affectation :
Comparaison :
+= addition
-= soustraction
/= division
*= multiplication
%= modulo
Incrmentation :
++ addition
-- soustraction
Logiques :
|| ou
&& et
! ngation
[]
++
/
>
!=
||
+=
!
%
<=
>=
-=
*=
/=
%=
,
priorit minimale