Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • Alexandre.Meyer/m1if37-animation
  • Alexandre.Meyer/m2-apprentissage-profond-image
  • Alexandre.Meyer/m2-animation
  • Alexandre.Meyer/hugo-web-minimal
  • Alexandre.Meyer/lifami
  • Alexandre.Meyer/lifapcd
  • Alexandre.Meyer/www
  • Alexandre.Meyer/lifstage
8 results
Show changes
Commits on Source (34)
Showing
with 417 additions and 372 deletions
......@@ -10,7 +10,7 @@
Le site web est désormais fabriqué par ```Hugo``` (thème [congo](https://jpanther.github.io/congo/)). les sources se trouvent dans le répertoire ```web```.
Le site web est mis à jour par intégration continue (CI/CD) à chaque fois que vous faites un push (rien besoin d'autre, à part attendre quelques secondes). Le script d'intégration continue est ```.gitlab-ci.yml```. Pour voir le résultat du script de génération, [allez ici](https://forge.univ-lyon1.fr/Alexandre.Meyer/m1if37-animation/-/jobs) ou depuis l'interface dans CI/Jobs.
Le fichier ```site/config.toml``` permet de configurer la génération du site. Mais noramlement il n'y a pas besoin d'y toucher.
Le fichier ```site/config.toml``` permet de configurer la génération du site. Mais normalement il n'y a pas besoin d'y toucher.
* Les pages web sont générées à partir du répertoire ```web/content```.
* La page principale du site est ```web/content/_index.html```. Il faut bien laissé le ```_```, il indique qu'il y a des sous-répertoires
* ```web/content/controle``` pour la partie "Conrtôle d'animation". ```web/content/controle/index.md``` produit la page de cette partie.
......
......@@ -32,6 +32,7 @@ publishDir = "public"
# footer= ""
# rss = ""
article.showDate = false
favicon = "favicon.ico"
# [[footer]]
......
......@@ -18,39 +18,40 @@ Volume horaire : 10h30 CM, 19h30 TP
## Thématiques abordées
### Animation par modèles physiques (F. Zara) - 4h30 CM, 6h30 TP
### Animation par modèles physiques (F. Zara) - 4h30 CM, 6h45 TP
* Concepts physiques (forces, lois de Newton)
* Méthodes d'intégration numérique
* [La page web de cette partie](https://perso.liris.cnrs.fr/fzara/Web/M1Animation.html)
### Animation de personnage (A. Meyer) - 4h30 CM, 6h30 TP
### Animation de personnage (A. Meyer) - 4h30 CM, 6h45 TP
* Animation basée squelette
* Déformation de maillage (skinning)
* [La page web de cette partie](https://perso.liris.cnrs.fr/alexandre.meyer/public_html/www/doku.php?id=charanim_m1#master_1_informatique_-_ue_m1if37_animation_en_synthese_d_image)
* Graphe d'animation
* Capture de mouvement
* [La page web de cette partie](personnage)
### Contrôle de mouvement (Nicolas Pronost) - 1h30 CM, 6h30 TP
### Contrôle de mouvement (Nicolas Pronost) - 1h30 CM, 6h TP
* Mouvement d'objets rigides articulés
* [La page web de cette partie](controle)
## Emploi du temps 2023
## Emploi du temps 2024-2025
![documents/M1if37_edt.png](doc/M1if37_edt.png)
* Cours en salle TD10 Nautibus
* Cours en salle TD005 Nautibus
* TP en salles TP11, TP12 Nautibus
* TP en salles TP121, TP123 Nautibus
## Modalités de contrôle des connaissances (MCC)
* **1 note de CCF** portant sur les 3 parties du cours
* **3 notes de TP** : TP F. Zara, TP A. Meyer, TP N. Pronost (code + rapport + démo ou vidéo)
* **Dates des évaluations** :
* Examen écrit : mercredi 24 mai 2023 8h-9h30 en C3
* Démo de TP : mercredi 24 mai 2023, de 9h45 à 12h en TP11, TP12
* Date limite de rendu des 3 archives : mercredi 24 mai 2023 12h
* Examen écrit : **mercredi 28 mai 2025, 8h à 9h30** en salle C008 Nautibus
* Démo de TP : **mercredi 28 mai 2025, de 9h45 à 13h** en TP121, TP123 Nautibus
* Date limite de rendu des 3 archives : **mercredi 28 mai 2025 13h**
* **Modalité de rendu des TPs :** <p style="text-align:justify;">
* Une archive sera à déposer sur TOMUSS (dans les 3 colonnes correspondantes). Cette archive contiendra le code du TP + un rapport.
......
---
title: ""
description: "Partie Animation de personnage"
---
# Partie Animation de personnage
* Alexandre Meyer
* 4h30 CM, 6h30 TP
* [L'ancienne page de cette partie](https://perso.liris.cnrs.fr/alexandre.meyer/public_html/www/doku.php?id=charanim_m1#master_1_informatique_-_ue_m1if37_animation_en_synthese_d_image)
![](../doc_charanim/charanim_tpose.jpg)
## Cours
* [Systèmes articulés : cinématique directe](https://perso.liris.cnrs.fr/alexandre.meyer/teaching/master_charanim/aPDF_COURS_M1/M1_1_SkeletonBasedAnimation.pdf)
* [Edition d'animations, Graphe d'animations](https://perso.liris.cnrs.fr/alexandre.meyer/teaching/master_charanim/aPDF_COURS_M1/M1_2_MotionControlAndEditing.pdf)
* [Capture de mouvements](https://perso.liris.cnrs.fr/alexandre.meyer/teaching/master_charanim/aPDF_COURS_M1/M1_3_MotionCapture.pdf)
## Les vidéos des 3 CM (2020)
[Les vidéos](video)
## Le TP
* [TP animation de personnage virtuel](tp)
* [[master_charanim_code|Le code initial]]
#### Rendu
Les archives sont à rendre sur TOMUSS
* TP Animation de personnage virtuel
* vous devez rendre une archive avec un readme.txt ou readme.md expliquant ce que vous avez fait et comment lancer le programme
* une VIDEO de DEMO ou une démo en LIVE
* Barème "Personnage"
* (5 points) TP 1ère partie : affichage d'une animation BVH
* (3 points) Contrôleur d'animation : la base (pilotage au clavier d'un déplacement)
* Machine à état (4 points maximum)
* basique : pour une machine à état de base avec 4 animations : iddle, marcher, courir, sauter ou kick
* avancé : une machine à état plus complète avec de nombreuses animations (une dizaine) : voir celles du répertoire motionGraph_second_life, etc.
* Motion Graphe (6 points max)
* basique : transition vers un autre animation en cherchant à la volée une transition compatible
* avancé : un motion graph construit automatiquement en pré-calcul (voir la fin de l'énoncé qui pointe vers un complément de sujet).
* (3 points) Interpolation entre 2 frames, à utilise pour les transitions ou pour une bonne gestion du temps
* (1 points) Collision entre personnage et sphères (voir le code PhysicalWorld)
* (1 points) bonus de qualité/cohérence de la scène
* Le total fait plus que 20 car les points FSM/graphe d'animation sont à comprendre avec un OU : la machine à état rapporte moins de points, car bien moins difficile.
---
title: ""
description: "Partie Animation de personnage"
---
# Partie Animation de personnage
* Alexandre Meyer
* 4h30 CM, 6h30 TP
* [L'ancienne page de cette partie](https://perso.liris.cnrs.fr/alexandre.meyer/public_html/www/doku.php?id=charanim_m1#master_1_informatique_-_ue_m1if37_animation_en_synthese_d_image)
![](../doc_charanim/charanim_tpose.jpg)
## Cours
* [Systèmes articulés : cinématique directe](https://perso.liris.cnrs.fr/alexandre.meyer/teaching/master_charanim/aPDF_COURS_M1/M1_1_SkeletonBasedAnimation.pdf)
* [Edition d'animations, Graphe d'animations](https://perso.liris.cnrs.fr/alexandre.meyer/teaching/master_charanim/aPDF_COURS_M1/M1_2_MotionControlAndEditing.pdf)
* [Capture de mouvements](https://perso.liris.cnrs.fr/alexandre.meyer/teaching/master_charanim/aPDF_COURS_M1/M1_3_MotionCapture.pdf)
## Les vidéos des 3 CM (2020)
[Les vidéos](video)
## Le TP
* [Le code initial](code)
* [TP animation de personnage](tp)
#### Rendu
TP Animation de personnage virtuel
* Les archives sont à rendre sur TOMUSS
* vous devez rendre une archive avec un readme.txt ou readme.md expliquant ce que vous avez fait et comment lancer le programme
* une VIDEO de DEMO ou une démo en LIVE
Barème "Personnage"
* (5 points) TP 1ère partie : affichage d'une animation BVH
* (3 points) Contrôleur d'animation : la base (pilotage au clavier d'un déplacement)
* Machine à état (4 points maximum)
* basique : pour une machine à état de base avec 4 animations : idle, marcher, courir, sauter ou kick
* avancé : une machine à état plus complète avec de nombreuses animations (une dizaine) : voir celles du répertoire motionGraph_second_life, etc.
* Motion Graphe (6 points)
* basique : transition vers un autre animation en cherchant à la volée une transition compatible
* avancé : un motion graph construit automatiquement en pré-calcul
* (3 points) Interpolation entre 2 frames, à utilise pour les transitions ou pour une bonne gestion du temps
* (2 points) Collision entre personnage et sphères (voir le code PhysicalWorld)
* (1 points) bonus de qualité/cohérence de la scène
Le total fait plus que 20 car les points FSM/graphe d'animation sont à comprendre avec un OU : la machine à état rapporte moins de points, car moins difficile.
# Code pour les TP d'animation de personnage en C++ (en M1)
## Les fichiers à recupérer
Le code se base sur gkit2light (une branche) et se récupère avec Git comme ceci:
```
git clone -b master_CharAnim https://forge.univ-lyon1.fr/Alexandre.Meyer/gkit2light.git gkit2light-master_CharAnim
```
qui fait un clone du dépôt gkit2light, branche `master_CharAnim` et range le tout dans le répertoire `gkit2light-master_CharAnim`
ou alors
```
git clone https://forge.univ-lyon1.fr/Alexandre.Meyer/gkit2light.git gkit2light-master_CharAnim
cd gkit2light-master_CharAnim
git checkout master_CharAnim
=> le update avec un nom de branche permet de passer dans une autre branche
```
## Pour compiler sous Linux avec codeblocks
```
cd gkit2light-master_CharAnim
premake5 --file=master_CharAnim.lua codeblocks
```
puis ouvrir le projet `master_CharAnim.cbp`
## Pour compiler sous Linux avec make
```
cd gkit2light
premake5 --file=master_CharAnim.lua gmake
make -f master_CharAnim.make ou juste make
bin/master_CharAnim
```
## Pour compiler sous Linux de chez vous (ubuntu)
* [voir le apt-get install ... ici](http://perso.univ-lyon1.fr/jean-claude.iehl/Public/educ/M1IMAGE/html/group__installation.html)
* `sudo apt install premake4 premake5`
* puis comme indiqué plus haut
## Pour compiler sous Windows chez vous avec VSCode ou CodeBlocks ou VisualStudio
* Installez Git
* Installez Codeblocks ou VSCode avec Mingw OU Visual Studio
* Explorateur de fichier, placez vous dans le répertoire de vos fichiers, bouton droit "git bash here" puis le clone indiqué plus haut ...
* [Téléchargez les librairies (SDL,Glew, etc.) pour Windows ici](https://perso.univ-lyon1.fr/jean-claude.iehl/Public/educ/M1IMAGE/extern_mingw_visual.zip)
* Copiez le répertoire 'extern' dans le répertoire principal de gkit2light
* Vous devez aussi copier toutes les .dll du répertoire extern/mingw/lib OU extern/visual20??/lib dans gkit2light-master_CharAnim/bin (répertoire des exécutables), sinon vous aurez des erreurs à l’exécution des programmes
* Lancez le script `gkit2light-master_CharAnim/premake/premake-CharA.bat` qui va créer les projets makefile/codeblocks/visual` dans le répertoire gkitlight
* Ouvrez le projet `gkit2light-master_CharAnim/gkit2light.cbp` ou `gkit2light-master_CharAnim/build/gkit2light.sln`
## gKitLight la doc
[La documentation est ici.](http://jean-claude.iehl.perso.univ-lyon1.fr/Public/educ/M1IMAGE/index.html)
## Quelques explications sur le code
* 'h' pour l'aide
* 'a'=affiche/enlève les axes; 'g'=affiche/enlève la grille;
* souris bouton gauche= rotation du monde
* souris bouton droit et translation horizontale : pour zoomer
* **Votre code prendra place dans le module src/master_CharAnim/CharAnimViewer.h / .cpp**
* La class CharAnimViewer contient les fonctions init/draw qui s'occupent de l'affichage, elle dispose par héritage de fonction draw_sphere et draw_cylinder
* Pour ajouter des fichiers au projet, regarder le master_CharAnim.lua dans la racine
This diff is collapsed.
## TP 3e partie : graphe d'animation
- [Motion Graph de l'article original](http://www.cs.wisc.edu/graphics/Gallery/kovar.vol/MoGraphs/);
- Des BVH avec squelette compatible pour le graphe sont donné dans le git, répertoire Second_Life.\
Nous avons remarqué dans la partie 1 que la transition d'animation ne fonctionne bien que lorsque les deux poses du squelette sont assez
proches (il faut bien sûr également que les deux squelettes aient la même topologie). L'idée d'un graphe d'animation est de construire un
graphe où chaque noeud correspond à une pose d'une animation et où chaque arrête définit qu'une transition est possible entre les deux poses.
#### Comparaison de deux poses d'animation
Pour construire un graphe d'animation à partir d'une ou plusieurs animations, on doit être capable de comparer deux poses d'animation.
Une distance de 0 indique que les deux poses sont identiques. Une distance grande indique que les 2 poses sont très différentes.
A partir de la classe Skeleton, écrivez la fonction de calcul de distance entre deux poses de squelette. Cette fonction est déjà présente
dans la classe Skeleton plus haut mais en commentaire. Cette fonction calcule itérativement sur toutes les articulations la somme des distances euclidienne entre chaque articulation de deux squelettes aillant la même topologie mais dans des poses différentes.
```
friend float Skeleton::Distance(const Skeleton& a, const Skeleton& b);
```
** Remarque ** : il est important de ne pas tenir compte de la translation et de la rotation de l'articulation racine. Une même pose a
deux endroits du monde doit donner une distance de 0. Dans un 1er temps, votre personnage aura son noeud root centré en (0,0,0), puis dans la dernière partie de cette question, vous traiterez le centre de gravité.
#### Construction du graphe
Ecrivez un module MotionGraph qui contiendra un ensemble de BVH et le graphe d'animation définissant des transitions dans cette ensemble d'animation.
* Un noeud du graphe=(Identifiant d'une animation + un numéro de pose);
* un arc du graphe entre deux poses indique la transition possible entre ces deux poses. Deux poses sont compatibles à la transition quand la distance entre les deux squelettes sont inférieurs à un certain seuil fixé empiriquement.
Vous pouvez créer un module `CACore/CAMotionGraph.h/.cpp`
```
class MotionGraph
{
...
protected:
//! L'ensemble des BVH du graphe d'animation
std::vector<BVH> m_BVH;
//! Un noeud du graphe d'animation est repéré par un entier=un identifiant
typedef int GrapheNodeID;
//! Une animation BVH est repérée par un identifiant=un entier
typedef int BVH_ID;
//! Un noeud du graphe contient l'identifiant de l'animation, le numéro
//! de la frame et les identifiants des noeuds successeurs
//! Remarque : du code plus "joli" aurait créer une classe CAGrapheNode
struct GrapheNode
{
BVH_ID id_bvh;
int frame;
std::vector<GrapheNodeID> ids_next; //! Liste des nœuds successeurs
};
//! Tous les noeuds du graphe d'animation
std::vector<GrapheNode> m_GrapheNode;
};
```
#### Navigation dans le graphe
Une fois ce graphe construit, on peut définir différente manière de
naviguer dedans :
- Un parcours aléatoire dans le graphe (juste pour vérifier que le graphe est ok);
- L'utilisateur donne des directions au clavier => le parcours dans le graphe est conditionné par ces contraintes.
#### Gestion correcte du centre de gravité
Pour chaque arc du graphe, vous devez stocker la transformation (soit une matrice 4x4, soit un quaternion et une translation) du noeud root (souvent le centre de gravité) entre la pose i et la pose i+1. Cette transformation sera appliqué au noeud root de votre personnage quand il empruntera l'arc.
This favicon was generated using the following font:
- Font Title: Lato
- Font Author: Copyright (c) 2010-2011 by tyPoland Lukasz Dziedzic (team@latofonts.com) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1.
- Font Source: http://fonts.gstatic.com/s/lato/v24/S6u8w4BMUTPHh30wWyWrFCbw7A.ttf
- Font License: SIL Open Font License, 1.1 (http://scripts.sil.org/OFL))
web/static/android-chrome-192x192.png

10.4 KiB

web/static/android-chrome-512x512.png

29.5 KiB

web/static/apple-touch-icon.png

9.52 KiB

No preview for this file type
web/static/doc/M1if37_edt.png

166 KiB | W: 0px | H: 0px

web/static/doc/M1if37_edt.png

118 KiB | W: 0px | H: 0px

web/static/doc/M1if37_edt.png
web/static/doc/M1if37_edt.png
web/static/doc/M1if37_edt.png
web/static/doc/M1if37_edt.png
  • 2-up
  • Swipe
  • Onion skin
web/static/doc_charanim/charanim_ball.png

53.2 KiB

web/static/doc_charanim/charanim_interpolation.png

46.3 KiB

web/static/doc_charanim/fsm.png

151 KiB

web/static/favicon-16x16.png

514 B

web/static/favicon-32x32.png

1.12 KiB

web/static/favicon.ico

15 KiB

{"name":"","short_name":"","icons":[{"src":"/android-chrome-192x192.png","sizes":"192x192","type":"image/png"},{"src":"/android-chrome-512x512.png","sizes":"512x512","type":"image/png"}],"theme_color":"#ffffff","background_color":"#ffffff","display":"standalone"}
\ No newline at end of file