Übliche Art der Animation von "Bewegungen" für Laufzyklusanimationen


13

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?


1
Hier ist eine Diskussion mit einigen fantastischen Erklärungen des Konzepts: blog.wolfire.com/2011/08/…
Ben Hymers

Antworten:


10

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.


Ich habe weder den Root Motion Computer von Mixamo gesehen, noch habe ich gehört, dass er so heißt, also danke für den Link und die Erklärung! Im Grunde genommen ist es also so, wie ich es mir vorgestellt habe: entweder explizit animieren oder automatisch generieren und entweder zur Build-Zeit oder zur Laufzeit. Ich denke, ich muss das selbst im Exporter-Skript codieren. Eine Sache, über die ich jetzt mega verwirrt bin, ist die Bewegung, die sich im Laufe eines Zyklus ändert - wie um alles in der Welt würden Sie das aus dem Gameplay heraus fahren? "Move at 5m / s" bedeutet jetzt noch etwas anderes ... Richtungsänderungen werden ein Albtraum für AI! Vielleicht ist es am besten, die Durchschnittsbewegung zu verwenden?
Ben Hymers

Es sind keine Charaktere mehr vorhanden. Ich werde etwas warten, bevor ich dies als akzeptiert markiere, um weitere Meinungen zu erhalten. Danke für deine Antwort!
Ben Hymers

Bei Root-Bewegungen steuern Sie die Geschwindigkeit des Players nicht direkt. Eigentlich haben Sie nur die Kontrolle über die Wiedergabe der Animationsrate, und dann können Sie die Animation direkt auf den Vorwärts-Z-Wert steuern. Das 5-m / s-Beispiel, das ich gegeben habe, betraf die herkömmliche Methode zum Lösen von Fußrutschen, bei der versucht wird, die Wiedergaberate nur an die Geschwindigkeit anzupassen, mit der Sie sich bewegen, und eine konstante Geschwindigkeit anzunehmen.
Tetrad

Als Gameplay-Programmierer klingt das wie ein Albtraum :) Haben die Animatoren die Kontrolle über etwas so Wichtiges wie die Bewegungsgeschwindigkeit von etwas Animiertem? Nein Danke! Ich ziehe es sehr vor, die Informationen zu extrahieren, damit ich sie invertieren und die Wiedergabegeschwindigkeit der Animation basierend auf der Bewegungsgeschwindigkeit einstellen kann, anstatt umgekehrt. Das ist der Grund, warum nichtlineare Bewegungen mich verdammt verwirren, und vielleicht ist das ein guter Grund, es umgekehrt zu machen.
Ben Hymers

Gah, verfluche Stack Exchange für die Eingabe des Kommentars zum Versuch, eine neue Zeile zu beginnen ... Ich wollte gerade sagen, auch wenn Sie die Animation die Bewegung antreiben lassen, wird es immer noch ein Problem für z. B. AI-Charaktere sein. Was ist, wenn sie versuchen, einen Punkt zu erreichen, aber ihre Bewegungsanimation von Seite zu Seite schwankt (sagen wir, es ist eine betrunkene Staffelungsanimation)? Wie können sie wissen, in welche Richtung sie blicken sollen?
Ben Hymers
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.