Modélisation procédurale avec script MEL en maya - Jour 1

Ce tutoriel présente les possibilités intéressantes de modélisation utilisant le langage de script MEL de Maya. Dans cette première partie, nous allons apprendre les bases des commandes MEL et créer deux scripts de modèle procédural pouvant vous être utiles dans vos propres flux de travail..

Regarder sous le capot

Le langage incorporé Maya (ou MEL) est la structure de commande que Maya utilise pour créer à peu près tout ce que vous voyez à l'écran. Chaque fois que vous créez un objet ou déplacez un sommet, une commande MEL est appelée pour que cette action se produise. Même toutes les fenêtres, étagères, onglets, menus et éditeurs sont générés et organisés à l'aide de scripts MEL. Si vous le souhaitez, vous pouvez complètement reconstruire l'interface Maya en n'utilisant que MEL, faisant du langage de script un outil incroyablement puissant à avoir sous votre ceinture en tant qu'artiste. Si vous pouvez utiliser des scripts pour automatiser les parties de votre travail qui prennent le plus de temps, vous pouvez passer encore plus de temps à faire ressortir votre travail..

Le meilleur endroit pour en savoir plus sur des commandes MEL spécifiques est dans la partie Documentation technique de la documentation Maya, et le meilleur moyen de se familiariser avec les concepts de la MEL est de les voir en action. Fouillons dans le système et commençons avec notre premier script.


Premier script

Le premier script créera un tuyau carré avec les côtés plats alignés sur les axes X et Z. Nous allons passer en revue la création du script et créer un bouton d'étagère pour y accéder..


Étape 1

Ecrivez votre pseudo-code.

Le pseudo-code est une forme de script en anglais simple, avec toutes les étapes principales énumérées. Lorsque vous commencez à travailler sur des scripts complexes, il est très important de définir vos scripts avant de commencer. Pour nous, le pseudo-code pourrait ressembler à ceci:

 Créer un tuyau polygonal à quatre côtés Faire une rotation de 45 degrés en Y Déplacer pour s’asseoir sur le plan du sol Déplacer le point de pivotement vers l’origine Transformer les transformations

Étape 2

Ouvrez l'éditeur de script en cliquant sur le bouton situé dans le coin inférieur droit de la fenêtre principale de Maya..

Dans l'éditeur de script, il y a deux panneaux principaux, le panneau d'état ci-dessus et la fenêtre MEL / Python ci-dessous. Assurez-vous que l'onglet MEL est sélectionné.


Étape 3

Dessinez une primitive «pipe» dans la scène maya.

Vous devriez voir quelque chose de similaire à cela dans le panneau d'état de la fenêtre de l'éditeur de script:

 polyPipe -ch sur -o sur -r 2.958298 -h 2.434319 -t 0.9; // Résultat: pPipe1 polyPipe1 //

Étape 4

Copiez et collez la commande polyPipe à partir de la ligne d'état dans l'éditeur de script..

Vous devriez obtenir un duplicata exact du premier polyPipe, cette fois situé exactement sur l'origine.


Étape 5: Décomposer le code

La commande polyPipe que vous venez d’utiliser est l’une des milliers de commandes MEL disponibles. Leur structure (que les programmeurs appellent syntaxe) est à peu près la même pour chaque commande:

 melCommand -flag value -flag2 value targetObject;

La première partie est la commande elle-même, et les drapeaux (désignés par le tiret) définissent certains attributs de la commande. Les commandes qui manipulent des objets existants ont souvent besoin d'une cible, qui indique à la commande quel objet modifier. Chaque commande nécessite également un point-virgule, qui marque la fin de la commande..

Dans l'exemple de polyPipe, les trois indicateurs ci-dessous définissent le rayon, la hauteur et l'épaisseur du tuyau créé..

 -r 3.162278 -h 3.514619 -t 0.8

Nous reviendrons sur les autres drapeaux en détail plus loin dans le tutoriel, lorsque nous aurons mis le script.

Le processus de modélisation procédurale dans MEL est essentiellement un enchaînement intelligent de commandes qui créent ou manipulent une géométrie dans Maya..


Étape 6

Supprimez le canal d'origine et sélectionnez celui que vous venez de créer à l'aide de la commande MEL.


Étape 7

Définissez le nombre de subdivisions d'axes sur quatre, puis choisissez des nombres entiers «sympas» pour la hauteur, le rayon et la profondeur. Nous les changerons plus tard et ils faciliteront l'exemple..

Ces paramètres peuvent être ajustés à l'aide de la commande polyPipe au moment de la création de l'objet à l'aide de drapeaux. Ne vous inquiétez donc pas de ce que l'éditeur de script vous propose..


Étape 8

Faire pivoter l'objet sur l'axe des ordonnées de 45 degrés

Si vous faites pivoter l'objet à la main, le résultat dans l'éditeur de script devrait ressembler à ceci:

 faire pivoter -r -os 0 -45 0;

Si vous faites pivoter l'objet en tapant la valeur de rotation, le résultat sera:

 setAttr "pPipe3.rotateY" 45;

