Prozedurales Modellieren mit MEL-Skript in Maya - Tag 1

In diesem Tutorial werden die aufregenden Möglichkeiten zur Modellierung mit Mayas MEL-Skriptsprache vorgestellt. In diesem ersten Teil werden wir die Grundlagen von MEL-Befehlen lernen und zwei prozedurale Modellskripts erstellen, die für Ihre eigenen Workflows nützlich sein könnten.

Unter die Haube schauen

Maya Embedded Language (oder MEL) ist die Befehlsstruktur, mit der Maya fast alles erstellt, was Sie auf dem Bildschirm sehen. Jedes Mal, wenn Sie ein Objekt erstellen oder einen Scheitelpunkt verschieben, wird ein MEL-Befehl aufgerufen, um diese Aktion auszuführen. Sogar alle Fenster, Regale, Registerkarten, Menüs und Editoren werden mit MEL-Skripts erstellt und organisiert. Wenn Sie möchten, können Sie die Maya-Benutzeroberfläche mit nur MEL komplett neu aufbauen, wodurch die Skriptsprache zu einem unglaublich mächtigen Werkzeug wird, das Sie als Künstler in Ihrem Gürtel haben können. Wenn Sie mit Hilfe von Skripts die zeitaufwändigsten Teile Ihrer Arbeit automatisieren können, können Sie viel mehr Zeit darauf verwenden, Ihre Arbeit hervorzuheben.

Informationen zu bestimmten MEL-Befehlen finden Sie am besten im Abschnitt Technische Dokumentation von Maya Docs. Die beste Möglichkeit, sich mit den Konzepten von MEL vertraut zu machen, ist, sie in Aktion zu sehen. Lassen Sie uns in das System eintauchen und mit unserem ersten Skript beginnen.


Skript eins

Das erste Skript erstellt ein quadratisches Rohr, dessen flache Seiten auf der X- und Z-Achse ausgerichtet sind. Wir gehen das Erstellen des Skripts durch und erstellen eine Ablage-Schaltfläche, um darauf zuzugreifen.


Schritt 1

Schreiben Sie Ihren Pseudo-Code aus.

Pseudo-Code ist eine einfache englische Form eines Skripts, bei der alle wichtigen Schritte aufgeführt sind. Wenn Sie mit der Arbeit an komplexen Skripten beginnen, ist es sehr wichtig, Ihre Skripte zu skizzieren, bevor Sie loslegen. Der Pseudo-Code könnte für uns so aussehen:

 Erstellen Sie ein vierseitiges Polygonrohr. Drehen Sie in Y um 45 Grad. Verschieben, um auf der Bodenebene zu sitzen. Verschieben Sie den Drehpunkt zum Ursprung

Schritt 2

Öffnen Sie den Skripteditor, indem Sie auf die Schaltfläche rechts unten im Maya-Hauptfenster klicken.

Innerhalb des Skript-Editors gibt es zwei Hauptfenster, das Statusfeld oben und das MEL / Python-Fenster darunter. Stellen Sie sicher, dass die Registerkarte MEL ausgewählt ist.


Schritt 3

Zeichne in der Mayaszene ein „Pipe“ -Primitiv.

Sie sollten etwas ähnliches im Statusbereich des Skript-Editorfensters sehen:

 PolyPipe -ch auf -o auf -r 2,958298 -h 2,434319 -t 0,9; // Ergebnis: pPipe1 PolyPipe1 //

Schritt 4

Kopieren Sie den Befehl polyPipe aus der Statuszeile und fügen Sie ihn in den Skript-Editor ein.

Sie sollten ein genaues Duplikat des ersten PolyPipe erhalten, dieses Mal genau am Ursprung.


Schritt 5: Code aufbrechen

Der gerade verwendete PolyPipe-Befehl ist einer von Tausenden von MEL-Befehlen, die Ihnen zur Verfügung stehen. Ihre Struktur (wie Programmierer Syntax nennen) ist für jeden Befehl nahezu gleich:

 melCommand -flag value -flag2 value targetObject;

Der erste Teil ist der Befehl selbst, und die Flags (durch das Bindestrich gekennzeichnet) definieren bestimmte Attribute des Befehls. Für Befehle, die bereits vorhandene Objekte bearbeiten, ist häufig ein Ziel erforderlich, das dem Befehl das zu ändernde Objekt mitteilt. Jeder Befehl erfordert auch ein Semikolon, das das Ende des Befehls markiert.

