7 days of unlimited AE and Premiere Pro templates & videos - for free!* Unlimited asset downloads! Start 7-Day Free Trial
Advertisement
  1. 3D & Motion Graphics
  2. Maya

Prozedurale Modellierung mit MEL-Skripten in Maya - Tag 2

Read Time: 14 mins

German (Deutsch) translation by Valentina (you can also view the original English article)

Dieses Tutorial ist eine Einführung in die Verwendung externer MEL-Dateien und -Prozeduren, -Funktionen, -Schleifen und -Skriptinteraktionen im Maya-Arbeitsbereich. Wir werden grundlegende Codierungspraktiken durchgehen und ein geschicktes geometrisches Objekt zusammenstellen, das ohne Skripten nur sehr schwer zu erstellen wäre.


Zusätzliche Dateien/Plugins:

Prozeduren erstellen

In diesem Tutorial erstellen wir eine externe Skriptdatei mit vier "Prozeduren" - eigenständigen Skripten, mit denen bestimmte Ziele erreicht werden sollen. Die erste Prozedur verwendet eine beliebige Anzahl von Objekten, die im Maya-Ansichtsfenster ausgewählt wurden, und erstellt eine verkettete Hierarchie für einfache Doppeltransformationen. Das zweite Skript hebt die Überlagerung ausgewählter Objekte auf, und das dritte Skript verschiebt die Drehpunkte ausgewählter Objekte zum Ursprung des Weltraums. Mit diesen drei Skripten können Sie auf einfache Weise interessante Effekte mit mehreren Objekten erstellen. Das vierte Verfahren kombiniert alle ersten drei, um eine 'Fermat's Spiral' zu erzeugen, ähnlich dem komplexen Wirbel, der auf Sonnenblumenköpfen zu finden ist.


Schritt 1

Öffnen Sie Maya. Im Verlauf dieses Tutorials werde ich Maya 2010 verwenden, aber die gleichen Befehle sollten für die meisten Versionen von Maya funktionieren. Erstellen Sie zunächst einen Würfel in der Mitte des Ansichtsfensters.


Schritt 2

Gehen Sie zu 'Bearbeiten > Spezial duplizieren' und klicken Sie auf das Optionsfeld, um diesen Dialog aufzurufen. Erstellen Sie neun Kopien.


Schritt 3

Gehen Sie zu 'Fenster > Hypergraph-Hierarchie'. Wir müssen jetzt die Würfel zusammen überlagern, um eine "Kette" zu bilden. Klicken Sie dazu zuerst auf 'pCube2', dann bei gedrückter Umschalttaste auf 'pCube1' und drücken Sie 'p' auf Ihrer Tastatur. Dadurch wird das erste ausgewählte Objekt (pCube2) dem zweiten ausgewählten (pCube1) übergeordnet.

Setzen Sie diesen Vorgang für jeden unserer Würfel fort (wählen Sie das Kind, dann das Elternteil aus und drücken Sie dann 'p', um sie miteinander zu verketten). Nach Abschluss sollte jedes Objekt in der Mitte der Hierarchie einen übergeordneten und einen untergeordneten Cube haben, und die gesamte Hierarchie sollte folgendermaßen aussehen:


Schritt 4

Schließen Sie das Fenster 'Hypergraph Hierarchy'. Wählen Sie alle Objekte aus, indem Sie mit der Auswahl über die Würfel in der Mitte des Ansichtsfensters ziehen. Versuchen Sie dann, alle Würfel ausgewählt zu halten, sie zu bewegen und zu drehen.

Da die Transformationen jedes Würfels jetzt einen Schritt weiter oben in der Kette relativ zum Würfel sind, können Sie mit der resultierenden Doppeltransformation die Würfel auf einzigartige Weise verschieben - kleine Übersetzungen werden schnell zu großen Änderungen.


Schritt 5