Pour le moment, nous allons utiliser la commande rotation dans notre script. Dans des tutoriels ultérieurs, nous utiliserons setAttr pour travailler avec des attributs d'objet spécifiques.


Étape 9

Déplacez le tuyau de sorte qu'il soit assis sur le plan de la grille

Si vous déplacez l'objet à la main, le code dans l'éditeur de script doit être:

 move -r 0 1 0;

Si vous déplacez l'objet en tapant la valeur y:

 setAttr "pPipe3.translateY" 1;

Encore une fois, nous allons utiliser la commande move au lieu de setAttr.


Étape 10

Appuyez sur "Insérer" et déplacez le pivot du tuyau jusqu'à l'origine.

Cela vous permettra d’échelonner facilement le tuyau à partir d’un plan de masse. C'est le code que je reçois dans l'éditeur de script:

 move 0 0 0 pPipe3.scalePivot pPipe3.rotatePivot;

Notez que le code ici a deux cibles - polyPipe3.rotatePivot et polyPipe3.scalePivot. Cela signifie que le code ne peut être utilisé que lorsque l'objet en question est nommé polyPipe3. Dans des tutoriels ultérieurs, nous aborderons ce problème en utilisant des variables, mais pour le moment, nous allons le contourner en utilisant une commande différente qui fait la même chose:

 xform -a -rotatePivot 0 0 0 -scalePivot 0 0 0;

Étape 11

Geler les transformations sur l'objet en allant dans le menu de modification et en choisissant Figer les transformations.

Le code dans l'éditeur de script:

 makeIdentity -apply true -t 1 -r 1 -s 1 -n 0;

makeIdentity est un moyen de geler les transformations, mais ce n'est pas une commande très intuitive. Maya a quelques scripts intégrés qui automatisent certains processus, y compris les transformations de congélation.


Étape 12: Essayons encore une fois…

Dans l'éditeur de script, accédez à Historique et activez Echo All Commands. Cela force l'éditeur de script à "faire écho" ou à afficher toutes les commandes exécutées par maya, même si l'utilisateur ne les a pas activement engagées..


Étape 13

Geler les transformations à nouveau, et jetez un oeil à la sortie de l'éditeur de script. Vous verrez le code suivant:

 FreezeTransformations; makeIdentity -apply true -t 1 -r 1 -s 1 -n 0;

FreezeTransformations est un script d'assistance maya, une "commande d'exécution" qui appelle makeIdentity. Contrairement aux commandes Maya classiques, les commandes d'exécution commencent généralement par des majuscules. Soyez prudent lorsque vous utilisez ces commandes de script dans votre code, car elles risquent de ne pas être prises en charge de la même manière pour toutes les installations de Maya. Pour FreezeTransformations, l'inconvénient est que la commande prend les valeurs définies dans la boîte de dialogue Options de transformation de la transformation, qui peuvent être définies différemment en fonction de la dernière utilisation. Je modifie rarement les paramètres par défaut, je suis donc à l'aise avec FreezeTransformations et d'autres scripts auxiliaires. C’est une préférence personnelle, mais j’estime que l’utilisation de commandes d’exécution dépasse le risque de rupture d’un script. Cependant, il est important de comprendre que, dans les scripts complexes, les commandes d'exécution peuvent poser des problèmes. Il est donc déconseillé d'utiliser un script reposant sur des boîtes de dialogue maya si vous prévoyez de le donner à quelqu'un d'autre. Cela dit, utiliser Echo All Commands est un bon moyen de trouver les scripts et les commandes en arrière-plan qui ne figurent pas dans la documentation technique..


Étape 14: Tout mettre en place

Jusqu'à présent, nous avons passé en revue cinq commandes pouvant être combinées pour créer notre objet. Alignons ces commandes avec notre pseudo-code et examinons les drapeaux spécifiques de chacun. Chaque drapeau a deux "modes", un nom long et un raccourci. En règle générale, le raccourci n'a qu'une ou deux lettres. Personnellement, je préfère utiliser le raccourci lorsque cela est possible, mais utiliser le nom complet peut être utile pour les débutants et rend votre code plus lisible par les non-scripteurs. Décomposons les commandes:

 // Créer un tuyau polygonal à quatre côtés (une barre oblique double indique un commentaire dans le code, qui est ignoré par MEL) polyPipe -r 3 -h 4 -t 1 -sa 4;

Drapeaux pertinents:

  • -radius (-r) définit le rayon du tuyau
  • -height (-h) définit la hauteur y
  • -épaisseur (-t) définit l'épaisseur du tuyau en poly, mesurée à partir du bord extérieur du rayon vers l'intérieur
  • -subdivisionsAxis (-sa) définit le nombre de côtés du polyPipe
 // Rotation de 45 degrés en Y rotation -r -y 45;

Drapeaux pertinents:

  • -relative (-r) fait pivoter l'objet par rapport à sa position actuelle
  • -rotationY (-y) définit la rotation sur l'axe des y
 // Déplacer pour s'asseoir sur le plan du sol move -r 0 1 0;

