Bases du mélange d'animation

23

Disons que j'ai un cadre avec des personnages qui peuvent courir et marcher et bien sûr, rester immobiles.

Ai-je raison de penser que le mélange d'animation est le processus de transition en douceur entre celles-ci en générant des animations dynamiques lors de l'exécution?

Si oui, quelle est la théorie de base de la façon dont cela fonctionne et comment pourrais-je la mettre en œuvre?

SirYakalot
la source
1
Je crois que c'est juste une interpolation linéaire entre chacun des os de la dernière image d'une animation à la première image de l'autre.
annonymously
Ou une interpolation linéaire avec smoothstep, si vous voulez une moyenne pondérée (:
Gustavo Maciel
@ Gustavo-Gtoknu pouvez-vous expliquer davantage ce que vous venez de dire?
SirYakalot
vous effectuez une interpolation linéaire en alpha des deux images à fusionner, à l'inverse de l'autre. les deux en fonction du temps. Vous pouvez lisser ou utiliser une moyenne pondérée dans l'interpolation pour avoir un effet différent.
Gustavo Maciel

Réponses:

18

Le mélange d'animation de personnage est plus général et peut être utilisé pour:

  • Calculer des transitions fluides entre 2 clips;
  • Créer des animations complètement nouvelles à partir d'animations existantes (potentiellement plus de 2 en même temps);
  • Atteindre des comportements de type IK;
  • etc.

L'idée de base est que pour deux squelettes identiques avec des clips d'animation différents, pour chaque rotation conjointe, vous calculez des valeurs intermédiaires. Les clips d'animation sont représentés par des rotations. L'interpolation linéaire n'est donc pas ce que vous devez utiliser si vous voulez des résultats précis (même si vous utilisez des angles d'Euler). Vous pouvez utiliser slerp par exemple mais des solutions plus complexes existent.

Il s'agit d'un problème complexe avec des solutions complexes. Fondamentalement, si vous avez deux clips d'animation A et B:

  • Si A et B sont complètement différents (mélange de saut et de natation), alors vous aurez probablement des résultats étranges / drôles;
  • Si A et B sont similaires (deux clips d'animation de marche), vous devez d'abord les synchroniser pour les mélanger lorsque les deux pieds gauches sont au sol par exemple.
  • etc.

Si vous êtes intéressé, je vous suggère de commencer par lire cet article afin de mieux comprendre quelles sont les difficultés: http://graphics.cs.wisc.edu/Papers/2003/KG03/regCurves.pdf

Ce n'est pas le plus récent, mais il est facile à lire.

J'espère que ça aide. Meilleures salutations.

Korchkidu
la source
5

Tout d'abord, je suppose que vous parlez d'animation squelettique (en particulier les graphiques 3D), car le mélange d'animations ne s'applique pratiquement qu'à l'animation squelettique. Si vous parlez d'animations 2D basées sur des sprites (vous ne l'avez pas spécifié dans votre question), vous pouvez à peu près oublier le mélange d'animations.

Avec cela à l'écart ...

Ai-je raison de penser que le mélange d'animation est le processus de transition en douceur entre celles-ci en générant des animations dynamiques lors de l'exécution?

C'est à peu près ce que le terme signifie, oui. Cette expression "générer des animations dynamiques" est cependant un peu trompeuse; qui évoque l'animation procédurale et ce n'est pas exactement ce que vous faites.

Le "mélange d'animation" consiste à effectuer une transition entre deux clips d'animation en utilisant un peu des deux animations avec la pondération d'un clip en hausse tandis que la pondération de l'autre clip diminue. Cela fonctionne mieux avec l'animation squelettique, de sorte que la rotation de chaque articulation est définie à mi-chemin entre l'animation de cette articulation dans deux clips d'animation différents, avec la pondération de chaque clip changeant au fil du temps. Autrement dit, vous calculeriez la rotation de chaque joint quelque chose comme:

rotCombined = weightA*rotA + weightB*rotB

Maintenant, bien que le mélange d'animation fonctionne mieux avec une animation squelettique, vous pouvez également le faire avec une animation de sommet (par exemple MD2). Il s'agit plus d'une note historique car peu de moteurs de jeu modernes utilisent l'animation de sommet, mais vous pouvez définir les positions de sommet de la même manière, comme une pondération entre la position de sommet dans deux animations différentes. Cela pourrait entraîner des interpolations étranges (par exemple, des parties du maillage s'effondrant ou se retournant) si les deux animations étaient trop différentes, tandis que l'animation squelettique garantit que les différentes parties du maillage restent intactes.

jhocking
la source
Lorsque vous dites que vous ne pouvez pas faire cela avec des graphiques 2D, voulez-vous dire une animation basée sur un sprite? J'essaie de savoir comment mélanger certaines animations 2D créées dans des mécanismes en fonction de la position et de la rotation des différentes parties du corps, mais je ne vois pas pourquoi ce n'est pas possible simplement parce qu'elles sont en 2D.
mallardz
Parce qu'il n'y a aucun moyen de générer de nouvelles images dans une animation sprite. Dans l'animation 3D, les images individuelles ne sont pas générées à l'avance.
jhocking
Je comprends, mais l'animation 2D ne doit pas être uniquement basée sur la modification de l'image-objet entière. Vous pouvez composer un objet à partir de plusieurs sprites et animer leur rotation et leur position, etc. J'essayais de savoir comment faire cela quand j'ai lu votre réponse, et votre première ligne m'a rendu triste :(! Mais heureusement, il s'avère que c'est très facile à faire dans Unity et je n'imagine pas plus difficile que le mélange 3D pour ceux qui roulent leurs propres moteurs
mallardz
1
ah ouais je voulais dire une animation basée sur un sprite, je vais modifier ma réponse
jhocking