ShapeKeys, Mirror-Modifier und Export für Unity

Shape-Key-Fehler beim Spiegeln im Edit-Mode

Der folgende Artikel betrachtet Bearbeitungsschritte beim Erstellen eines Characters inklusive ShapeKeys in Blender und dem Import in Unity. Bei der Erstellung eines virtuellen Characters in Blender besteht ein gängiges Verfahren darin, nur eine Körperhälfte zu modellieren und die gegenüberliegende, im Prinzip identische Seite, durch einen Mirror-Modifikator generieren zu lassen. Fügt man dem Modell nun noch ShapeKeys hinzu, so taucht das Problem auf, dass diese beim Export in eine FBX-Datei verloren gehen und folglich auch nicht in Unity zur Verfügung stehen.

Warum tauchen die ShapeKeys nicht in Unity auf?

Normalerweise müssten in Unity 5 Modelle, die über ShapeKeys/BlendShapes/MorphTargets verfügen, beim Import automatisch einen SkinnedMeshRenderer (statt des üblichen MeshRenderer) erhalten. In diesem tauchen die ShapeKeys in einem Abschnitt „BlendShapes“ auf – wenn alles klappt.

ShapeKeys alias BlendShapes im Unity-Inspector
ShapeKeys alias BlendShapes im Unity-Inspector

Theoretisch funktioniert das für Collada, FBX als auch dem direkten .blend-Import. Um nachzuvollziehen, warum ShapeKeys nicht in Unity erscheinen, kann man die Schritte des Export- und Import-Vorgangs manuell nachvollziehen.

  • Um festzustellen, ob das Problem beim Export aus Blender oder beim Import in Unity liegt, kann die exportierte Datei zunächst auch in ein leeres Blender-Projekt importiert werden. Sind die ShapeKeys richtig exportiert, so müssen sie auch beim Re-Import in Blender wieder auftauchen. Das ist in meinem Beispiel nicht Fall, d.h. schon der Export geht schief.
  • Der Exporter wendet zunächst alle Modifikatoren dauerhaft an. Dieses „Backen“ kann man mit dem Apply-Button im Modifikator auch manuell durchführen. Versucht man den Mirror-Modifier in einem Mesh mit ShapeKeys anzuwenden, so erscheint die Fehlermeldung „Modifier cannot be applied to a mesh with shape keys“.

Ein Problem scheint also zu sein, dass sich der Spiegelmodifikator nicht auf ein Mesh mit ShapeKeys anwenden lässt – weder manuell noch automatisch während des Exports.

Wie lässt sich der Mirror-Modifikator inklusive ShapeKeys trotzdem backen?

Zunächst liegt der Verdacht nahe, man könne den Mesh-Modifikator einfach löschen, im Edit-Mode die Mesh-Hälfe duplizieren und spiegeln. Das funktioniert leider nicht, weil die ShapeKeys der gespiegelten Seite dann nicht mehr richtig funktionieren und verschoben werden.

ShapeKeys-Fehler beim Spiegeln im Edit-Mode
ShapeKeys-Fehler beim Spiegeln im Edit-Mode

Der Trick zur Lösung besteht darin, nicht im Edit-Mode, sondern im Objekt-Mode zu duplizieren, zu spiegeln und dann die separaten Objekte zu einem zu verschmelzen. (Video siehe unten)

  1. Lösche zunächst den Mirror-Modifkator.
  2. Dupliziere das Mesh, das nun nur noch eine Körperhälfte enthält, im Objekt-Mode (Shift+D). Tipp: Rechtsklick nach dem Duplizieren-Befehl verhindert, dass das neue Objekt verschoben wird.
  3. Spiegel das neue Objekt durch negative Skalierung: Tastenfolge: S X - 1Davon ausgehend, dass das Objekt entlang der X-Achse gespiegelt wird. Wurde das Mesh so gestaltet, dass die Schnittfläche mit der 0-Position übereinstimmt, so sollten die Hälften jetzt bereits richtig aufeinander liegen.)
  4. Verbinde die beiden Objekte durch einen Join (beide markieren, dann Strg+J).
  5. Im Edit-Mode des entstandenen Meshes alles markieren und im Shading/UV-Tab der Werkzeugleiste (T) den Befehl Normals: Recalculate ausführen.

Man hat nun ein durch Spiegelung vervollständigtes Mesh unter Beibehalt der ShapeKeys gewonnen.

Verschmelzen der Kanten

Weil die beiden Hälfte noch nicht verbunden sind, ist noch eine sichtbare Kante in der Mitte vorhanden. Diese durch Verschmelzen der Hälften beseitigen:

  1. Im Edit-Mode den Schalter Auto-Merge aktivieren. (Entweder in der Menüzeile unten den Befehl Mesh -> Auto Merge Editing anhaken oder den Schalter Blender: Editmode-Automerge-Modus drücken.)
  2. Eine Hälfte des Meshs markieren und geringfügig bewegen (z.B. bei gedrückter Strg-Taste = Einschnapp-Modus, so dass das Mesh leicht wieder an die Ausgangsposition zurück springt). Beim Loslassen sollten durch den Auto-Merge-Modus nun die überlagernden Punkte an den Schnittkanten automatisch miteinander verschmolzen werden.

Zusammenfassender Abschluss

Oben beschriebener Weg kann dazu verwendet werden, einen Spiegel-Effekt wie er vom Mirror-Modifikator bekannt ist, durch Kopieren und Verschmelzen auf Objekt-Ebene manuell nachzubauen. Somit wird ein gespiegeltes Mesh inklusive eventuell schon angelegter ShapeKeys vollständig exportierbar. Das entstandene Objekt kann z.B. in eine FBX-Datei exportiert und diese in Unity importiert werden. Dabei erkennt Unitys Skinned Mesh Renderer die BlendShapes und macht sie der Spieleentwicklungsumgebung zugänglich.

Dr. René Bühling

Hi, mein Name ist René und ich möchte Dir dabei helfen, deinen Traum vom eigenen Computerspiel Wirklichkeit werden zu lassen. Mein erstes kommerziell veröffentlichtes Spiel habe ich Mitte der 1990er Jahre als Hobby-Projekt mit einem Basic-Dialekt unter Windows entwickelt. Seither verfolge ich das Thema Spieleentwicklung in Hobby, Studium und Beruf. Ich habe über 20 Jahre Erfahrung in allen Phasen des Entwicklungsprozesses, die ich gerne mit dir teilen möchte.