Facepalm: Animierte .FBX-Modelle und der SkinnedEffect

Und wieder ist es mal die Zeit für eine Facepalm, nachdem ich mich nun ca. 2 Stunden mit Blender und dem SkinnedEffect von XNA 4.0 rumgeschlagen habe.

Es geht um ein Model, daß ich in Blender zunächst modelliert, dann gerigged und anschliessend geskinned habe. Eine Animation habe ich ebenfalls eingebaut und nun wollte ich dieses Modell exportieren und mit XNA 4.0 darstellen. Bewegt selbstverständlich. Dabei bin ich auf die eigenartigsten Effekte gekommen und wie immer bei einer Facepalm, kommt man natürlich oft nicht auf das naheligendste.

Was ist passiert? Im Grunde genommen war schlicht und einfach die gesamte Vertex-Gewichtung der einzelnen Bones zerstört und das humanoide Modell sah eher wie ein Alien aus, als ein Mensch. Die von mir erzeugte Animation war zwar zu erahnen aber alles war total verzerrt.

Ich habe also meine Bone-Struktur und meine Armatures in Blender geprüft. Ich habe einzelne Objekte exportiert und die visuellen Transformationen festgeschrieben. Ich habe die Vertex-Gewichtung überarbeitet und geprüft und sogar die Animation von Grund auf neu erzeugt. Alles leider ohne Erfolg…

Was war nun die Lösung?

Eigentlich war es ziemlich einfach… Das Problem lag nämlich nicht Blender oder gar im FBX-Exporter wie ich die ganze Zeit vermutet hatte. Das Problem lag im ModelProcessor der Content-Pipeline. Ich hatte dort das Modell skaliert und auch rotiert. Mit dem statischen Modell hat dies auch die ganze Zeit einwandfrei funktioniert. Dies ist ja auch eine gute Idee, da diese Transformationen dann nicht mehr zur Laufzeit eingearbeitet werden müssen.

Das Problem tritt aber auf, sobald man Bones bzw. ein Armature hat. Die eingestellten Transformationen im ModelProcessor wirken nämlich lediglich auf das Mesh, nicht auf die Bones. Und wenn man dort etwas anderes als die Standardwerte einträgt, dann hat man exakt das beschriebene Problem.

Wie habe ich das nun gelöst?

Das war ziemlich einfach. Das Model habe ich direkt in Blender auf die passende Größe skaliert. Die Rotation wird nun per Rotations-Welt-Matrix angewendet. Dies kostet zwar etwas Rechenzeit, aber die Welt-Matrix war sowieso schon notwendig. Daher fällt dies nicht weiter ins Gewicht.

So schnell kann man seine Zeit „verschwenden“ und so schnell hat man eine neue Facepalm. Bis zum nächsten mal…

Advertisements

Veröffentlicht am 27.07.2011 in Blender, Facepalm, XNA, XNA 4.0 und mit , , , , , , getaggt. Setze ein Lesezeichen auf den Permalink. 3 Kommentare.

  1. Gut zu wissen, das kann mir vielleicht im Laufe der Zeit noch Helfen, wenn ich den Facepalm im Hinterkopf behalte 🙂

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s

%d Bloggern gefällt das: