Animer un manège avec Expressions dans Maya 2009

L'animation à l'aide d'expressions peut vous faire gagner beaucoup de temps, en particulier lorsqu'il s'agit d'objets mécaniques tels qu'un manège! Dans ce tutoriel, Stephen Ko nous explique un projet simple basé sur des expressions, créant une interface utilisateur simple avec des curseurs permettant de contrôler les différentes parties de son modèle. Commençons!


Fichiers / Plugins supplémentaires:
  • Téléchargez les fichiers de projet pour ce tutoriel

Étape 1

Commençons! Tout d’abord, ouvrez Maya, et si vous voulez suivre exactement, ouvrez le fichier de scène fourni.


Étape 2

Je vais décrire brièvement mon modèle avant de commencer. J'ai divisé le modèle en 2 parties: la merry_go_round_move et le merry_go_round_stage. Tous les chevaux sont regroupés à l’intérieur du merry_go_round_move groupe, et sont nommés GRP_Horse1 à GRP_Horse12.


Étape 3

Maintenant nous comprenons le modèle, commençons à écrire nos expressions. Commencez par Fenêtre> Editeurs d'animation> Editeur d'expression.


Étape 4

le Éditeur d'expression est divisé en une section de sélection et une section d’expression. Après avoir fini de taper quoi que ce soit dans la section expression, nous nommons l’expression dans la Nom de l'expression champ, puis cliquez sur le bouton «créer» pour enregistrer l’expression. Il apparaîtra alors dans la section de sélection, prêt à être utilisé, rappelé ou édité..

REMARQUE: Si vous ne pouvez pas voir les expressions que vous créez, allez à Sélectionner un filtre> Par nom d'expression. Cela montrera toutes les expressions que vous avez créées précédemment, classées par leur nom (c'est pourquoi il est si important de nommer nos expressions!)


Étape 5

Tout d’abord, nous devons faire pivoter le merry_go_round_move groupe. Tapez ce qui suit dans la section expression:

 merry_go_round_move.rotateY = merry_go_round_move.rotateY-1;

Maintenant, donnez un nom à votre expression et appuyez sur Créer pour le sauver. Alors, que fait ce code? Bien sur chaque image de notre animation, cette expression portera sur le merry_go_round_move courant du groupe Y rotation, soustrayez-en un et faites en sorte que la nouvelle rotation Y valeur. Il est clair que si cela se répète sur chaque image au cours de notre animation, le groupe effectuera une rotation lente mais sûre dans le -Y direction, à une vitesse de 1 degré chaque image. Ce qui n'est pas assez rapide!

REMARQUE: Ce modèle est conçu pour tourner dans le sens des aiguilles d’une montre. C’est pourquoi nous soustrayons 1 degré du Y valeur de rotation sur chaque image. Si nous ajoutions 1 degré sur chaque image, le groupe tournerait dans le sens opposé.!


Étape 6

Afin de nous donner plus de contrôle sur la vitesse de rotation, nous allons ajouter un nouvel attribut au groupe. Pour ce faire, sélectionnez d'abord le merry_go_round_move groupe, puis dans la zone de canal, cliquez sur Edition> Ajouter un attribut.

dans le Ajouter un attribut boîte de dialogue, ajoutez les paramètres indiqués dans l'image ci-dessous:

  • Nom long : C'est le nom de notre nouvel attribut.
  • Type de données : La définition du type de données sur floats nous permet d’utiliser des nombres avec des décimales (par exemple 1,7) pour la valeur rotationSpeed..
  • Le minimum : C'est la plus petite valeur que nous autoriserons pour notre rotation.
  • Maximum: C'est la plus grande valeur que nous autorisons.
  • Défaut : Enfin, c'est la valeur par défaut de l'attribut.

Étape 7

Si vous cliquez D'accord vous verrez que notre nouvel attribut est en place au bas de la zone des canaux. Cependant, pour le moment, cela n’est lié à rien et n’a donc aucun effet sur la vitesse de notre rotation. Pour le connecter, nous devons revenir à l'éditeur d'expression et éditer notre expression. Alors ouvrez l’éditeur d’expression, choisissez votre expression dans la section sélection et modifiez-la en:

 merry_go_round_move.rotateY = merry_go_round_move.rotateY -merry_go_round_move.rotateSpeed;

Maintenant, assurez-vous de cliquer sur le nouveau modifier bouton qui a remplacé le Créer bouton en bas de la fenêtre. Cela enregistre les modifications que vous avez apportées à votre expression..

Comme vous pouvez le constater, nous avons remplacé le -1 valeur avec un lien vers notre nouvelle merry_go_round_move.rotateSpeed attribuer, mais qu'est-ce que cela fait? Notre expression nouvellement modifiée va maintenant soustraire la valeur que nous mettons dans la RotationVitesse canal de notre groupe Y valeur de rotation, sur chaque image.

