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
Showing
with 124 additions and 20 deletions
## 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.
# CM Animation de personnages virtuels (Master 1ère année)
* CM = Cours Magistral
* Vous pouvez très facilement faire une pause au moment des
exercices, revenir en arrière et/ou accélérer la vitesse de la vidéo
depuis les options de YouTube (x 1.50 ou plus vite)
## CM1 : Animation basée squelette
Il y a 3 vidéos pour le CM1 :
* L'introduction
* Un exercice d'affichage de squelette animé très simple
* Afficage récursif d'un squelette à partir de la structure de données, présentation du format BVH, prise en main du code du TP
#### CM1.a Introduction
<iframe width="560" height="315" src="//www.youtube.com/embed/TNSesEPrAn0 " frameborder="0" allowfullscreen></iframe>
#### CM1.b Exercice
<iframe width="560" height="315" src="//www.youtube.com/embed/1Js-9r28T-c" frameborder="0" allowfullscreen></iframe>
#### CM1.c Arbre/Squelette, Affichage récursif et BVH
<iframe width="560" height="315" src="//www.youtube.com/embed/1Y8VE9WrSfw" frameborder="0" allowfullscreen></iframe>
## CM2 : Edition d\'animations et Contrôle d\'un Personnage Virtuel
<iframe width="560" height="315" src="//www.youtube.com/embed/DfsH9bIIisA" frameborder="0" allowfullscreen></iframe>
## CM3 : Animation et Capture de Mouvements
<iframe width="560" height="315" src="//www.youtube.com/embed/7t98WLxikOo" frameborder="0" allowfullscreen></iframe>
---
title: "Alex"
date: 2022-11-18T15:12:06+01:00
draft: true
---
---
title: My First blog post
date: 2019-07-22
description: An example blog post.
categories:
- demo
tags:
- hello-world
---
This is a first blog post.
Thanks to GoHugo for providing blazing fast static site generation.
{{< figure src="/hugo-logo-wide.svg" title="GoHugo" alt="GoHugo logo" >}}
\ No newline at end of file
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

File added
web/static/doc/M1if37_edt.png

118 KiB

web/static/doc_charanim/charanim_ball.png

53.2 KiB

web/static/doc_charanim/charanim_interpolation.png

46.3 KiB

web/static/doc_charanim/charanim_tpose.jpg

3.44 KiB

web/static/doc_charanim/fsm.png

151 KiB

File added