Wenn alle Würfel noch ausgewählt sind, drücken Sie auf Ihrer Tastatur die Umschalttaste-P, um die Überlagerung der Würfel aufzuheben. Wir haben jetzt alle wichtigen Schritte durchlaufen, die wir mit unserem Skript automatisieren möchten. Starten Sie also eine neue Maya-Datei und öffnen Sie einen Texteditor. Mein persönlicher Favorit ist Notepad++, für das sogar ein MEL-Sprach-Plugin verfügbar ist. Sie können gerne den Texteditor verwenden, den Sie bevorzugen, aber im Moment verwende ich den guten alten Microsoft Notepad. Notepad ist einfach, aber es erledigt die Arbeit.


Schritt 6

Fahren Sie fort und speichern Sie Ihre Datei. Stellen Sie beim Speichern eines MEL-Dokuments sicher, dass Sie unter "Dateityp" die Option "Alle Dateien" auswählen. Speichern Sie Ihr Dokument als Mel-Datei in Ihrem Maya-Skriptverzeichnis. Ich werde EdW_DoubleTransform.mel als meinen Dateinamen verwenden.


Schritt 7

Um eine Prozedur zu erstellen, müssen Sie einige Dinge vorher wissen. Zunächst müssen Sie einen "Bereich" für die Prozedur definieren. Der Bereich legt fest, von wo aus auf eine Prozedur zugegriffen werden kann. Ein "lokaler" Bereich bedeutet, dass der Code nur für andere Prozeduren in derselben .mel-Datei zugänglich ist. "Global" bedeutet, dass die Prozedur anderen Skriptdateien und dem Benutzer zur Verfügung steht und auch in den Speicher geladen wird. Im Allgemeinen verwende ich viele globale Verfahren. Dies ist nicht die absolut beste Codierungspraxis, aber ich möchte, dass meine Prozeduren in mehreren Skripten verfügbar sind. Zweitens müssen Sie einen Namen für Ihre Prozedur wählen. Versuchen Sie im Allgemeinen, etwas Einzigartiges und Beschreibendes auszuwählen. Wenn die Prozedur global ist, soll der Name nicht mit einer anderen Prozedur in einem anderen Skript in Konflikt stehen. Normalerweise arbeite ich eine Art Initialen in den Namen ein, und da das Skript, das wir schreiben, "DoubleTransform" heißt, gehe ich in diesem Fall mit "dt". Im einfachsten Fall ist dies das Verfahren, das wir erstellen:


Schritt 8

Das erste, was wir mit unserer Prozedur tun werden, ist eine Variable zu definieren, die schließlich eine Liste von Objektnamen enthält. In MEL werden Variablen durch ein Dollarzeichen ($) vor dem Variablennamen gekennzeichnet. Es gibt verschiedene Arten von Daten, die eine Variable enthalten kann - Textzeichenfolgen, Ganzzahlen, sogenannte Ganzzahlen, Gleitkomma-Dezimalzahlen, Vektorwerte usw. Die Syntax zum Deklarieren einer Variablen lautet wie folgt:

Im Moment erstellen wir eine leere Zeichenfolgenvariable:

Wenn wir möchten, können wir der Variablen in derselben Codezeile auch Daten zuweisen. Doppelte Anführungszeichen werden verwendet, um Textzeichenfolgen zu definieren.

Ein einzelnes Gleichheitszeichen bedeutet "Setze die Variable auf". Ein doppeltes Gleichheitszeichen bedeutet "ist gleich" und wird beim Vergleichen von Variablen verwendet.


Schritt 9

Um unsere neue Variable zu testen, müssen wir einen Druckbefehl hinzufügen. Dadurch wird beim Ausführen des Skripts eine Zeichenfolge an den Skripteditor ausgegeben. In diesem Fall drucken wir einfach den Inhalt der Variablen '$ selectedObjects'.


Schritt 10

