La scène se compose du mesh de la roue (mesh_result), du parent de la roue (le chassis du véhicule par exemple, ici appelé anim, car c'est ce groupe qui a reçu toutes les keyframes) et de deux groupes de rigging : grp_buffer et grp_dir (ces groupes servent a stocker de l'information et a calculer la rotation de la roue dans une expression en mel)
Notez que le grp_buffer est parenté au groupe anim, mais attention, sa propritétés d'héritage de position par rapport au parent a été supprimée. (attribut éditor: inhérit transform décoché)
Le résultat de la rotation de la roue sur son axe ne se voit que lorsque on joue l'animation avec la barre play anim. Lorsque l'on anime le cube vert (déplacements et rotations) il n'y a pas d’interaction avec la rotation de la roue, car il y a une expression sur l'axe de la roue qui utilise des fonctions qui ont besoin dêtre rafraîchies ( en effet elles n'agissent pas directement avec le mouvement du cube).
Le principe est relativement simple:
- On tient compte du rayon de la roue (ici: 0.435)
- On capture la position de la roue (mesh_result)
- On capture aussi un point pivot qui donne la direction vers laquelle va la roue (ici : grp_dir)
- On en déduit un vecteur de direction ( avec le dot product, on en déduit le sens de rotation de la roue)
- On connait la distance de parcours de la roue, car il y a un transform (le grp_buffer) duquel on connait la position à la frame précédente. De cette position, on fait la différence avec la position à la frame courante.
Et enfin, en utilisant la formule du calcule d'inverse de la circonférence, (circ = 2 * pi * rayon), on obtiens une valeur qu'on multiplie par le résultat du dot product (le sens de la rotation) par la distance parcourue. Et voila la roue suit le mouvement général du chassis.
Il faut terminer par bufferizer la vvaleur actuelle de la roue pour la frame suivante, du coup on stocke la position dans le grp_buffer, et c'est repartit.
Notez que la capture des positions de la roue, de la direction se fait en mode world, ainsi le systeme n'est pas dépendant de la position de la roue par rapport à son châssis.
Pour les 4 roues il suffit de répéter de rig 4 x, et le tour est joué. Ici le cube vert pourrait tout a fait être l'axe de direction d'une roue avant par exemple.
Mel Script:
Résultat: Voila le résultat de la réaction de la roue, ici le cube vert est animé en position et en rotation, c'est le parent de la roue et du système de rigging de la roue. Scene maya: rig_wheel.zip Si vous voyez que votre roue tourne dans le mauvais sens, il suffit de déplacer le grp_dir de l'autre coté de la roue, et c'est réglé. ( cet objet permet de calculer le sens de la rotation par dot product ) |
Pour garder la main sur l'animation automatique de la roue, il ne faut pas hésiter d'ajouter un transform intermédiaire pour donner des coups d'accélération supplémentaires, ou un attribut qui permet d’arrêter le système automatique, en effet on n'a pas toujours besoins d'avoir une animation sur la roue automatiquement. ... enjoy !
Aucun commentaire:
Enregistrer un commentaire