Grundlagen der Animationsüberblendung

23

Angenommen, ich habe ein Framework mit Charakteren, die rennen und laufen und natürlich still stehen können.

Habe ich Recht, wenn ich davon ausgehe, dass Animations-Blending der reibungslose Übergang zwischen diesen ist, indem zur Laufzeit dynamische Animationen generiert werden?

Wenn ja, wie lautet die grundlegende Theorie zur Funktionsweise und wie würde ich sie implementieren?

SirYakalot
quelle
1
Ich glaube, es ist nur eine lineare Interpolation zwischen den einzelnen Bones vom letzten Bild einer Animation bis zum ersten Bild der anderen.
Anonym
Oder lineare Interpolation mit Smoothstep, wenn Sie einen gewichteten Durchschnitt wollen (:
Gustavo Maciel
@ Gustavo-Gtoknu kannst du mehr über das erklären, was du gerade gesagt hast?
SirYakalot
Sie führen eine lineare Interpolation in Alpha beider zu überblendender Frames auf der Umkehrung des anderen durch. beides in Funktion der Zeit. Sie können einen geglätteten Schritt ausführen oder einen gewichteten Durchschnitt für die Interpolation verwenden, um einen anderen Effekt zu erzielen.
Gustavo Maciel

Antworten:

18

Das Mischen von Zeichenanimationen ist allgemeiner und kann für folgende Zwecke verwendet werden:

  • Berechnung fließender Übergänge zwischen 2 Clips;
  • Erstellen völlig neuer Animationen aus vorhandenen (möglicherweise mehr als 2 gleichzeitig);
  • IK-ähnliches Verhalten erreichen;
  • etc.

Die Grundidee ist, dass Sie für zwei identische Skelette mit unterschiedlichen Animationsclips für jede Gelenkdrehung Zwischenwerte berechnen. Animationsclips werden mit Rotationen dargestellt. Daher sollten Sie die lineare Interpolation nicht verwenden, wenn Sie genaue Ergebnisse wünschen (auch wenn Sie Euler-Winkel verwenden). Sie können beispielsweise slerp verwenden, es gibt jedoch komplexere Lösungen.

Dies ist ein komplexes Problem mit komplexen Lösungen. Grundsätzlich gilt, wenn Sie zwei Animationsclips A und B haben:

  • Wenn A und B völlig verschieden sind (Mischen von Springen und Schwimmen), haben Sie wahrscheinlich seltsame / lustige Ergebnisse.
  • Wenn A und B ähnlich sind (zwei laufende Animationsclips), müssen Sie sie zuerst synchronisieren, um sie zu überblenden, wenn sich beispielsweise beide linken Füße auf dem Boden befinden.
  • etc.

Wenn Sie interessiert sind, sollten Sie zunächst diesen Artikel lesen, damit Sie die folgenden Probleme besser verstehen: http://graphics.cs.wisc.edu/Papers/2003/KG03/regCurves.pdf

Es ist nicht das aktuellste, aber es ist leicht zu lesen.

Ich hoffe das hilft. Freundliche Grüße.

Korchkidu
quelle
5

Zunächst gehe ich davon aus, dass Sie über Skelettanimationen (insbesondere 3D-Grafiken) sprechen, da die Überblendung von Animationen so gut wie nur für Skelettanimationen gilt. Wenn Sie über 2D-Sprite-basierte Animationen sprechen (die Sie in Ihrer Frage nicht angegeben haben), können Sie das Überblenden von Animationen so gut wie vergessen.

Damit aus dem Weg ...

Habe ich Recht, wenn ich davon ausgehe, dass Animations-Blending der reibungslose Übergang zwischen diesen ist, indem zur Laufzeit dynamische Animationen generiert werden?

Das ist so ziemlich das, was der Begriff bedeutet, ja. Dieser Satz "Dynamische Animationen erzeugen" ist jedoch ein wenig irreführend. Das erinnert an prozedurale Animation und das ist nicht genau das, was Sie tun.

"Animationsüberblendung" ist der Übergang zwischen zwei Animationsclips, indem ein Teil beider Animationen verwendet wird, wobei die Gewichtung eines Clips erhöht und die Gewichtung des anderen Clips verringert wird. Dies funktioniert am besten mit Skelettanimationen, sodass die Drehung jedes Gelenks in zwei verschiedenen Animationsclips auf einen Mittelpunkt zwischen der Animation dieses Gelenks eingestellt wird, wobei sich die Gewichtung jedes Clips im Laufe der Zeit ändert. Das heißt, Sie würden die Drehung jedes Gelenks wie folgt berechnen:

rotCombined = weightA*rotA + weightB*rotB

Während Animationsüberblendungen am besten mit Skelettanimationen funktionieren, können Sie dies jetzt auch mit Scheitelpunktanimationen (z. B. MD2) tun. Dies ist eher ein historischer Hinweis, da nur wenige moderne Spiele-Engines Scheitelpunktanimationen verwenden. Sie können die Scheitelpunktpositionen jedoch auf dieselbe Weise festlegen, als Gewichtung zwischen den Scheitelpunktpositionen in zwei verschiedenen Animationen. Dies könnte zu seltsam aussehenden Interpolationen führen (z. B. Teile des Netzes kollabieren oder sich von innen nach außen drehen), wenn die beiden Animationen zu unterschiedlich sind, während die Skelettanimation sicherstellt, dass die verschiedenen Teile des Netzes ganz bleiben.

jhocking
quelle
Wenn Sie sagen, dass Sie dies mit 2D-Grafiken nicht tun können, meinen Sie damit eine Sprite-basierte Animation? Ich versuche herauszufinden, wie einige in Mecanim erstellte 2D-Animationen basierend auf der Position und Drehung einzelner Körperteile gemischt werden können, aber ich verstehe nicht, warum dies nicht möglich ist, nur weil es sich um 2D-Animationen handelt.
Mallardz
Weil es keine Möglichkeit gibt, neue Frames in einer Sprite-Animation zu generieren. In der 3D-Animation werden die einzelnen Bilder nicht vorzeitig generiert.
jhocking
Ich verstehe, aber 2D-Animation muss nicht nur auf dem Ändern des gesamten Sprites basieren. Sie könnten ein Objekt aus mehreren Sprites zusammensetzen und deren Rotation und Position animieren usw. Ich habe versucht, herauszufinden, wie das geht, als ich Ihre Antwort gelesen habe, und Ihre erste Zeile hat mich traurig gemacht :(! Aber zum Glück stellt sich heraus, dass es sehr ist Einfach in Unity zu machen und ich stelle mir vor, dass es nicht schwieriger ist als 3D-Blending für diejenigen, die ihre eigenen Motoren
drehen
1
ach ja ich meinte sprite-basierte animation, ich bearbeite meine
antwort