Fügen Sie Ihrer neuen Prozedur einen Kommentar hinzu. Ich neige dazu, vor jedem Vorgang einen Kommentar hinzuzufügen, damit ich sie später schnell finden kann. Einige meiner Skripte enthalten Dutzende von Prozeduren, und Kommentare erleichtern das Debuggen und Ändern von Code erheblich. Der vollständige Code sollte nun folgendermaßen aussehen:


Schritt 11

Speichern Sie die Datei und kehren Sie zu Maya zurück. Bei jedem ersten Start von Maya wird das Skriptverzeichnis gescannt und eine Liste aller Dateien dort geladen. Wenn Sie dem Verzeichnis ein Skript hinzugefügt haben, während Maya bereits geöffnet ist, weiß das System nicht, dass die Datei vorhanden ist. In diesem Fall haben Sie zwei Möglichkeiten: Starten Sie Maya entweder neu oder verwenden Sie den Befehl "Rehash", um Maya zu zwingen, diese Dateiliste zu aktualisieren. Wir werden die zweite Methode verwenden. Gehen Sie also zu 'Fenster > Allgemeine Editoren > Skript-Editor' und geben Sie Folgendes ein:

Drücken Sie nun 'Strg-Enter', um den Befehl auszuführen.


Schritt 12

Um Ihr Skript zu testen, müssen Sie es in Maya "initialisieren". Der Befehl "rehash" teilt Maya mit, dass die Datei vorhanden ist, und der Befehl "source" weist Maya an, das Skript in den Speicher zu laden. Geben Sie Folgendes in den Skripteditor ein:

Geben Sie dann den Befehl für die Prozedur ein, die wir im Skript erstellt haben:

Folgendes sollten Sie nach Ausführung der Prozedur im Skripteditor erhalten:


Schritt 13

Nachdem wir eine funktionierende Prozedur zusammengestellt haben, wollen wir den Pseudocode für das herausfinden, was diese Prozedur in unserem endgültigen Skript tun soll:

  • Schreiben Sie eine Liste ausgewählter Objekte in eine Variable
  • Holen Sie sich die Anzahl der ausgewählten Objekte
  • übergeordnet jedes Objekt zum vorherigen in der Liste

Schritt 14

Verwenden Sie den Listenbefehl "ls", um eine Liste der im Maya-Ansichtsfenster ausgewählten Objekte abzurufen. List wird normalerweise mit einem Flag verwendet, das den Befehl anweist, die aktuell im Maya-Ansichtsfenster ausgewählten Elemente abzurufen, -sl. Versuchen Sie, einige Objekte im Maya-Ansichtsfenster auszuwählen, und geben Sie den vollständigen Befehl (siehe unten) in den Skripteditor ein. Denken Sie daran, die Strg-Eingabetaste zu drücken, um den Befehl auszuführen.


Schritt 15

Der Befehl list gibt eine Reihe von Zeichenfolgen aus, die die vollständige Liste der ausgewählten Objekte darstellen. Um diese Informationen für uns nützlich zu machen, müssen wir das Ergebnis des Befehls "list" in eine Variable schreiben. Umschließen Sie dazu den Listenbefehl in Häkchen (Hinweis: Das Häkchen, auch Backquote genannt, befindet sich normalerweise über der Tabulatortaste auf der Tastatur. Verwenden Sie als Nächstes nicht das einfache Anführungszeichen zur Eingabetaste). Das Umschließen eines Befehls in Häkchen bedeutet "die Ausgabe von". Unser Befehl sollte jetzt so aussehen:


Schritt 16

Die Variable $selectedObjects ist eine einzelne Textzeichenfolge. Was wir wirklich brauchen, ist ein sogenanntes String-Array - eine geordnete Liste von Strings, die in einer einzelnen Variablen enthalten sind. Um unseren String in ein String-Array zu verwandeln, verwenden Sie eckige Klammern, wenn Sie die Variable deklarieren:

Wenn wir jetzt auf die Variable verweisen, können wir entweder das gesamte Array verwenden:

