Ich habe dies gerade in den Blender-Künstlerforen gepostet, bevor mir klar wurde, dass ich wahrscheinlich eine bessere Antwort von einem spezielleren Publikum bekommen würde, also entschuldige mich für das Cross-Posting! Es ist aus den richtigen Gründen :)
Ich bin ein Programmierer, der versucht, einen Charakter, der für ein Spielprojekt läuft, mit Ogre zu animieren. Ich habe in Blender einen sehr einfachen Laufzyklus erstellt und ihn nach Ogre exportiert, und er funktioniert einwandfrei. Gut, ich meine es funktioniert, aber es gibt schreckliche Fußrutschen. Das liegt daran, dass ich gerade den Einstieg (am Anfang) in Blender animiert habe und natürlich nicht weiß, welcher "Einstiegsgeschwindigkeit" das entspricht. Wenn ich also den Charakter im Spiel bewege, macht die Bewegung nichts. Sie müssen mit der Bewegung der Füße in der Animation übereinstimmen.
Meine Frage lautet also: Was ist der normale Ansatz für diese Art von Dingen? Bei der Arbeit verwenden wir Maya und die Animatoren animieren entweder einen speziellen 'moveTrans'-Knoten, der die "Position" des Charakters darstellt (oder lassen ihn vom Exporteur aus der Bewegung des Wurzelknotens generieren), dann kann das Spiel dies lesen um zu wissen, wie schnell die Animation den Charakter bewegt. In der Maya-Datei geht der Charakter einen Zyklus vorwärts und dieser zusätzliche Knoten folgt ihnen an den Füßen. Ich habe so etwas in Open-Source-Ländern noch nicht gesehen, und das ist im Ogre Exporter-Skript mit Sicherheit nicht vorgesehen. Was macht ihr normalerweise dafür?
Antworten:
Es gibt zwei Möglichkeiten: Root Motion oder "In Code".
Mit root motion haben Sie im Grunde genau das, was Sie mit dem "moveTrans" -Knoten vorschlagen. Sie bestimmen anhand der Bewegung dieses Objekts, wie schnell die Laufzyklen wiedergegeben werden sollen. Möglicherweise können Sie eine Art Rückwärtssuche durchführen, um herauszufinden, an welcher Position X Sie sich befinden müssen, um herauszufinden, an welchem Frame Sie sich befinden möchten. Der eigentliche Vorteil der Root-Bewegung besteht jedoch darin, dass Sie berücksichtigen müssen, dass Bewegung kein echter linearer Pfad ist, um wirklich realistische Animationen zu erhalten. Echte Menschen bewegen sich mit der Zeit mit variabler Geschwindigkeit, oder sie mischen ein bisschen nach links und rechts oder was auch immer.
Mixamo hat mit Unity ein gutes Beispiel für Root Motion Control gemacht. Hier gibt es ein Video davon: http://vimeo.com/12052874
Jetzt hat die Wurzelbewegung ihre Nachteile. Es kann mit Dingen wie dem Versuch, die "Geh" -Animation zum Arbeiten auf Treppen zu bringen, schwierig werden (idealerweise hätten Sie eine separate Treppen- / Leiter-Kletteranimation und würden die gesamte Bewegung dafür auch in der Animation ausführen). Ich bin mir auch nicht wirklich sicher, wie IK wirklich damit spielt, wenn überhaupt.
Jetzt ist es von der Programmierseite aus viel einfacher, es "in Code" zu machen. Was ich vorschlage, ist zuerst sicherzustellen, dass alle Ihre Einheiten konsistent sind. Zum Beispiel 1 Einheit in Maya und Ihr Spiel ist 1 Meter. Dann veranlassen Sie Ihre Künstler, einen Charakter beim Gehen zu animieren (komplett mit Vorwärtsbewegung). Verwenden Sie dies, um die Geschwindigkeit der Animation zu ermitteln und die Animation ohne die Vorwärtsgeschwindigkeit zu exportieren. Verwenden Sie dies, um herauszufinden, wie schnell die Animation abgespielt werden kann. Wenn die Laufanimation bei 1x Geschwindigkeit 5 m / s beträgt und Sie möchten, dass der Player mit 7 m / s läuft, spielen Sie einfach mit 7/5 = 1,4-facher Geschwindigkeit. Wenn Ihr Modell vergrößert oder verkleinert wird, multiplizieren Sie die Wiedergaberate der Animation mit der Umkehrung der Skala. Ein Kerl mit halber Körpergröße muss doppelt so schnell laufen, um die gleiche Geschwindigkeit zu erreichen wie ein Kerl mit 1x Waage.
quelle