Im Beispiel von polyPipe definieren die drei folgenden Flags den Radius, die Höhe und die Dicke des erstellten Rohrs.

 -r 3,162278 -h 3,514619 -t 0,8

Wir gehen später im Tutorial auf andere Flags ein, wenn wir das Skript zusammenstellen.

Der prozedurale Modellierungsworkflow in MEL besteht im Wesentlichen aus einer intelligenten Verkettung von Befehlen, die Geometrie in Maya erstellen oder bearbeiten.


Schritt 6

Löschen Sie die ursprüngliche Pipe und wählen Sie mit dem Befehl MEL die soeben erstellte aus.


Schritt 7

Setzen Sie die Anzahl der Achsenunterteilungen auf vier, und wählen Sie einige "nette" Ganzzahlen für Höhe, Radius und Tiefe. Wir werden diese später ändern und das Beispiel wird einfacher.

Diese Einstellungen können mit dem Befehl polyPipe zum Zeitpunkt der Erstellung des Objekts mithilfe von Flags angepasst werden. Machen Sie sich also keine Sorgen darüber, was Ihnen der Skripteditor gibt.


Schritt 8

Drehen Sie das Objekt auf der Y-Achse um 45 Grad

Wenn Sie das Objekt von Hand drehen, sollte das Ergebnis im Skripteditor etwa so aussehen:

 -r -os 0 -45 0 drehen;

Wenn Sie das Objekt durch Eingabe des Rotationswerts drehen, wird Folgendes angezeigt:

 setAttr "pPipe3.rotateY" 45;

Im Moment verwenden wir den Drehbefehl in unserem Skript. In späteren Lernprogrammen verwenden wir setAttr, um mit bestimmten Objektattributen zu arbeiten.


Schritt 9

Bewegen Sie das Rohr so, dass es auf der Gitterebene liegt

Wenn Sie das Objekt von Hand verschieben, sollte der Code im Skripteditor folgendermaßen lauten:

 bewege -r 0 1 0;

Wenn Sie das Objekt verschieben, indem Sie den y-Wert eingeben:

 setAttr "pPipe3.translateY" 1;

Wieder verwenden wir den Befehl zum Verschieben anstelle von setAttr.


Schritt 10

Drücken Sie "Einfügen" und bewegen Sie den Zapfen des Rohrs bis zum Ursprung.

Dadurch können Sie das Rohr leicht von einer Bodenebene aus skalieren. Dies ist der Code, den ich im Skripteditor bekomme:

 move 0 0 0 pPipe3.scalePivot pPipe3.rotatePivot;

Beachten Sie, dass der Code hier zwei Ziele hat - polyPipe3.rotatePivot und polyPipe3.scalePivot. Das bedeutet, dass der Code nur verwendet werden kann, wenn das fragliche Objekt polyPipe3 heißt. In späteren Tutorials werden wir dieses Problem mithilfe von Variablen beheben. Im Moment umgehen wir es jedoch mit einem anderen Befehl, der dasselbe bewirkt:

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

Schritt 11

Frieren Sie die Transformationen für das Objekt ein, indem Sie zum Menü "Ändern" gehen und "Transformationen einfrieren" wählen.

Der Code im Skripteditor:

 makeIdentity -aply wahr -t 1 -r 1 -s 1 -n 0;

makeIdentity ist eine Möglichkeit, die Transformationen einzufrieren, es ist jedoch kein sehr intuitiv benannter Befehl. Maya verfügt über eine Reihe von integrierten Skripts, die bestimmte Prozesse, einschließlich Einfrieren von Transformationen, automatisieren.


Schritt 12: Versuchen wir es noch einmal…

Wechseln Sie im Skript-Editor zum Verlauf und aktivieren Sie Echo All Commands. Dadurch wird der Skripteditor gezwungen, alle Befehle auszuführen, die möglicherweise ausgeführt werden, auch wenn der Benutzer sie nicht aktiv aktiviert hat.


Schritt 13

Frieren Sie die Transformationen erneut ein und werfen Sie einen Blick auf die Ausgabe des Skript-Editors. Sie sehen den folgenden Code:

 FreezeTransformations; makeIdentity -aply wahr -t 1 -r 1 -s 1 -n 0;

