ShapeKeys, Mirror-Modifier und Export für Unity
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.
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.
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)
- Lösche zunächst den Mirror-Modifkator.
- 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. - Spiegel das neue Objekt durch negative Skalierung: Tastenfolge:
S X - 1
Davon 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.) - Verbinde die beiden Objekte durch einen Join (beide markieren, dann
Strg+J
). - Im Edit-Mode des entstandenen Meshes alles markieren und im Shading/UV-Tab der Werkzeugleiste (
T
) den BefehlNormals: 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:
- Im Edit-Mode den Schalter Auto-Merge aktivieren. (Entweder in der Menüzeile unten den Befehl
Mesh -> Auto Merge Editing
anhaken oder den Schalter drücken.) - 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.