Maya Fuck Up Maya neigt schneller zu merkwürdigem Verhalten als man die User Preferences in den Papierkorb befördern kann. Und das ist dann auch einer der häufigsten Tipps, wenn Maya rumzickt. Das kann helfen, muss aber nicht und man verliert dabei auch seine Einstellungen und Hotkeys. Bevor man zu diesem Schritt greift, gibt es einige weitere Tipps und Tricks um störrische Maya Dateien wieder in den Griff zu bekommen.

Warning: Man sollte grundsätzlich alle Reperaturversuche nur an Kopien der Originaldateien durchführen

1. Maya Ascii verwenden

Wenn man das Maya Ascii Format benutzt, hat man eine deutlich bessere Chance eine kaputte Datei zu retten. .ma ist eine reines Textformat und kann mit jedem Texteditor (und z.B. Python) leicht bearbeitet werden. Da .ma Dateien schnell mal einige hundert MB groß werden können, empfehle ich den SublimeText Editor da dieser auch mit großen Dateien gut umgehen kann und für Windows, Mac und Linuc verfügbar ist.

1.1 Dateien in Maya Ascii umwandeln

Wenn man eine .mb Datei als Maya Ascii abspeichern möchte, geht dies unter umständen nicht. Z.B. wenn in der Szene “unknown nodes” herum schwirren.
Der MEL Befehl

file -type "mayaAscii";

erzwing das Ascii Format.

In die andere Richtung geht es so:

file -type "mayaBinary";

Dabei gehen die “unknown nodes” dann verloren.

2. Locked Nodes

Nodes die gelocked sind, kann man nicht löschen. Man muss sie zuerst unlocken. Das geht mit MEL oder Python. Der MEL Befehl zum unlocken lautet:

lockNode -lock off nodeNameHere;

Ein kleiner Script erledigt das dann für die ganze Szene.

MEL Version:

string $gffu[] = `ls -sl`;
for ($rfo in $gffu)
{
    lockNode -lock off $rfo;
    delete $rfo;
}

Python Version:

import maya.cmds as mc
allNodes = mc.ls()
for node in allNodes:
mc.lockNode(node, l=False)

-> via Google Groups

Manchmal lassen sich die Nodes so nicht unlocken. Dann hilft ein externer Python Script von Fredrik Averpil den man auf die .ma Datei los lässt.

import re

infile = open('original_file.ma', 'r')
outfile = open('new_file.ma', 'w')

for line in infile:
    lockNodeFound = False
    for word in re.findall(r"\w+", line):
        if (word == 'lockNode'):
            lockNodeFound = True
    if (lockNodeFound):
        #print 'Line removed: ' + line
        pass
    else:
        outfile.write(line)

Genaue Anleitung gibts beim Autor

3. Namespaces löschen

Dieser Script löscht alle Namespaces ohne Rückfrage. Man sollte also vorher die Datei unter einem anderen Namen speichern. Und die unten verlinkten Artikel lesen.

// Get All Nodes In Scene
string $allNodes[] = `ls` ;
// Loop Through Them
for($node in $allNodes) {
 // Tokenize And Rename
 string $buffer[] ;
 tokenize $node ":" $buffer ;
 string $newName = $buffer[size($buffer)-1] ;
 catch(`rename $node $newName`) ;
}

-> via ScriptSwell
-> Remove Namespace From A String or Object Name
Working With Multiple Level Namespaces

4. Unknown Nodes löschen

Nodes, die von einem Plugin erstellt wurde, was nicht geladen ist, sind für Maya unbekannt, also unknown. Dies verhindert z.B. dass man ein einem anderen Dateiformat speichern kann.

Wenn man sich ablsout sicher ist, dass man diese Nodes nich mehr benötigt, kann man sie über diesen MEL Befehl löschen:

delete `ls -type unknown -type unknownDag -type unknownTransform`

Es gibt auch unter “File” -> “Optimize Scene Size” eine Option um unknown Nodes zu entfernen.

5. Referenzen aufräumen

Auch mit Referenzen kann einiges schief gehen. Vor allem im Zusammenspiel mit Render Layers. Diese Kombination versuche ich komplett zu vermeiden. Aber auch im “normalen” Betrieb können Referenzen gerne mal Shaderzuweisungen verlieren oder plötzlich ihre Position ändern.

Maya bietet im Reference Editor zwei Möglichkeiten Fehler zu beheben.
1. File -> List Reference Edits… zeigt Änderungen an der Referenz. Diese Änderungen können hier gelöscht werden was hoffentlicht zu einer Besserung führt.
2. File -> Clean Up Reference… Dazu muss die Referenz zuerst entladen werden. Dann löscht dieser Befehl alle Änderungen an der Referenz.
3. Referenz neu hinzufügen und die fehlerhaft Referenz löschen.

6. Save early, save often, save incremental

  1. Incremental Save einschalten
  2. Autosave einschalten
  3. Inkremental sichern per Script.

TBC…