Par exemple, imaginez notre RotationVitesse la valeur est 1. Sur chaque image, notre groupe Y la valeur de rotation diminuera de la même valeur - 1 degré. Si nous devions augmenter notre RotationVitesse valeur à dix, la valeur de rotation diminuera de 10 degrés sur chaque image - autrement dit, elle tournera 10 fois plus vite! Nous pourrions également l’empêcher de tourner entièrement en réglant la merry_go_round_move.rotateSpeed à 0.


Étape 8

Bien qu'il soit relativement facile de modifier les valeurs dans la Channel Box, il peut être amusant de créer une interface graphique très basique à partir de laquelle nous pouvons contrôler le manège. Bien que ce ne soit pas un didacticiel complet sur l’interface utilisateur Maya, il devrait vous donner suffisamment d’informations pour que vous puissiez commencer à expérimenter un peu.!

Nous allons créer une seule fenêtre, contenant un curseur qui contrôlera notre attribut RotateSpeed. Alors commencez par ouvrir le Éditeur de script dans Fenêtre> Editeurs généraux> Editeur de script, ou en cliquant sur le bouton Éditeur de script bouton en bas à droite de votre fenêtre Maya. Une fois ouvert, tapez ce qui suit dans la zone de saisie:

 window -title "Controls" -width 400 -height 200; frameLayout -collapsable true -abel "Merry-go-round"; columnLayout; floatSliderGrp -label "Speed" -field true -minValue 0 -maxValue 5 speed; connectControl speed merry_go_round_move.rotateSpeed; setParent…; showWindow;

Ok, regardons ça ligne par ligne. Cette première section crée une nouvelle fenêtre de l'interface utilisateur d'une taille de 400x200px et définit la barre de titre pour afficher le texte. Les contrôles. Il n'apparaîtra pas encore, cependant, car nous devons le lui indiquer plus tard dans le code..

 window -title "Controls" -width 400 -height 200;

Cette section de code ajoute quelque chose appelé une mise en page à l'intérieur de notre fenêtre. Pour que vous puissiez ajouter des curseurs et des boutons à votre interface graphique, vous devez disposer d’une mise en page. Cadre layout, ajoutera un cadre autour de tout ce que nous ajoutons à l'intérieur. Vous remarquerez que nous avons également ajouté une étiquette appelée Manège, et définissez le cadre pour être repliable, ce qui signifie que nous pouvons replier nos curseurs pour plus de propreté si notre interface graphique devient plus compliquée plus loin dans la ligne.

 frameLayout -collapsable true -abel "Merry-go-round";

Cette ligne ajoute une autre mise en page à l'intérieur de notre mise en page. Pourquoi? Une disposition en colonne est très utile pour ajouter rapidement et facilement des commandes superposées dans votre interface utilisateur, et il est souvent utilisé pour créer facilement une interface utilisateur! Si nous ne l’ajoutions pas, il faudrait positionner manuellement chaque contrôle, ce qui prendrait une lot plus long!

 columnLayout;

Cette ligne est l'endroit où nous ajoutons notre premier contrôle! C'est un floatSliderGrp qui est une combinaison d'un curseur et d'une zone de saisie, qui mettent à jour la valeur connectée. Nous l'avons étiqueté La vitesse, met le valeur minimale du curseur à 0 et le Valeur max du curseur à 5. Très important, nous avons nommé le contrôle la vitesse. Voici comment nous accéderons au curseur via MEL - s'il n'avait pas de nom, il serait extrêmement difficile de le rechercher et de l'utiliser dans notre code.!

 floatSliderGrp -label "Speed" -field true -minValue 0 -maxValue 5 speed;

C’est ici que nous connectons notre tout nouveau curseur à l’attribut rotateSpeed ​​que nous avons créé précédemment. C'est un processus très simple, qui est couvert en détail dans l'aide. Essentiellement, nous disons d'utiliser notre la vitesse curseur, pour définir la valeur de la RotationVitesse attribut (qui à son tour contrôle la vitesse de rotation de notre manège. Simple!)

 connectControl speed merry_go_round_move.rotateSpeed;

Enfin, nous utilisons le SetParent… commande qui, en raison des deux points, nous empêche de travailler avec ColumnLayout, jusqu’à FrameLayout, puis à la fenêtre elle-même, après quoi nous montrons la fenêtre!

 setParent…; showWindow;

Cela fait, sélectionnez tout le code et appuyez sur Ctrl + Entrée pour l'exécuter. Une fenêtre nommée «Contrôles» devrait apparaître contenant un seul curseur. Si vous appuyez maintenant sur Play, vous pouvez déplacer le curseur pour modifier la vitesse de rotation de manière interactive! Impressionnant!


Étape 9

Donc, le corps principal tourne, passons maintenant aux chevaux. Ils vont monter et descendre, alors nous allons devoir écrire une expression pour modifier leur valeur Y de translation.


Étape 10

