Projet 2 : animation de scènes complexes

Modalités

Cahier des charges

L'objectif de ce projet est d'animer une scène complexe grâce à différentes méthodes d'animation reliées grâce aux modèles à couches. Ce projet sera implémenté en C++ en utilisant l'API OpenGL et son langage de shaders GLSL.

Après avoir implémenté une base commune (dont fait partie les TPs précedents), vous pourrez choisir d'ajouter d'autres méthodes d'animation ou d'améliorer celles implémentées. Nous vous en proposons quelques unes à titre d'exemple, mais vous êtes tout à fait libre d'en choisir d'autres.

Vous avez à votre disposition les données utilisées pour le projet ainsi que les outils pour les exporter et les importer dans votre programme. N'hésitez pas à les modifier si vous le souhaitez. Les .obj peuvent être importés et exportés de Maya.

Animation par squelette

Le personnage est animé grâce à un squelette d'animation.

Cinématique directe

Le squelette d'animation est à animer par cinématique directe : les valeurs des articulations sont données directement par l'utilisateur.

Skinning

Le modèle visuel du personnage doit être déformé par skinning pour suivre l'animation du squelette. Le skinning est implémenté en glsl.

Cinématique inverse

La cinématique directe est parfois contraignante lorsque l'on veut animer des mouvements contraints. Pour ce type de mouvements, la cinématique inverse est en général plus appropriée.

Animation physique

Beaucoup de mouvements naturels peuvent être reproduits fidèlement par animation physique. Nous allons étudier quelques uns de ces phénomènes.

Animation de tissu

Le vêtement du personnage doit être animé par un système masses-ressorts. Ce système masses-ressorts devra être stable et être en collision avec le personnage sans glisser du corps.

Vous pourrez pour améliorer les interactions calculer les collisions entre maillages et accélérer cette détection de collision grâce aux méthodes vues en cours telles que la multi-résolution ou les volumes englobants ou la discrétisation de l'espace.

Animation de chevelure

Le personnage doit être doté d'une chevelure animée par chaînes articulées. Commencez par animer une mèche puis étendez votre système à toute une chevelure.

Pour cela, vous devrez rajouter des masses et des ressorts à votre système dynamique et faire en sorte que la racine du cheveux reste fixe par rapport au crâne du personnage.

Une fois le modèle mécanique créé, vous pourrez rajouter un modèle visuel à la chevelure.

Système de particules

Les systèmes de particules sont des systèmes composés uniquement de masses. Ces masses possèdent une durée de vie. Lorsque cette durée de vie est atteinte, la particule meurt donc disparaît.

Utilisez un système de particules pour animer une fontaine. Un squelette de code de système de particules vous est fourni. Les méthodes de création d'une particule et d'animation d'un pas de temps du système sont à compléter. Dans animation, ajoutez un objet de type ParticleEngine que vous dessinerez dans Animation::renderScene() et animerez dans la fonction Display() de main.cpp.

Vous pourrez rajouter la collision des particules avec les objets dynamiques déjà créés ou créer d'autres effets tels que des flammes ou une explosion ou de la pluie en modifiant les paramètres du système de particules, le modèle visuel ou en plaquant une texture sur les particules.

Ajout de forces

Ajoutez une force de vent à votre système.

Vous pourrez le créer non-uniforme ou paramétrer des bourrasques de vent à la souris.

Objets déformables

Vous pouvez également penser à d'autres systèmes masses-ressorts à créer dans votre scène, en particulier des objets déformables facilement animables par un réseau 3D de masses-ressorts.

Déformation de l'espace

Pour certains effets, une déformation de l'espace dans lequel l'objet est plongé est une solution simple et rapide.

Fonctions

Vous devez tous implémenter un twist de la scène. Ce twist devra à la fois s'appliquer au personnage (donc dans le shader) et aux autres objets de la scène (il faut donc créer une méthode dans Animation qui déforme les autres objets).

Vous pourrez bien sûr essayer d'autres fonctions pour déformer l'espace.

Free-Form Deformations

Vous pouvez implémenter un exemple de free-form deformations. Vous pouvez par exemple plonger une sphère dans une grille de contrôle.

Morphing

Les déformations continues de maillages font souvent appel à de l'interpolation entre maillages.

Morphing

Nous allons ajouter une fontaine de laquelle notre système de particules est lancé. Un modèle de fontaine est donné dans le fichier data/fountain1.obj. Vous pouvez charger ce modèle dans un objet de type objLoader et le transférer dans un objet de type Mesh pour l'affichage (regardez ce qui est fait pour characterMesh). Chargez et dessinez ce modèle dans Animation et modifiez votre système de particules pour que la scène soit correcte.

Cette fontaine n'est esthétiquement pas remarquable. Heureusement, quand un sort est lancé à la scène (twist, vortex, ...), votre fontaine se transforme alors en une fontaine plus élaborée (data/fountain2.obj). Ajoutez à Animation une méthode d'interpolation linéaire de data/fountain1.obj à data/fountain2.obj.

Vous pourrez bien sûr utilisez des méthodes de morphing différentes : vitesse non-uniforme de morphing, morphing sur une partie seulement de l'objet, ...

Blendshapes

Sur le même schéma, vous pouvez implémenter un système de blendshapes.

Évaluation