Tianyu Lang zeigt in einem am 3. März 2014 veröffentlichten Tutorial zum FBX SDK, wie sich Modelle und Animationen in ein eigenes Format für eine Game Engine exportieren lassen. Der Beitrag behandelt nicht nur den Zugriff auf FBX-Daten, sondern auch die Unterschiede zwischen dem Dateiformat und der Darstellung im Renderer.
Der Autor beginnt mit der Verarbeitung von Meshdaten und führt anschließend zur Skelettanimation. Als Grundlage empfiehlt er eine vorherige Beschäftigung mit Skinned-Mesh-Animation, weil die Exportlogik eine Knochenhierarchie, Bind-Posen und gewichtete Einflüsse auf Vertices zusammenführen muss. Der Quellcode des Exporters ist über ein GitHub-Repository erreichbar.
Control Points und Vertexdaten
FBX speichert die Positionen eines Meshes als Control Points. Für die Ausgabe an einen Renderer reicht diese Liste allein nicht aus. UV-Koordinaten, Normalen, Tangenten und Binormalen liegen in weiteren Geometrieebenen. Je nach Mapping- und Referenzmodus müssen die Daten entweder über den Control Point oder über den Vertex eines Polygonzuges aufgelöst werden.
Der Unterschied wird an einer Würfelgeometrie sichtbar. Ein FBX-Modell kann acht physische Control Points besitzen, während ein Renderer wegen unterschiedlicher Normalen an Kanten mehr Vertices benötigt. Der Exporter muss deshalb die beiden Indizes getrennt behandeln und die Daten für die Dreiecksverarbeitung neu zusammenstellen.
Skelettanimation im eigenen Renderer
Für animierte Modelle nennt Lang vier zentrale Datensätze: die Hierarchie des Skeletts, bis zu vier Gewicht-Knochen-Paare pro Vertex, die Bind-Pose-Matrix jedes Gelenks und die Transformation für den jeweiligen Zeitpunkt. Die Hierarchie wird ausgehend vom Root-Knoten rekursiv durchlaufen. So lässt sich für jedes Gelenk die Beziehung zu seinem Elternknoten bestimmen.
Die Animation wird anschließend über die Transformationsmatrix des jeweiligen Gelenks auf die gewichteten Vertices angewendet. Die Gewichte bestimmen, wie stark ein Gelenk die Position beeinflusst. Der Exporter übernimmt diese Aufbereitung, damit der Renderer bereits mit einem eigenen, auf seine Vertexstruktur zugeschnittenen Datenformat arbeiten kann.
Koordinatensysteme und Grenzen des Ansatzes
Langs Beispiel nutzt Modelle aus Maya mit einem rechtshändigen Koordinatensystem und richtet sie für DirectX auf ein linkshändiges System aus. Dafür werden unter anderem die Z-Komponenten von Positionen angepasst, die Rotation verändert und die Dreiecksreihenfolge für Backface Culling umgestellt. Für OpenGL sieht der Autor weniger Konvertierungsarbeit, weil dessen Standardausrichtung dem Maya-System näherkommt.
Der Ansatz ist auf Maya und die dort verwendete Exportausrichtung zugeschnitten. Andere Modellierungsprogramme können zusätzliche Anpassungen erfordern. Auch Skalierung in Animationen und die Entfernung doppelter Vertices bleiben im Beispiel offen. Das Tutorial liefert damit einen konkreten Einstieg in den Export, ersetzt aber keine vollständige Importpipeline für jede Engine.
