Animation sur la base d’expressions dans 3D studio
Max
(Mécanisme d'horloge)
Il s’agira dans cet article de créer une animation de mouvements compliqués dans 3D Studio Max.
Il arrive
souvent que le mouvement d’un objet soit lié avec le mouvement d’un autre objet,
et en plus cette liaison peut être exprimée exactement par une formule ou
construite sur la base d’un algorithme déterminé. Par exemple, le mouvement des
aiguilles d’une montre. On peut présenter cette liaison ainsi :
1. Un tour
entier de l’aiguille des secondes ® mouvement de l’aiguille des minutes d’un
cran (1 minute)
2. Un tour entier de l’aiguille des minutes ® mouvement de
l’aiguille des heures d’un cran (1 heure)
Il est clair
qu’animer physiquement de façon précise n’est pratiquement pas possible par une
animation simple par images-clé. Il faudra dans chaque image-clé donner un angle
précis de rotation à chaque aiguille et prendre également en compte des
paramètres tels que le nombre d’images par seconde (frame rate) pour ce moment
précis.
Pour résoudre ce problème, on peut utiliser deux puissantes
possibilités de 3D Studio Max pour construire les dépendances mathématiques des
paramètres des objets à animer : le contrôleur Expression, ou le langage
incorporé Max Script. La deuxième possibilité permet, en plus de la construction
des liens entre les paramètres des différents objets, de programmer une
interface utilisateur. Dans une telle interface que j’ai réalisée, l’utilisateur
peut positionner les aiguilles de la montre, en introduisant heures, minutes et
secondes, et établir la vitesse de mouvement de la montre :vitesse normale (on
peut comparer leur mouvement avec des montres réelles, si bien sûr elles
marchent bien), accélérer ou ralentir le mouvement, indiquer le sens de rotation
des aiguilles, etc.
Dans la suite de cet article, on envisagera la première
méthode, la plus simple, basée sur l’utilisation du contrôleur
Expression.
Le contrôleur est un module de
programme utilisant un algorithme déterminé qui permet d’une manière ou l’autre
de gérer les paramètres pour lesquels on le destine. Pas très clair ? Je pense
qu’en pratique ce sera plus clair.
Au début,
modelez la montre. Celui qui sait faire un réveil et des aiguilles peut passer
directement à la description de l’animation, et moi je continue…
Le réveil,
l’horloge, la montre, ici votre fantaisie n’est pas limitée. J’ai construit mon
réveil dans la fenêtre Top (vue de dessus) très vite, en utilisant les
primitives : cônes, cylindres, sphères (image 1)
Maintenant,
modelons le cadran. Procédons comme suit :
1. D’abord composons Text, cet
instrument se trouve dans le menu Splines dans Shapes (image 2)
2. Dans le
champ Text, composez 12, corrigez la taille (paramètre Size)
3. Cliquez dans
la fenêtre de travail, votre texte apparaîtra
4. Après ces manipulations,
passez dans la fenêtre Modify, dans l’onglet Modifiers, trouvez le bouton
Extrude et dans l’onglet Paramètres qui apparaît, choisissez une valeur pour
Amount (profondeur d’extrusion) ; j’ai choisi 4. Cela crée des chiffres en
relief.
5. Placez le chiffre 12 à l’endroit du cadran pour indiquer 12
heures.
Après, il faut
placer les autres chiffres sur le cadran. Faisons comme suit :
1.
Sélectionnez le chiffre 12 dans la fenêtre de travail. J’utilise pour cela la
fenêtre Top.
2. Passez dans le menu Hierarchy (image 3)
3. Pressez le
bouton Affect Pivot Only (Agir sur un point géométrique) et transférer le centre
géométrique au centre du cadran
Le centre géométrique est le point où se
croisent les axes des coordonnées d’un objet, à partir desquels s’effectuent les
opérations de translation, de rotation et de changement d’échelle
4. Cliquez
sur le bouton Array, choisissez les paramètres. Dans la section Incremental dans
le champ au croisement de la ligne Rotate et de la colonne Z, introduisez 300.
C’est l’angle de rotation de copie d’un chiffre par rapport à l’autre pour les
disposer régulièrement sur le cercle.
5. Pour changer le chiffre, passez
dans le menu Modify et choisissez Text Stack – c’est une liste
des modificateurs appliqués à l’objet, et qui se trouve dans le menu Modifier
Stack.
6. On a obtenu des chiffres tournés vers le centre. Pour les
retourner, allez dans le menu Hierarchy, utilisez le bouton Reset, cela
déplacera le centre géométrique de l’objet du centre du cadran au centre de
l’objet. Une fois les chiffres achevés, on peut les regrouper par la commande
Group dans le menu du même nom.
Après, il faut dessiner les aiguilles : celle
des heures, celle des minutes et celle des secondes. Pour faire ces aiguilles,
utilisez les courbes et les extrusions. Vous savez déjà comment trouver les
outils pour créer les courbes, utilisez l’outil Line et dessinez les aiguilles.
Les explications pour le travail avec les courbes exigeraient beaucoup de temps,
c’est pourquoi je compte sur vos connaissances de 3D Studio Max. J’ajouterai
seulement qu’on peut trouver le matériel nécessaire dans l’aide :
Menu Help ®
référence en ligne ® menu Contents ® command panels ® modifier panel ® Modifiers
® Edition/modelage explicite ® Spline éditable
Pour faire des aiguilles en
volume, choisissez une spline et extrudez-la comme vous avez fait avec le texte.
Transférez le centre géométrique des aiguilles au centre du cadran, comme nous
avons fait avec le texte. Appelez l’aiguille des secondes A_Sec, celle des
minutes A_Min, et celle des heures A_Heur. Cela permettra de les retrouver plus
tard.
Hourra ! Et maintenant l’animation proprement dite.
Allez dans le
rédacteur Track View ® Ouvrir Track View ou appuyez sur le bouton sur le
panel des instruments.
Le rédacteur Track View sert à gérer l’animation, les
clés, les séquences, etc. L’interface du rédacteur rappelle l’explorateur
Windows, sauf que dans l’explorateur Windows on travaille avec des dossiers, et
dans le Rédacteur avec des objets et leurs paramètres.
1.Ouvrez toutes les branches de l’objet A_Sec (aiguille des secondes) jusqu’au nœud Transform (dessin 4)
2. Choisissez
la branche Rotation. D’office, toutes les opérations de rotation sont gérées par
le contrôleur TCB Rotation. Ce contrôleur est basé sur l’outil mathématique des
quaternions et ne permet pas de gérer des courbes fonctionnelles pour les
coordonnées X, Y, Z. Ce contrôleur ne convient pas pour gérer la rotation de
l’aiguille parce qu’il faut avoir accès à une coordonnée séparée de la rotation
de l’aiguille. c’est pourquoi le paramètre de rotation doit être géré par le
contrôleur qui possède en sortie trois coordonnées. Ce contrôleur s’appelle
Euler XYZ.
3. Choisissez la branche Rotation et
cliquez sur le bouton , la liste des contrôleurs accessibles apparaît. Choisissez dans
la liste Euler XYZ et cliquez OK. Remarquez que la branche Rotation a des
rameaux composés des trois coordonnées (dessin 5). Maintenant on peut travailler
avec n’importe lequel.
4. Choisissez
la branche Z Rotation et, de la même manière que ci-dessus, nommez le contrôleur
Float Expression pour gérer la rotation sur l’axe Z. Comme mentionné plus haut,
ce contrôleur permet de gérer la rotation selon les désirs de l’utilisateur.
5.Cliquez sur la branche Z Rotation avec le bouton droit de la souris et
choisissez dans le menu Propriétés. La fenêtre du contrôleur Float Expression
apparaît ; ce contrôleur sert directement à introduire les expressions
nécessaires, à créer les variables et leurs liaisons avec les paramètres des
objets de la scène (dessin 6) .
Continuons de travailler avec l’aiguille des
secondes (objet A_Sec). Nous avons commencé par cette aiguille, car elle se
trouve à la base de la liaison de la transmission du mouvement (cf schéma au
début de l’article)
6.Un cercle entier comprend 360°, donc en une seconde
l’aiguille doit bouger de 360/60=6°. Pour établir la liaison du mouvement de
l’aiguille avec le temps réel, il faut utiliser la variable standard S qui
exprime le temps en secondes. L’expression pour le mouvement de l’aiguille sera
le suivant : 6*S
7.Cette
expression gère la rotation exprimée en degrés, mais le contrôleur travaille en
radiants. Pour transformer les degrés en radiants, il faut utiliser la fonction
degToRad. Finalement, dans le champ Expression, il faut introduire la ligne
suivante :
degToRad (6*S).
N’oubliez pas que le contrôleur est sensible au
registre, il faut introduire l’expression comme indiqué ici, sinon il apparaîtra
plus tard un message d’erreur.
8.Si on clique sur le bouton Evaluer et si on
entre dans la fenêtre de travail et reproduit l’animation , alors on
remarque que la rotation s’effectue dans le sens contraire aux aiguilles d’une
montre. Pour corriger ce défaut, il faut mettre le signe moins devant
l’expression. L’expression finale est : -degToRad(6*S).
9.Cliquez sur le
bouton Evaluate pour appliquer l’expression et effectuer l’animation
;
Maintenant, donnons l’algorithme pour l’animation de l’aiguille des minutes
(A_min).
Passez dans l’arborescence dans la partie gauche du rédacteur de
track à l’objet A_min.
1. Répétez les
opérations des contrôleurs déjà décrites ci-dessus pour l’aiguille des
secondes.
2. Dans la fenêtre du contrôleur Expression dans le champ Name,
composez le nom de la variable seconds, mettez l’opérateur Scalar et appuyez sur
le bouton Create, la variable apparaîtra dans la liste Scalars. Après avoir créé
la variable, choisissez la dans la liste Scalars et cliquez sur le bouton Assign
to Controller. La fenêtre Track View Pick s’ouvre, et dans cette fenêtre
parcourez l’arborescence Objets ® A_Sec ® Transform ® Rotation ® Z Rotation,
cliquez OK. Maintenant la variable secondes prendra la valeur de l’angle de
rotation de l’aiguille des secondes en radiants. Remarquez que l’utilisation de
la fonction DegToRad n’est plus nécessaire.
3. Si vous avez tout fait
correctement, la variable secondes prend la valeur de l’angle de rotation de
l’aiguille des secondes, et on peut l’utiliser ainsi dans l’expression pour
l’aiguille des minutes : secondes/60. La division par 60 provoque le
ralentissement de l’aiguille exactement 60 fois, ce qui correspond bien à la
réalité, puisque l’aiguille des minutes ne bouge d’un cran qu’après un tour
complet de cadran par l’aiguille des secondes.
4. Pour l’aiguille des heures,
la variable prend la forme minutes/12.
Il ne vaut sans doute pas la peine
d’expliquer comment on a construit cette expression, le schéma est identique à
celui du paragraphe précédent. Remarquons seulement que la variable minutes doit
être liée à la rotation de l’aiguille des minutes. Pour vérifier que tout marche
bien, vous pouvez passer une heure devant l’ordinateur. Mais il est peu probable
que vous puissiez supporter ce martyre, c’est pourquoi vous serez obligé
d’accélérer manuellement le mouvement des aiguilles. Pour changer la vitesse de
rotation de l’aiguille des heures, il faut accélérer celle des minutes, qui à
son tour est liée à l’aiguille des secondes. Dans le schéma proposé, tous les
objets actifs sont liés, et il faut seulement accélérer la rotation de
l’aiguille des secondes pour que tous les changements suivants se reproduisent
automatiquement.
5. Pour donner l’accélération nécessaire, créez la variable
accélérer.
6. Dans la fenêtre du contrôleur Expresssion de l’aiguille des
secondes, dans le champ Name, composez le nom de la variante accélérer, mettez
l’opérateur Scalar et appuyez sur le bouton Créer, la variable apparaîtra dans
la liste Scalars. Dans cette liste choisissez la et appuyez sur le bouton Assign
to Constant, dans la fenêtre apparue introduisez le coefficient d’accélération,
par exemple 60. En une minute, l’aiguille des minutes va accomplir un tour
complet, puisqu’elle va bouger à la vitesse de l’aiguille des secondes, et cette
dernière va bouger chaotiquement, puisque sa vitesse augmente 60 fois.
Introduisez la variable dans l’expression :
DegToRad(6*S*accélérer).
Appuyez obligatoirement sur le bouton Evaluer et n’oubliez pas de le faire après chaque rédaction pour indiquer à l’ordinateur d’accepter les nouveaux changements.
7. Déclenchez l’animation, et si vous avez tout fait correctement, en une minute, l’aiguille des minutes fera un tour complet. Pour revenir à l’état normal, donnez à la variable la valeur 1.
J’espère que vous êtes allés jusqu’au bout et que vous avez réussi.