MEL (Maya Embedded Language) und Python sind die zwei Skriptsprachen in Autodesk Maya, mit denen nahezu alle Maya-Funktionen automatisiert, benutzerdefinierte Tools entwickelt und Maya in Studio-Pipelines integriert werden kann.
Rubrik: Animation & VFX · Unterrubrik: Maya · Niveau: Fortgeschritten
Synonyme / Auch bekannt als: Maya Scripting, MEL-Script, maya.cmds (Python), PyMEL
Was ist MEL & Python-Scripting in Maya?
Maya wurde von Beginn an als skriptierbare Software konzipiert. Jede Funktion, die ein Benutzer über die Menüs oder Werkzeuge ausführt, wird intern als MEL-Befehl ausgeführt. Das Script-Editor-Fenster in Maya zeigt diese Befehle in Echtzeit an und ermöglicht so das direkte Nachvollziehen und Wiederholen von Aktionen über Skripte.
MEL (Maya Embedded Language) ist Mayas eigene, C-ähnliche Skriptsprache, die seit Maya 1.0 existiert. Sie bietet direkten Zugriff auf alle Maya-Kernfunktionen.
Python wurde als zweite Skriptsprache in Maya 8.5 (2007) eingeführt und hat MEL in neuen Produktionen weitgehend abgelöst. Der Zugriff auf Maya-Befehle erfolgt über das maya.cmds-Modul sowie über PyMEL, eine objektorientierte Wrapper-Bibliothek, die Mayas Objekte als Python-Klassen repräsentiert.
Erklärung
Der Script Editor
Der Script Editor (Windows > General Editors > Script Editor) ist das zentrale Interface für Scripting in Maya. Er besteht aus:
- Output-Bereich (oben): Zeigt alle ausgeführten MEL-Befehle und Fehler
- Input-Bereich (unten): Eingabe von MEL oder Python; Ausführung mit
Enter(einzelne Zeile) oderCtrl+Enter(ganzes Script)
Der Sprachwechsel zwischen MEL und Python erfolgt über Tab-Auswahl im Input-Bereich.
MEL: Grundlagen
MEL ist typsicher, imperativ und für Einsteiger vergleichsweise einfach zu verstehen, da man jeden Befehl direkt aus dem Output-Bereich kopieren kann.
Beispiele grundlegender MEL-Syntax: ```mel // Würfel erstellen polyCube -w 2 -h 2 -d 2;
// Objekt umbenennen rename "pCube1" "meinWuerfel";
// Variable deklarieren int $anzahl = 5; string $name = "Objekt"; float $groesse = 1.5;
// Schleife for ($i = 0; $i < $anzahl; $i++) { spaceLocator -name ("locator_" + $i); }
// Attribut abfragen und setzen float $tx = getAttr "meinWuerfel.tx"; setAttr "meinWuerfel.ty" 3.0;
// Prozedur (Funktion) proc renameAll(string $prefix) { string $sel[] = ls -sl; for ($obj in $sel) { rename $obj ($prefix + "_" + $obj); } } ```
Python (maya.cmds): Grundlagen
maya.cmds ist das Standard-Python-Interface und spiegelt nahezu 1:1 die MEL-Befehle wider:
```python import maya.cmds as cmds
cmds.polyCube(w=2, h=2, d=2)
cmds.rename("pCube1", "meinWuerfel")
cmds.setAttr("meinWuerfel.ty", 3.0) tx = cmds.getAttr("meinWuerfel.tx") print(f"TX Position: {tx}")
for i in range(5): cube = cmds.polyCube()[0] cmds.setAttr(f"{cube}.tx", i * 2.5)
selection = cmds.ls(selection=True) for obj in selection: cmds.setAttr(f"{obj}.visibility", 0) ```
PyMEL: Objektorientiertes Scripting
PyMEL (import pymel.core as pm) ist eine höhere Abstraktion, die Maya-Nodes als Python-Objekte repräsentiert:
```python import pymel.core as pm
cube = pm.polyCube()[0] cube.translateX.set(5.0) print(cube.translateX.get())
locator = pm.spaceLocator() cube.translateX.connect(locator.translateX) ```
PyMEL ist bei komplexen Tool-Entwicklungen bevorzugt, da es pythonischer ist und weniger Fehleranfälligkeit bei Typkonvertierungen aufweist.
Maya Python API (OpenMaya)
Für Performance-kritische Operationen steht die Maya API (import maya.api.OpenMaya as om) zur Verfügung. Sie ermöglicht direkten Zugriff auf Mayas interne C++-Klassen über Python-Bindings. Typische Einsatzfälle:
- Benutzerdefinierte Deformer- oder Shader-Node-Typen (MPxDeformerNode, MPxNode)
- Hochperformante Batch-Operationen auf Geometriedaten
- Maya-Plugins entwickeln
Shelf-Buttons und Hotkeys
Skripte können als Shelf-Buttons in der Toolbar gespeichert werden: Script ausführen, dann per Drag & Drop in die Shelf ziehen. Über das Hotkey-Editor können auch Tastenkürzel mit Skripten belegt werden.
Batch-Rendering & Headless-Ausführung
Maya kann im Hintergrund ohne GUI gestartet werden: ``bash maya -batch -file myScene.ma -command "Render -s 1 -e 100;" ``
Für Python-Batch-Operationen: ``bash mayapy /path/to/script.py ``
mayapy ist ein standalone Python-Interpreter mit Maya-Modulen, ideal für Pipeline-Tools, die außerhalb von Maya ausgeführt werden sollen.
Callback-System und Events
Maya bietet ein Event-System, über das Skripte auf interne Events reagieren können: ```python import maya.cmds as cmds
def onSceneOpen(clientData): print("Neue Szene wurde geöffnet")
cmds.scriptJob(event=["SceneOpened", onSceneOpen]) ```
Beispiele
Batch-Umbenennung: Alle Objekte mit dem Prefix "imported" sollen in "asset" umbenannt werden. Ein 10-Zeilen-Python-Skript selektiert alle Objekte per cmds.ls(dag=True), filtert nach dem Prefix und benennt um.
Asset-Export-Tool: Ein Studio entwickelt ein Python-GUI-Tool (mit maya.cmds.window oder PySide2/Qt), das den Export von Maya-Assets als FBX nach festgelegten Konventionen automatisiert (Pivot-Reset, Freeze Transforms, Delete History, Export).
Automatisches Rigging: Ein Python-Skript platziert Joints entlang einer ausgewählten Kurve, bindet sie an ein Mesh und erstellt IK-Handles – in Sekunden statt Stunden.
In der Praxis
MEL/Python-Scripting ist eine Kernkompetenz für Technical Artists und Pipeline-TDs (Technical Directors) in VFX-Studios. Typische Aufgaben:
- Pipeline-Integration: Import/Export-Tools, Asset-Validation, Naming-Convention-Checker
- Rigging-Automatisierung: Rig-Builder-Scripts für Standardkomponenten
- Render-Farm-Vorbereitung: Szenen-Checks, AOV-Setup, Render-Settings-Automation
- UI-Tools: Benutzerdefinierte Toolbars und Dialoge mit PyQt/PySide2
In der Industrie ist Python die bevorzugte Sprache; MEL wird hauptsächlich für Legacy-Code und schnelle One-Liner-Operationen direkt im Script-Editor verwendet.
Vergleich & Abgrenzung
| Sprache | Stärke | Einsatz |
|---|---|---|
| MEL | Maya-nativ, alles funktioniert sofort | Schnelle Einzel-Befehle, Legacy |
| Python (maya.cmds) | Standard, große Community | Neue Tools, Pipeline-Skripte |
| PyMEL | Objektorientiert, pythonisch | Komplexe Tool-Entwicklung |
| OpenMaya API | Maximale Performance | Custom Nodes, Plugins |
Häufige Fragen (FAQ)
Soll ich MEL oder Python lernen? Für neue Projekte eindeutig Python. MEL-Kenntnisse sind hilfreich um bestehende Skripte zu lesen, aber Python ist universeller, wird außerhalb von Maya verwendet und hat eine weit größere Lern-Ressourcen-Basis.
Kann ich externe Python-Bibliotheken (numpy, pandas) in Maya verwenden? Ja, wenn sie für die Python-Version installiert sind, die Maya intern verwendet (prüfen: import sys; print(sys.version) im Script Editor). Autodesk integriert seit Maya 2022 Python 3.
Ist PyMEL langsamer als maya.cmds? Ja, PyMEL hat durch die Objekt-Wrapping einen gewissen Overhead. Für Performance-kritische Loops ist maya.cmds oder die OpenMaya-API vorzuziehen.
Verwandte Einträge
- Maya in der VFX-Studio-Pipeline
- Rigging in Maya
- Bifrost – Prozedurale Grafik in Maya
- Maya: Übersicht & Stärken in VFX/Animation
Weiterführend
- Lanier, Lee (2015): Maya Python for Games and Film. Focal Press.
- Autodesk Inc. (2025): Maya Python API 2.0 Documentation. Online: help.autodesk.com/maya
- Gould, Adam (2012): Practical Maya Programming with Python. Packt Publishing.
- Kalinins, Nathan (2020): The VFX Pipeline: Technical Art & Pipeline Tools. Focal Press.