... oder eine einzelne Zeichenfolge innerhalb des Arrays, indem Sie einen Index angeben - die Position der Zeichenfolge, die wir innerhalb des Arrays selbst haben möchten. Die Indexwerte in MEL beginnen immer bei Null, wie unten gezeigt:


Schritt 17

Wir müssen auch herausfinden, wie viele Objekte sich im Array befinden. Sie können den Befehl "size" verwenden, um genau das zu tun. Erstellen wir eine neue Variable, um diese Informationen zu speichern. Eine ganze Zahl wird durch eine Ganzzahl dargestellt, die in MEL immer als "int" bezeichnet wird:


Schritt 18

Jetzt brauchen wir eine Möglichkeit, jedes Objekt entsprechend seiner Position im Array zu übergeordnet. Es gibt eine Handvoll Möglichkeiten, dies zu tun, aber im Moment verwenden wir eine einfache "for"-Schleife. For-Schleifen sind in der Programmierung üblich, um eine Aktion mehrmals auszuführen. Die Syntax einer zehnmal ausgeführten for-Schleife lautet wie folgt:

Die Schleifenstruktur besteht aus drei Teilen. $i=0 definiert eine ganzzahlige Variable, $i


Schritt 19

Wir müssen jetzt einen 'übergeordneten' Befehl verwenden, um die Hierarchiekette zu erstellen. Die Syntax für diesen Befehl lautet wie folgt:

In unserem Fall wäre der übergeordnete Befehl also:


Schritt 20

Nachdem unsere Schleife abgeschlossen ist, müssen wir nun das letzte Objekt in der Auswahl mit dem Befehl "select" mit dem Flag "abwählen" abwählen. Um den Index des zuletzt ausgewählten Objekts zu berechnen, nehmen wir die Gesamtzahl der Objekte und subtrahieren dann 1, da der Index eines Arrays in Maya bei 0 beginnt.


Schritt 21

Damit ist unser erstes Verfahren abgeschlossen:


Schritt 22

Erstellen Sie unter 'dt_makeParentChain' eine neue Prozedur, um die Auswahl der ausgewählten Objekte aufzuheben. Der folgende Code übergeordnet die ausgewählten Objekte der Welt. Dies entspricht dem Aufheben der Elternschaft.


Schritt 23

Unser drittes Verfahren automatisiert den Prozess des Verschiebens des Drehpunkts eines Objekts zum Ursprung. Wie zuvor erstellen wir zunächst die Prozedurübersicht:


Schritt 24

Wir verwenden dann dieselbe Technik wie im ersten Verfahren, um eine Liste der ausgewählten Objekte in eine Variable zu schreiben:


Schritt 25

Wir müssen jetzt eine Schleife hinzufügen. Während wir die gleiche Art von for-Schleife wie im ersten Skript verwenden könnten, verwenden wir stattdessen eine for-each-Schleife. Eine "for-each" -Schleife ist eine spezielle Version der for-Schleife, die für jeden Wert in einem Array einmal ausgeführt wird. Außerdem können Sie eine Variable schreiben, die den Wert des aktuellen Index darstellt. Die Syntax sieht folgendermaßen aus:

Die Variable $each enthält den Wert des aktuellen Index des Arrays. Für unser Skript sollte der Code folgendermaßen aussehen:

Dieselbe Technik kann verwendet werden, um einen beliebigen Maya-Befehl für eine beliebige Anzahl ausgewählter Objekte zu automatisieren.


Schritt 26

Mit der Variablen $thisObj können wir nun das Objekt auswählen, das gerade von der Schleife betrachtet wird:


Schritt 27

Um den Pivot zum Ursprung zu verschieben, können Sie den Befehl "xform" verwenden und die Flags -rp (rotatePivot) und -sp (scalePivot) auf der X-, Y- und Z-Achse auf 0 zurücksetzen:


Schritt 28