Drapeaux pertinents:

  • -relative (-r) déplace l'objet par rapport à sa position actuelle

La commande de déplacement utilise ici une syntaxe légèrement différente de la commande de rotation. 0 1 0 est un raccourci pour traduire 0 en x, traduire 1 en y et traduire 0 en z. MEL est un langage très flexible et a souvent plus d’une façon de faire exactement la même chose. Dans ce cas, nous aurions également pu faire:

 // Se déplacer pour s'asseoir sur le plan du sol move -r -y 1;

Le choix vous appartient et une grande partie du script consiste à développer vos propres préférences et styles..

 // Déplacer le point pivot vers l'origine xform -ws -rp 0 0 0 -sp 0 0 0;

Drapeaux pertinents:

  • -worldSpace (-ws) prend une position absolue dans l'espace-monde
  • -rotationPivots (-rp) déplace les pivots de rotation dans les directions x, y et z
  • -scalePivots (-sp) déplace les pivots d'échelle dans les directions x, y et z

xform a un grand nombre de drapeaux et peut être utilisé pour un grand nombre de fonctions. Nous verrons certainement celui-ci à nouveau dans les prochains tutoriels.
// gèle les transformations de l'objet
FreezeTransformations;


Étape 15

Mettez toutes les commandes dans l'éditeur de script. Voici ce que vous devriez avoir:


Étape 16

Mettez en surbrillance le code dans l'éditeur de script et faites glisser le script de la souris moyenne vers l'étagère "Polygones". Cela créera une icône d'étagère personnalisée avec votre script qui lui est associé. Chaque fois que vous cliquez sur ce bouton, le script s'exécutera..


Étape 17

Pour ajouter une étiquette personnalisée au bouton d'étagère, accédez à l'éditeur d'étagère en cliquant sur la flèche orientée vers le bas située à l'extrême gauche de la fenêtre et en la maintenant enfoncée. Dans l'éditeur d'étagère, recherchez le bouton que vous venez de créer et ajoutez une étiquette et un nom d'icône. Le nom de l'icône doit normalement comporter moins de cinq caractères. Toutes nos félicitations! Vous avez maintenant terminé votre premier script de modélisation piloté par MEL.


Scénario 2

Maintenant que nous avons appris les ficelles du métier, voyons un exemple similaire. Ici, nous allons appliquer ce que nous avons déjà appris et créer un modèle de base de "cube arrondi".


Étape 1

Ecrivez votre pseudo-code.

 Créer un cube de polygone Déplacer pour s'asseoir sur le plan du sol Déplacer le point pivot vers l'origine Le gel des transformations sélectionne toutes les arêtes de l'objet biseautées avec trois divisions

Étape 2

Créer la commande cube polygone

 // crée un cube polyCube -w 4 -h 4 -d 4 -sx 1 -sy 1 -sz 1;

Drapeaux pertinents:

  • -largeur (-w)
  • -hauteur (-w)
  • -profondeur (-w)
  • -subdivisionsX (-sx)
  • -subdivisionsY (-sy)
  • -subdivisionsZ (-sz)

Étape 3

Créez les commandes "déplacer au sol", "déplacer les pivots" et "geler les transformations", tout comme le script précédent.

 // déplace le cube move -r 0 2 0; // Déplacer le point pivot vers l'origine xform -ws -rp 0 0 0 -sp 0 0 0; // gel FreezeTransformations;

Étape 4

Utilisez une commande pour sélectionner toutes les arêtes du cube. Vous pouvez le faire de différentes manières. Puisque l'objet est déjà sélectionné lorsque MEL le génère, j'aime utiliser l'un des scripts d'assistance de Maya pour le faire..

 // sélection des bords ConvertSelectionToEdges;

Étape 5

Utilisez une commande de biseau pour créer de nouvelles arêtes sur votre cube.

 // chanfrein polyBevel -oaf 1 -o 0,2 -sg 3 -fn 1 -mv 1 -sa 180;

Drapeaux pertinents:

  • -offsetAsFraction (-oaf) lorsque vrai, la valeur du biseau sera déterminée par une fraction de la longueur des arêtes adjacentes.
  • -offset (-o) détermine la quantité de biseautage à ajouter
  • -segments (-sg) le nombre d'arêtes à ajouter aux arêtes biseautées
  • -fillNgon (-fn) lorsque vrai, subdivise les coins où le biseau crée des faces à n côtés
  • -mergeVertices (-mv), lorsque la valeur est true, fusionnera les sommets créés des faces remplies à n côtés
  • -smoothingAngle (-sa) Détermine à quel angle le biseau doit durcir les normales

Étape 6

Mets le tout ensemble:

 polyCube -w 4 -h 4 -d 4 -sx 1 -sy 1 -sz 1; move -r 0 2 0; xform -ws -rp 0 0 0 0 -sp 0 0 0; FreezeTransformations; ConvertSelectionToEdges; polyBevel-oaf 1 -O, 2 -sg 3 -fn 1 -mv 1 -sa 180;

Étape 7

Créez votre icône d'étagère, renommez-la et nous avons terminé!