Rotationen bei Skeletal Animation

Design Patterns, Erklärungen zu Algorithmen, Optimierung, Softwarearchitektur
Forumsregeln
Wenn das Problem mit einer Programmiersprache direkt zusammenhängt, bitte HIER posten.
Antworten
kristof
Beiträge: 91
Registriert: 19.01.2009, 13:05

Rotationen bei Skeletal Animation

Beitrag von kristof »

Hallo zusammen,

Ich habe in den letzten Wochen, einfach weil es mich interessiert hat, mal die Dateiformate von Gothic 1 unter die Lupe genommen und Loader für einige davon gebaut. Ich hab mich vor allem erstmal auf die statischen und animierten Objekte konzentriert, die in der Welt platziert werden. Das klappt auch schon ganz gut. Ich kann Modelle, Texturen und Skelette für die Animationen laden und anzeigen (Ich war überrascht wie simpel die Formate strukturiert sind. Bis auf die Texturdaten liegt alles unkomprimiert vor).

Jetzt hänge ich aber schon seit ein paar Tagen bei den Animationen fest. Die Skelette kann ich wie gesagt laden und auch die Animationen, also die Keyframes für die einzelnen Bones, habe ich bereits extrahiert, allerdings weiss ich beim besten Willen nicht, wie ich diese interpretieren soll.

Ein Skelett besteht aus Bones. Jeder Bone, bis auf den ersten, hat einen Eltern-Knochen. Zudem besitzt jeder Knochen eine Transformationsmatrix (Rotation und Translation), die ihn im Koordinatensystem seines Eltern-Knochens positioniert. Wenn ich das anzeige bekomme ich auch das erwartete Ergebnis.

Eine Animation definiert nun für eine feste, aber frei wählbare Untermenge aller Knochen Keyframes. Ein Keyframe besteht aus drei Winkeln und einem Offset. Eine Animation enthält also #animierterKnochen * #frames viele Keyframes.

Wie es aussieht gibt jeder Keyframe eine absolute Transformation an, also nicht etwa relativ zu der neutralen Skelett-Pose. 100% sicher bin ich mir da aber nicht. Ich bekomme aber nicht heraus, wie ich die Winkel interpretieren soll.

Bisher habe ich schon versucht die Winkel jeweils als Rotation um eine der Koordinatenachsen zu interpretieren, in Quaternionen umzuwandeln und in verschiedenen Reihenfolgen zu multiplizieren. Dabei habe ich alle möglichen Euler Varianten (z-x-z, x-y-x, y-z-y, z-y-z, x-z-x, y-x-y) und Tait–Bryan Varianten (x-y-z, y-z-x, z-x-y, x-z-y, z-y-x, y-x-z) probiert. Aber alle Varianten sehen im Ergebnis falsch aus. Allerdings auch nicht völlig falsch, sodass ich glaube die Daten aus der Datei schon richtig interpretiert zu haben.

Für mich ist das auch das erste Mal, dass ich mich mit Skelett Animationen auseinander setze, von daher gibt es hier vielleicht jemanden mit etwas mehr Erfahrung in dem Bereich? Welche Möglichkeiten gäbe es noch, die drei Winkel zu interpretieren? Ich hoffe ihr habt noch ein paar Gedankenanstösse für mich.

Grüße,
Kristof
Dateianhänge
Ein Frame aus der Angriff-Animation. Nicht völlig abwegig, jedoch ist die Ausrichtung verkehrt und die Bewegung ist offensichtlich falsch
Ein Frame aus der Angriff-Animation. Nicht völlig abwegig, jedoch ist die Ausrichtung verkehrt und die Bewegung ist offensichtlich falsch
Neutrale Stellung des Skeletts eines Molerat
Neutrale Stellung des Skeletts eines Molerat
Antworten