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?
Antworten:
Das Mischen von Zeichenanimationen ist allgemeiner und kann für folgende Zwecke verwendet werden:
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 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.
quelle
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 ...
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.
quelle