FreezeTransformations ist ein Maya-Helferskript, ein "Laufzeitbefehl", der makeIdentity aufruft. Im Gegensatz zu regulären Maya-Befehlen beginnen Laufzeitbefehle im Allgemeinen mit Großbuchstaben. Seien Sie vorsichtig, wenn Sie diese Skriptbefehle in Ihrem Code verwenden, da sie möglicherweise nicht in allen Maya-Installationen auf dieselbe Weise unterstützt werden. Bei FreezeTransformations besteht der Nachteil darin, dass der Befehl die Werte übernimmt, die im Dialogfeld "Freeze-Transformationsoptionen" festgelegt wurden. Diese Werte können je nach der letzten Verwendung unterschiedlich sein. Ich ändere selten die Einstellungen von den Standardeinstellungen, so dass ich FreezeTransformations und andere Hilfsskripte verwenden kann. Dies ist eine persönliche Präferenz, aber ich bin der Meinung, dass die Benutzerfreundlichkeit von Laufzeitbefehlen das Risiko erhöht, dass ein Skript beschädigt wird. Es ist jedoch wichtig zu verstehen, dass Laufzeitbefehle in komplexen Skripts Probleme verursachen können. Die Verwendung von Skripts, die auf Maya-Dialogfeldern basieren, ist eine schlechte Praxis, wenn Sie beabsichtigen, das Skript an andere Personen weiterzugeben. Mit Echo All Commands können Sie jedoch die Hintergrundskripts und Befehle finden, die nicht in der Technischen Dokumentation aufgeführt sind.


Schritt 14: Alles zusammenstellen

Bisher haben wir fünf Befehle durchlaufen, die zusammengesetzt werden können, um unser Objekt zu erstellen. Lassen Sie uns diese Befehle mit unserem Pseudo-Code ausrichten und schauen Sie sich die einzelnen Flaggen an. Jede Flagge hat zwei "Modi", einen langen Namen und eine Abkürzung. Normalerweise hat die Kurzschreibweise nur einen oder zwei Buchstaben. Ich persönlich ziehe es vor, die Abkürzung zu verwenden, wann immer dies möglich ist, aber die Verwendung des vollständigen Namens kann für Anfänger hilfreich sein und macht Ihren Code für Nicht-Skripter lesbarer. Lassen Sie uns die Befehle aufschlüsseln:

 // Erzeuge eine vierseitige Polygon-Pipe (ein Schrägstrich mit doppeltem Vorlauf kennzeichnet einen Kommentar im Code, der von MEL ignoriert wird) polyPipe -r 3 -h 4 -t 1 -sa 4;

Relevante Flaggen:

  • -radius (-r) definiert den Radius der Rohrleitung
  • -height (-h) definiert die y-Höhe
  • -Dicke (-t) gibt die Dicke des PolyPipe an, gemessen von der äußeren Kante des Radius nach innen
  • -SubdivisionsAxis (-sa) definiert, wie viele Seiten das PolyPipe hat
 // In Y um 45 Grad drehen -r -y 45;

Relevante Flaggen:

  • -relativ (-r) dreht das Objekt relativ zu seiner aktuellen Position
  • -RotationY (-y) setzt die Drehung auf der Y-Achse
 // bewege dich, um auf der Bodenebene zu sitzen move -r 0 1 0;

Relevante Flaggen:

  • -relativ (-r) verschiebt das Objekt relativ zu seiner aktuellen Position

Der Befehl zum Verschieben verwendet hier eine etwas andere Syntax als der Befehl zum Drehen. 0 1 0 ist die Abkürzung für das Übersetzen von 0 in x, das Übersetzen von 1 in y und das Übersetzen von 0 in Z. MEL ist eine sehr flexible Sprache und hat oft mehrere Möglichkeiten, genau das gleiche zu tun. In diesem Fall hätten wir auch Folgendes tun können:

 // bewege dich um auf der Bodenebene zu sitzen bewege -r -y 1;

Sie haben die Wahl und ein großer Teil des Skripts entwickelt Ihre eigenen Präferenzen und Stile.

 // Verschiebungspunkt zum Ursprung xform -ws -rp 0 0 0 -sp 0 0 0;

Relevante Flaggen:

  • -worldSpace (-ws) bewegt sich zu einer absoluten Position im Weltraum
  • -RotationPivots (-rp) verschiebt die Drehachsen in x-, y- und z-Richtung
  • -scalePivots (-sp) verschiebt die Skalenpunkte in x-, y- und z-Richtung

xform verfügt über eine große Anzahl von Flags und kann für eine Vielzahl von Funktionen verwendet werden. Wir werden es in zukünftigen Tutorials auf jeden Fall wieder sehen.
// Die Transformationen des Objekts einfrieren
FreezeTransformations;


Schritt 15