Die Hauptkomponenten des Skripts sind jetzt fertig, und Ihr Code, der alle drei Prozeduren enthält, sollte folgendermaßen aussehen:


Schritt 29

Wir werden jetzt ein viertes Verfahren erstellen, das die vorherigen drei verwendet, um eine interessante geometrische Folge namens "Fermat's Spiral" zu erstellen, die auf der Winkelbeziehung des Goldenen Schnitts, phi, basiert. Es ist eine Form, die in der Natur häufig vorkommt und allen möglichen interessanten geometrischen Regeln folgt. Beginnen wir mit dem Schreiben des Pseudocodes:

  • Erstellen Sie eine Kugel
  • Erstellen Sie 1.000 Kopien
  • Elternkette alle Sphären
  • Bewegen Sie die Objekte auf der x-Achse
  • Verschieben Sie alle Drehpunkte der Kugel zum Ursprung
  • Drehen Sie die Kugeln in Y 137,5 Grad (der goldene Winkel)

Schritt 30

Lassen Sie uns zunächst eine neue Verfahrensübersicht erstellen:


Schritt 31

Jetzt erstellen wir eine Kugel mit 8 radialen und 8 Höhenunterteilungen und schreiben die resultierenden Transformations- und Formknoten in ein String-Array, damit wir sie verfolgen können. Die meisten Befehle, die Geometrie erstellen, geben zwei Zeichenfolgen aus - den Namen des Transformationsknotens und den Namen des Formknotens. Zum größten Teil möchten Sie mit der Transformationsknotenzeichenfolge arbeiten, die im Index [0] in der unten erstellten Arrayvariablen $ seedSphere gespeichert wird:


Schritt 32

Wir werden jetzt eine leere String-Array-Variable erstellen:


Schritt 33

Öffnen Sie dann eine for-Schleife, die 1.000 Mal ausgeführt wird:


Schritt 34

Wir müssen jetzt unsere neu erstellte Kugel duplizieren und die resultierenden Transformations- und Formknoten in eine Variable schreiben:


Schritt 35

Hier hängen wir den Namen unseres duplizierten Transformationsknotens an das Ende des $allSpheres-Arrays an. Mit dem Befehl "size" können Sie bestimmen, wie viele Objekte sich bereits im Array befinden, und das Ergebnis als Index für unseren neuen Wert verwenden.


Schritt 36

Hier wählen wir alle erstellten Kugeln aus und führen den zuvor erstellten übergeordneten Kettenbefehl aus:


Schritt 37

Nachdem wir die Kugeln zusammen erzogen haben, wählen wir sie erneut aus und verschieben sie alle .05 in X mit dem Befehl "verschieben":


Schritt 38

Nachdem wir die Ursprungsposition mithilfe unserer zuvor erstellten "pivotToOrigin" -Verfahren zurückgesetzt haben, wählen wir die Kugeln ein letztes Mal aus und drehen sie in Y um 137,5 Grad. Führen Sie anschließend unser nicht übergeordnetes Skript aus:


Schritt 39

Damit ist unser letztes Verfahren abgeschlossen. Unser vollständiges Skript sollte also so aussehen:


Schritt 40

Und damit sind wir fertig! Speichern Sie das Skript und führen Sie den 'rehash'-/'source'-Prozess wie oben beschrieben erneut aus. Geben Sie dann den folgenden Befehl in Mayas Skripteditor ein, drücken Sie die Strg-Eingabetaste und warten Sie einige Sekunden:

Und da haben Sie Fermats Spirale, die komplett mit MEL konstruiert wurde. Versuchen Sie, im letzten Verfahren mit verschiedenen Winkeln, Formen und Transformationen zu spielen - Sie können alle Arten von interessanten Mustern erhalten!


Dieses Tutorial ist Tag 2 in einer Reihe - Gehen Sie zu Tag 1.


Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new 3D & Motion Graphics tutorials. Never miss out on learning about the next big thing.
Advertisement
Scroll to top
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.