Projet 2 : Animation de personnages

Modalités

Cahier des charges

L'objectif de ce projet est de réaliser un logiciel d'animation de personnages utilisant les différentes techniques vues pendant les cours. Ce moteur sera implémenté en C++ en utilisant le code développé lors des TPs précédents.

Après avoir implémenté une base commune (les fonctionnalités présentées dans les TP1 et TP2 rappelées ci-dessous), vous pourrez choisir d'ajouter d'autres fonctionnalités ou d'améliorer les précédentes. Les méthodes notées ainsi sont les méthodes de base à ajouter obligatoirement, celles notées ainsi peuvent nécessiter un certain temps à mettre en place.

Capture de mouvements

Le programme fourni permet de charger des séquences de capture de mouvements. Nous allons mettre en place plusieurs outils d'analyse et d'utilsation de données de capture de mouvements.

Analyse de données

Etudier les deux séquences de capture de mouvements fournies (marche et course) pour extraire le nombre de degrés de liberté de chacune des articulations.

Mélange d'animations

Pour le moment, les mouvements possibles du personnage sont limités à ceux capturés. Nous allons mettre en place la possibilité d'utiliser plusieurs séquences de capture de mouvements pour créer un nouveau mouvement.

Mettez en place une interpolation linéaire directe entre les deux animations. Ainsi, la valeur d'un degré de liberté de la nouvelle animation sera une combinaison linéaire de ce même degré de liberté dans les deux animations de départ.

Une interpolation linéaire de base peut entraîner des problèmes dus à l'asynchronicité des deux mouvements. Mettez en place un pré-aligement adéquat des deux animations. On commencera par trouver une frame de départ commune. Certains pourront, comme extension, aligner les deux mouvements en fréquence.

Si on a deux squelettes dans leur pose de repos, l'un avec un angle de 180°, l'autre avec un angle de -180° sur le noeud racine, ils sont dans la même position mais le squelette résultant du mélange se retrouve avec un angle de 0° sur le noeud racine et est donc différent des deux squelettes de base. Cela est dû à la non-unicité des angles d'Euler. Pour résoudre ce problème, réaliser une interpolation sphérique (slerp, implémentée dans qglviewer) en utilisant une représentationen quaternions des rotations. On montrera sur le résultat cité plus haut le résultat.

On pourra étendre le mélange d'animations à plus de deux animations. Pour cela et pour tester les méthodes précédentes, on pourra utiliser les séquences de capture de mouvements mises à disposition par CMU et disponibles en format BVH ici.

Déformation de surfaces

Une fois la cinématique du squelette d'animation définie, il faut transférer cette animation au modèle visuel du personnage, ici un maillage.

Skinning linéaire

Mettre en place le skinning rigide. Cela signifie que chaque sommet du maillage est influencé par une seule articulation du squelette.

Mettre en place le skinning lisse. Pour cela, on implémentera le distance cylindrique vue en cours. Les résultats devraient être comparables à ceux obtenus avec Maya. On pourra étendre la gestion d'évènements quand l'utilisateur appuie sur la touche w pour naviguer entre les différents types de poids.

Les poids obtenus jusqu'à présent se basent sur la distance euclidienne, ce qui peut entraîner des problèmes au niveau des jambes par exemple. Calculez des poids basés sur la distance géodésique.

Quaternions duaux

On peut observer des artefacts comme des pincements au niveau des coudes ou des genoux dûs à la non-rigidité des matrices de transformation du skinning linéaire. Une manière de résoudre ces problèmes est d'utiliser les quaternions duaux. Après avoir transformé les transformations aux articulations en quaternions duaux, utiliser les quaternions duaux pour calculer les nouvelles positions des sommets lors du skinning. Un bon exemple pour prouver l'efficacité des quaternions duaux est le twist de l'avant-bras. Les détails nécessaires sur le calcul avec quaternions duaux se trouvent dans cet article.

FFD

Pour étudier d'autres types d'animation que les animations par squelette, plongez votre scène dans une grille de contrôle et mettez en place les free-form deformations.

Évaluation