Ouvrez donc l’éditeur d’expression et créez-en une nouvelle. Écrivez ce qui suit dans le champ de texte:

 GRP_Horse1.translateY = sin (heure);

Sin est l’une des fonctions mathématiques intégrées de Maya, et s’agissant du mouvement oscillant, c’est une très utile! Une courbe sinusoïdale (comme indiqué en rouge en haut de cette page) est une courbe lisse qui monte et descend au fil du temps. Avec un peu de montage, nous pouvons utiliser ce mouvement de haut en bas pour conduire le mouvement de notre cheval.

Avec le code ci-dessus entré, cliquez sur Créer pour l'activer. Si vous jouez en arrière maintenant, le cheval va monter et descendre mais pas comme nous voulons. Nous devons ajouter des attributs personnalisés!


Étape 11

Nous allons ajouter un attribut au tout premier groupe, afin de modifier la fréquence de ses mouvements ascendants et descendants. Vous pouvez ajouter cet attribut à n'importe quel objet de la scène, ou même à un localisateur si vous préférez, mais n'oubliez pas que vous devez mettre à jour les expressions ci-dessous afin qu'elles contiennent le chemin correct vers l'attribut, sinon elles ne le seront pas. avoir un effet!

Sélectionnez GRP_Horse1 et, dans la zone de canal, cliquez sur Edition> Ajouter un attribut. Donnez-lui les paramètres montrés dans l'image ci-dessous:


Étape 12

Avec notre nouvel attribut créé, nous devons revenir à l’éditeur d’expression pour modifier l’expression Sin. Editez l'expression pour qu'elle corresponde au code ci-dessous:

 GRP_Horse1.translateY = sin (heure * GRP_Horse1.frequency);

Comme vous pouvez le constater, nous multiplions la valeur temporelle par notre nouvel attribut de fréquence, ce qui a pour effet d’accélérer ou de ralentir la vitesse du mouvement oscillant. Plutôt cool.


Étape 13

Avec notre deuxième attribut en place, nous aurons besoin d’un autre curseur dans notre interface utilisateur! Ouvrez l'éditeur de script de sauvegarde et modifiez le script mel comme indiqué ci-dessous:

 window -title "Controls" -width 400 -height 200; frameLayout -collapsable true -abel "Merry-go-round"; columnLayout; floatSliderGrp -label "Frequency" -field true -minValue 0 -maxValue 10 fréquence; connectControl frequency GRP_Horse1.frequency; floatSliderGrp -label "Speed" -field true -minValue 0 -maxValue 5 speed; connectControl speed merry_go_round_move.rotateSpeed; setParent…; showWindow;

Comme vous pouvez le constater, nous avons deux nouvelles lignes. Le premier crée un nouveau curseur appelé la fréquence, et le second relie cette la fréquence curseur vers notre nouveau la fréquence attribut. Les deux lignes utilisent les mêmes commandes que La vitesse curseur. Si vous appuyez maintenant sur le jeu, vous pouvez modifier de manière interactive la vitesse du mouvement de montée et de descente du cheval. Nous y arrivons!


Étape 14

Il est temps de faire bouger les autres chevaux aussi! Faites 11 copies supplémentaires de l'expression Sin précédente, en vous rappelant de mettre à jour le nom du HorseGrps comme indiqué ci-dessous. Comme nous voulons contrôler la vitesse de tous les chevaux du single la fréquence attribut, la dernière partie de chaque expression reste la même. N'oubliez pas de frapper modifier lorsque vous avez terminé, puis appuyez sur lecture et déplacez le curseur pour voir le résultat!


Étape 15

Brillant! Sauf que les chevaux montent et descendent ensemble ce qui n'est pas très réaliste. Nous devons compenser la valeur temporelle de certains chevaux afin qu’ils atteignent le sommet de leur saut à des moments différents. Permet de voir à quoi ça ressemble:

Comme vous pouvez le constater, j’ai ajouté 45 points à certains chevaux. Temps valeurs. Cela peut être une valeur aléatoire, mais j'ai utilisé 45 car cela compense le mouvement de ces chevaux de moitié exactement - ils seront au bas de leur saut tandis que les autres sont au sommet! Un exemple pour l'un des chevaux est donné ci-dessous:

 GRP_Horse2.translateY = sin ((time + 45) * GRP_Horse1.frequency);

REMARQUE: veillez à ajouter les crochets supplémentaires dans!


Étape 16

Enfin, ouvrez l’éditeur de script, sélectionnez tout le code et faites-le glisser vers un emplacement vide de votre étagère! Cela enregistre le script sous forme de bouton d'étagère, ce qui vous permet d'ouvrir facilement la fenêtre sans réécrire tout le code. Maintenant, cliquez sur le bouton, appuyez sur play et voyez les résultats de votre travail d'expressions.


Et c'est tout! J'espère que vous avez aimé ce tutoriel. Si vous avez des questions, faites-le moi savoir et j'essaierai de vous répondre ultérieurement. Merci!