L'objectif de cet exemple est de l'appliquer à un personnage complet pour copier en symétrie une pose, ou pour l'inverser.
Dans maya, il y a une série de nodes qui permettent le calcul martriciel, certains permettent de décomposer une matrice pour appliquer le résultat sur un transform. Tous les transforms permettent d'utiliser le résultat de le matrice, leur matrice inverse, le world_matrix (matrice globale), et la world_inverse matrix. C'est ce qui est utilisé dans cet exemple.
Notes:
La première partie de la vidéo, montre le système appliqué uniquement à la position d'un objet.
Les connections de type matricielles utilisent les matrices worlds comme référence.
Le node matrix_4x4_mirror est une matrice 4x4, qui donne le sens du miroir.
Dans maya, les matrices 4x4 sont indexées comme suit:
00 01 02 03
10 11 12 13
20 21 22 23
30 31 32 33
Seules les 3 colonnes sont utilisées
pour modifier les rotations, le scale, et les positions.
pour modifier les rotations, le scale, et les positions.
Ci dessous, voila comment sont réparties les modifications dans la matrice quand on agit sur les positions, les rotations ou le scale.
00 01 02 03
10 11 12 13
20 21 22 23
30 31 32 33
les positions X,Y,Z
00 01 02 03
10 11 12 13
20 21 22 23
30 31 32 33
les rotations X
00 01 02 03
10 11 12 13
20 21 22 23
30 31 32 33
les rotations Y
00 01 02 03
10 11 12 13
20 21 22 23
30 31 32 33
les rotations Z
00 01 02 03
10 11 12 13
20 21 22 23
30 31 32 33
les scales X,Y,Z
Matrice identité: c'est celle qui n'influence rien (elle est neutre)
01 00 00 00
00 01 00 00
00 00 01 00
00 00 00 01
Le node matrix_4x4_mirror est un miroir en - X.
-1 00 00 00
00 01 00 00
00 00 01 00
00 00 00 01
Le node multMatrix_mirror, multiplie les matrices entres elles pour obtenir une résultat: des positions world pour le point 2. La multiplication matricielle n'est pas commutative, donc l'ordre des connections est important.
Le node decompose_mirror_point2, décompose la matrice en positions et en rotations. Pour cet exemple ce node ne transmet que les positions.
On double la matrice world du symetry_plane pour que la matrice soit appliquée 2x sur l'objet target. S'il ne l'était qu'une seule fois, il n'y aurait qu'un seul côté du symetry plane qui serait plis en compte.
Pour la seconde partie de la vidéo, le principe reste le même, sauf qu'on ajoute 2 notions supplémentaires:
- la rotation
- la hiérarchie entre deux objets (le parentage)
La rotation:
Le node matrix_4x4_parent_offset_180_deg_Y, retourne l'objet de 180°.
C'est nécessaire, car la matrice en mirroir -1, retourne tout de l'autre coté, et donc fait tourner les objets de 180° sur la rotation Y.
-1 00 00 00
00 01 00 00
00 00 -1 00
00 00 00 01
matrice sur laquelle on applique 180° sur l'axe des Y.
La hiérarchie:
Dans le premier exemple, il n'y avait pas de hiérarchie, donc tous les objets avaient un résultat world.
le node de child_decomposition_matrix, ne permet pas de choisir d'exporter une position local ou world.
Dès lors, il faut ajouter une connection de type inverse world matrix de l'objet parent_TARGET à la multiplication des matrices de l'objet enfant.
Ajouter la matrice inverse global de l'objet transform parent au calcul de multiplication de matrice, revient à soustraire au résultat global (world), la matrice globale (world) de l'objet parent et rend ainsi le résultat local, ce qui est nécessaire pour décomposer la matrice en positions et rotations locales.
Le résultat est appliqué à l'objet enfant symétrique, le transform child_TARGET.
Ainsi le résultat est une position et une rotation locale pour l'objet child_TARGET.
Aucun commentaire:
Enregistrer un commentaire