Geben Sie alle Befehle in den Skripteditor ein. Das sollten Sie haben:


Schritt 16

Markieren Sie den Code im Skripteditor, und ziehen Sie das Skript mit der mittleren Maustaste in das Fach 'Polygone'. Dadurch wird ein benutzerdefiniertes Regal-Symbol mit dem dazugehörigen Skript erstellt. Jedes Mal, wenn Sie auf diese Schaltfläche klicken, wird das Skript ausgeführt.


Schritt 17

Um der Regal-Schaltfläche eine benutzerdefinierte Beschriftung hinzuzufügen, greifen Sie auf den Regal-Editor zu, indem Sie auf den nach unten zeigenden Pfeil ganz links im Fenster klicken und halten. Suchen Sie im Shelf-Editor nach der neu erstellten Schaltfläche, und fügen Sie einen Namen für Bezeichnung und Symbol hinzu. Der Name des Symbols sollte normalerweise unter fünf Zeichen liegen. Herzliche Glückwünsche! Sie haben jetzt Ihr erstes MEL-gesteuertes Modellierungsskript abgeschlossen.


Skript 2

Nun, da wir die Seile gelernt haben, lassen Sie uns ein ähnliches Beispiel durchgehen. Hier wenden wir das, was wir bereits gelernt haben, an und erstellen ein grundlegendes Modell mit abgerundeten Würfeln.


Schritt 1

Schreiben Sie Ihren Pseudo-Code aus.

 Erstellen eines Polygonwürfels Verschieben, um auf der Bodenebene zu sitzen Verschieben des Drehpunkts an den Ursprung Durch Einfrieren der Transformationen werden alle Kanten der Kanten der Objektfase mit drei Unterteilungen ausgewählt

Schritt 2

Erstellen Sie den Polygonwürfelbefehl

 // einen Würfel erstellen polycube -w 4 -h 4 -d 4 -sx 1 -sy 1 -sz 1;

Relevante Flaggen:

  • -Breite (-w)
  • -Höhe (-w)
  • -Tiefe (-w)
  • -UnterteilungenX (-sx)
  • -UnterteilungenY (-sy)
  • -UnterteilungenZ (-sz)

Schritt 3

Erstellen Sie die Befehle "Move to Ground Plane", "Move Pivots" und "Freeze Transforms", genau wie im vorherigen Skript.

 // bewege den Würfel verschieben -r 0 2 0; // Verschiebungspunkt zum Ursprung xform -ws -rp 0 0 0 -sp 0 0 0; // FreezeTransformations einfrieren;

Schritt 4

Verwenden Sie einen Befehl, um alle Kanten des Würfels auszuwählen. Es gibt ein paar Möglichkeiten, dies zu tun. Da das Objekt bereits ausgewählt ist, wenn MEL es generiert, verwende ich dazu gerne eines der Helfer-Skripte von Maya.

 // Kanten auswählen ConvertSelectionToEdges;

Schritt 5

Verwenden Sie einen Abschrägungsbefehl, um neue Kanten in Ihrem Cube zu erstellen.

 // Abschrägung PolyBevel -oaf 1 -o .2 -sg 3 -fn 1 -mv 1 -sa 180;

Relevante Flaggen:

  • -offsetAsFraction (-oaf) Bei true wird der Abschrägungsbetrag durch einen Bruchteil der Länge benachbarter Kanten bestimmt.
  • -offset (-o) bestimmt die Menge der hinzuzufügenden Abschrägung
  • -segmente (-sg) Die Anzahl der Kanten, die den abgeschrägten Kanten hinzugefügt werden sollen
  • -fillNgon (-fn) unterteilt bei true die Ecken, an denen die Abschrägung n-seitige Flächen erzeugt
  • -Wenn mergeVertices (-mv) auf true gesetzt ist, werden die erstellten Scheitelpunkte der gefüllten n-seitigen Flächen zusammengeführt
  • -smoothingAngle (-sa) Legt fest, in welchem ​​Winkel die Abschrägung Normalen härten soll

Schritt 6

Alles zusammen:

 PolyCube -w 4 -h 4 -d 4 -sx 1 -sy 1 -sz 1; bewegen Sie -r 0 2 0; xform -ws -rp 0 0 0 -sp 0 0 0; FreezeTransformations; ConvertSelectionToEdges; Poly-Level-oaf 1 -o, 2 -g 3 -fn 1 -mv 1 -sa 180;

Schritt 7

Erstellen Sie Ihr Regal-Symbol, benennen Sie es um und wir sind fertig!