Aide pour After Effect, techniques, expressions.

lundi 18 janvier 2010

ombre et shine

Bonjour à tous.

Tout d'abord, sachez que ce post est la suite du précédent, donc si ce n'est déjà fait, lisez le, car il y a ici plein de choses que je ne réexplique pas.

Suite au post précédent, il est assez logique de voir comment continuer dans la même direction, à savoir que des éléments lumineux soient fonction d'angles.
Nous avons vu comment faire en sorte que la puissance volumétrique d'une lampe soit fonction de son angle par rapport à la caméra.

Voyons à présent le même principe appliqué aux ombres volumétrique.
Vous vous souvenez parfaitement du toComp et ses copains, que nous avions vu ici.
Nous y avions vu comment transformer un point 3d en un point 2, pour l'utiliser par exemple sur un effet.
Dans la 2ème vidéo, on voyait clairement que le "yes we can" avait un shine noir dont la source suivait les coordonnées 3d de la lampe.

Nous allons faire exactement la même chose, mais ce coup-ci, nous allons faire varier la puissance du shine selon l'angle de la lumière avec l'objet.
Et oui, c'est logique, le shine noir (l'ombre) donc, n'apparaît que quand la lumière éclaire l'objet.
De manière générale, il n'y a pas d'ombre sans lumière; un peu de philosophie ne fait jamais de mal.

On comprend donc qu'on va avoir le même type de travail :
Plus la lampe pointe l'objet, plus le shine noir est fort.














J'ai volontairement ici laissé la lampe sans l'effet que nous avons vu précédemment, pour isoler le problème du jour.
Comme vous le voyez, ça fonctionne, avec quelques limites dont je parlerai à la fin.

Voyons ce petit diagramme, qui ressemble un peu au précédent :












L'objet est en haut, la lumière tourne, et on comprend ce qui se passe :
Le shine noir apparaît bien uniquement quand le cône de la lumière passe sur l'objet. Tout ça va donc être fonction du cône de la lumière et de son angle.
J'ai volontairement placé un cercle trigo, car ça va nous servir.

Créez votre petite scène, vous ètes des grands maintenant.
Pour ce qui est du shine, il y a celui de Trapcode donc, mais d'autres éditeurs propose le même effet.
En ce qui concerne celui de Trapcode, il faudra donc mettre "one color" avec du noir ou une couleur foncée, mettre le tout en mode "Multiply".
Créons donc une expression pour "Shine opacity".

P=position;
L=thisComp.layer("Lumière 1");
la=L.position;
lb=L.pointOfInterest;
lv=sub(lb,la);

C'est la même chose que dans le post précédent, la seule différence est qu'on a remplacé la caméra par l'objet.
L'autre différence, c'est que dans l'autre post, on réglait la diminution de la puissance en jouant sur la courbe qui va de 0 à 1.
Ici, on va utiliser l'angle du cone de la lumière.

cone=Math.PI/2-degreesToRadians ( thisComp.layer("Lumière 1").lightOption.coneAngle)/2;

Hou la vilaine ligne !!
Alors, c'est quoi ce truc. C'est assez simple, je vous explique comment ça va se passer.
Nous allons garder nos vecteurs qui nous permettent d'avoir une valeur qui va de 0 à 1.
Ensuite, nous allons transformer cette valeur pour qu'elle aille de 0 à PI/2 (c'est à dire le "haut" du cercle). Nous somme obligéé d'introduire la notion d'angle puisque nous allons devoir en introduire un.
Nous allons donc uniquement travailler avec le quart supérieur droit du cercle trigo, qui va donc bien de 0 à PI/2, PI/2 correspondant à une lumière qui point exactement l'objet.
Sauf que ce coup-ci, quand l'angle vaut 0 (et donc que la lumière est parfaitement dos à l'objet), la valeur vaut bien 0, mais doit y rester pour tous les angles environnant.
Et oui, les seuls valeurs non nulles ne doivent apparaître que lorsque la valeur approche PI/2, et plus exactement Pi/2-angleDuCone.













Regardez le schéma, et notamment les angles arcs rose et vert (qui sont égaux)
Le vert représente l'angle du cône de la lumière. Le rose représente l'angle de la lumière avec l'objet.
On comprend bien que quand l'angle lumière-objet vaut PI/2-angleCone, la valeur du shine noir va commencer à augmenter.
Continuons :

P_la=normalize ( sub(la,P) );
delta=add(P_la,lvn);
val=1-length(delta)/2;

Même chose que dans le post précédent donc, à l'exception de la caméra remplacer par l'objet.
val varie bien de 0 à 1, faisons le varier de 0 à PI/2.

angle=linear(val,0,1,0,Math.PI/2);

Voilà qui est fait.
A présent, la dernière ligne :

ease(angle,cone,Math.PI/2,0,100);

cone est bien notre valeur minimum, qui correspond donc bien à 0, et Math.PI/2 à la valeur maximum.
L'utilisation du ease plutôt que du linear est subjective elle permet juste de lisser un peu les transition.

Vous pouvez bien entendu remplacer le 100 par une variable.

A présent, voyons les limites de l'effet.
Comme d'habitude, la seule chose qui est prise en compte est le point d'ancrage de l'objet (donc pour un texte, penser bien à ce qu'il soit centré, et non aligné à gauche ou à droite). Ca ne prend donc pas en compte la largeur ou la hauteur du calque, et l'effet sera appliqué à l'ensemble du calque, même s'il n'y a que la moitié du calque qui est dans la lumière.

A cause de cela, rajoutons un paramètre glissière au calque appelé "correction", et écrivons ceci :

P=position;
L=thisComp.layer("Lumière 1");
la=L.position;
lb=L.pointOfInterest;
lv=sub(lb,la);
lvn=normalize(lv);
cone=Math.PI/2-degreesToRadians ( thisComp.layer("Lumière 1").lightOption.coneAngle);
correction=degreesToRadians ( effect("correction")("Curseur"));

P_la=normalize ( sub(la,P) );
delta=add(P_la,lvn);
val=1-length(delta)/2;

angle=linear(val,0,1,0,Math.PI/2);
ease(angle,cone-correction,Math.PI/2,0,100);

Voilà, comme ça , vous pourrez virtuellement augmenter ou diminuer l'angle du cône, pour que la puissance du shine noir se maintienne sur un angle plus ou moins large par rapport à l'angle réel.

Aucun commentaire:

Enregistrer un commentaire