ANIMATION D'UN AVATAR PAR SQUELETTE - SIMULATION DE LA MARCHE ET DE LA PREHENSION DANS UN ENVIRONNEMENT VIRTUEL

La page est créée Nadia Baron
 
CONTINUER À LIRE
ANIMATION D'UN AVATAR PAR SQUELETTE - SIMULATION DE LA MARCHE ET DE LA PREHENSION DANS UN ENVIRONNEMENT VIRTUEL
UNIVERSITE PARIS-SUD
                                  Master Informatique 1ere Année

                                            Année 2013-2014

                                 Rapport de TER Humains Virtuels

                                                     par

                                               Colin GORCE

                                            Francky BLONDY

         ANIMATION D'UN AVATAR PAR SQUELETTE
     SIMULATION DE LA MARCHE ET DE LA PREHENSION
            DANS UN ENVIRONNEMENT VIRTUEL

Enseignant:   Christian Jacquemin, Université Paris-Sud

                                                                   1
ANIMATION D'UN AVATAR PAR SQUELETTE - SIMULATION DE LA MARCHE ET DE LA PREHENSION DANS UN ENVIRONNEMENT VIRTUEL
2
ANIMATION D'UN AVATAR PAR SQUELETTE - SIMULATION DE LA MARCHE ET DE LA PREHENSION DANS UN ENVIRONNEMENT VIRTUEL
I – PRESENTATION DU SUJET                                   5

    I.1 – Description du domaine de travail                 5

    I.2 - État de l'art                                     6

    I.3 – Lien entre État de l'art et notre problématique   7

II – MISE EN OEUVRE DU PROJET                               7

    II.1 – Architecture du Projet                           7

          II.1.1 - Diagramme d'activité                     8
          II.1.2 – Structures de Données essentielles       9
          II.1.3 – Traitements                              11

    II.2 - Modélisation d'un squelette articulé             14

    II.3 – Animation squelettale                            15

          II.3.1 – Quaternions                              15
          II.3.2 – SLERP - Spherical Linear Interpolation   16
          II.3.3 – Modèle de Cinématique Squelettale        17

                   II.3.3.1 – Cinématique Directe           17
                   II.3.3.2 – Cinématique Inverse           17

    II.4 – Postures et Mouvements réalisés                  19

          II.4.1   –   Repos                                20
          II.4.2   –   Marche                               20
          II.4.3   –   Marche avec Objet                    21
          II.4.4   –   Centrer                              22
          II.4.5   –   Prendre/Poser Objet                  23

    II.5 – Environnement Virtuel                            24

          II.5.1   –   Scène                                24
          II.5.2   –   Camera                               24
          II.5.3   –   Collisions avec environnement        25
          II.5.3   -   Contrôles pour l'utilisateur         25

III – SYNTHESE ET CONCLUSION                                26

ANNEXES                                                     27

BIBLIOGRAPHIE                                               30

                                                                 3
ANIMATION D'UN AVATAR PAR SQUELETTE - SIMULATION DE LA MARCHE ET DE LA PREHENSION DANS UN ENVIRONNEMENT VIRTUEL
4
ANIMATION D'UN AVATAR PAR SQUELETTE - SIMULATION DE LA MARCHE ET DE LA PREHENSION DANS UN ENVIRONNEMENT VIRTUEL
I – PRESENTATION DU SUJET

      I.1 – Description du domaine de travail
     Ce rapport présente le travail effectué dans le cadre du Travail Encadré de Recherche
de Master 1 Informatique : Humains Virtuels.

       Notre TER s'inscrit dans le domaine de l'infographie 3D, plus particulièrement de la
Réalité Virtuelle.

        La Réalité Virtuelle est une simulation informatique d'environnements réels ou
imaginaires, interactive, immersive, visuelle, sonore et, ou haptique.
La finalité est de permettre, à une ou plusieurs personnes, une activité sensori-motrice et
cognitive dans un monde artificiel. Celui-ci est crée numériquement, et calculé en temps
réel.
        La modélisation d'humains virtuels remonte au tout début de l'informatique graphique.
De nombreuses méthodes de représentation et d'animation de personnages ont été proposées
par des chercheurs.
        Les premiers humanoïdes ont été représentés à l'aide d'une structure simplifiée,
composée d'articulations et recouverte d'un maillage sur lequel opèrent les transformations
de réalisation de l'animation et les déformations associées. Ces modèles continuent à être
utilisés et de nombreuses méthodes sont proposées pour accélérer les calculs et améliorer le
réalisme.

      Lors de ce TER, nous nous sommes au préalable intéressés à deux méthodes
d'animation de personnage virtuel :
   – l'animation du visage par points clés, d'après les travaux de Dr Frederic I. Parke. (1972)
   – l'animation d'avatar par squelette.

       Le but de notre travail est de permettre à un personnage (de jeu vidéo par exemple)
de pouvoir évoluer et interagir avec son environnement. Nous avons alors approfondi
l'animation squelettale, en simulant le déplacement d'un avatar, et la manipulation d'objets,
dans un environnement virtuellement modélisé.

       Nous pouvons définir plusieurs domaines d’application de ce projet. Les Humains
Virtuels autonomes sont utilisés pour :
       - la production de films d'animation.
       - les applications en temps réel ( applications de réalité virtuelle, jeux vidéos).
       - la robotique : robots humanoïdes autonomes.
       - l'industrie : exemple d'utilisation d'avatars pour simuler l’interaction et la
       collaboration, en toute sécurité, d'un être humain avec les robots des chaînes de
       montage du futur.
       - la simulation dans un environnement virtuel : logiciels éducatifs (simulation du
       déplacement et de la représentation de soi dans l'espace, simulation de la préhension
       d'un objet pour apprendre la manipulation d'un objet pour des personnes ayant subi
       des amnésies ou des amputations).

                                                                                                5
ANIMATION D'UN AVATAR PAR SQUELETTE - SIMULATION DE LA MARCHE ET DE LA PREHENSION DANS UN ENVIRONNEMENT VIRTUEL
I.2 - État de l'art

        Nous avons consulté et comparé, pour notre sujet, plusieurs sources de littératures
scientifiques rattachées au domaine.
        De nombreuses études de recherche ont déjà été réalisées à propos de la modélisation
et l'animation de tâches effectuées par des Humain Virtuels (HV).

       Une méthode efficace est d'utiliser la cinématique inverse du squelette d'un HV :
Inverse Kinematics , méthode de résolution analytique [1] [5]. Cette méthode consiste à
contrôler le corps d'un HV en interpolant des postures organisées en fonction du but à
atteindre. Comparée à la résolution analytique originale utilisant les angles d'Euler et
souffrant du Gimbal-Lock (blocage de cardan), cette méthode est basée sur l'algèbre de
quaternions. Cette méthode est plus appropriée pour définir les limites de rotations au niveau
des jointures des os du squelette. Elle évite ainsi les collisions au niveau des membres du
corps de l'HV.
Cette méthode est également efficace dans le contexte de préhension d'objets dans un
Environnement Virtuel (EV) et permet d'animer les mouvements de manipulation.

       Récemment, dans le contexte de manipulation d'objets, d'autres recherches ont permis
de définir des comportements autonomes, ainsi que des algorithmes de planification de
mouvements pour les Humains Virtuels.
Plusieurs stratégies de manipulation d'objets ont été développées :

        Une stratégie est basée sur la connaissance des attributs de l'objet manipulé (taille,
poids et forme, tâche effectuée sur objet). [2] Des algorithmes « intelligents » ont pu être
mis en place afin de décider de la manière de la préhension de l'objet sélectionné.
Nous pouvons illustrer ce concept à l'aide d'un exemple :
        - Une tasse de café ne sera pas manipulée de la même manière si elle est lourde ou
légère, brûlante ou froide.
Il faut alors s’intéresser à la complexité des divers mouvements de préhension humains. Pour
une meilleure description des capacités de préhension des humains, il s'agit de définir une
taxonomie des divers types de préhension. [4]

        Une deuxième stratégie est basée sur la planification des mouvements :
        La manipulation d'objets, de façon autonome, d'un HV, dans un EV, est en lien avec
cette planification des mouvements [3]. Pour pouvoir accomplir une tâche humaine, la
position et l'équilibre du corps entier d'un HV doivent être coordonnés avec le mouvement de
tous les membres du corps .
Nous pouvons illustrer ce concept à l'aide d'exemples :
        - l'HV doit atteindre, prendre et repositionner à un autre endroit, un objet, dans le
cas où il devrait éviter divers obstacles se trouvant sur son chemin.
Il s'agit alors de planifier le chemin optimal.
        - l'HV souhaite ouvrir une porte. La position du corps doit faire en sorte que la
poignée de la porte soit atteignable et en même temps qu'il y ait assez d'espace pour ouvrir
la porte sans collision avec l'HV.
Il s'agit alors de planifier l’ordonnancement des différents mouvements.
        Le but de la planification des mouvements lors de la manipulation d'objets, est de
rendre autonome, interactif et réactif un HV, le dotant ainsi d' « intelligence » proche des
performances humaines.

                                                                                                 6
I.3 – Lien entre État de l'art et notre problématique

       Nous nous sommes inspirés des divers travaux de recherche, ainsi que du cours de M.
Christian Jacquemin pour mener le projet à son terme.
Les articles de recherche [1], [5] et [6], nous ont permis de mettre en lumière les différents
modèles de cinématique squelettale dans le but de mouvoir l'HV.
Nous nous sommes intéressés au modèle de cinématique directe pour simuler la marche,
ainsi qu'au modèle de cinématique inverse pour simuler la préhension d'un objet.
Nous avons également approfondi la notation mathématique de quaternion pour représenter
les orientations et les rotations d'objets en trois dimensions.
Les articles [2], [3] et [4] nous ont amenés à réfléchir à la façon dont le mouvement de
préhension pouvait être effectué, en fonction du contexte d’interaction avec un
environnement virtuel.

II – MISE EN OEUVRE DU PROJET

      II.1 – Architecture du Projet

        En premier lieu, nous avons utilisé un modèle de corps humain, avec son maillage, son
squelette et la pondération de ses sommets.
        Nous avons modélisé un environnement virtuel composé de deux pièces.
        Nous avons modélisé également deux socles dont un surmonté d'un objet (sphère).
        Nous avons implémenté la gestion tri-dimensionnelle de la camera (vue à la 3ème
personne du modèle).
        Pour simuler des déplacements du modèle dans l'environnement virtuel, nous avons
défini les postures représentatives de la marche d'humain. Puis, nous avons utilisé une
méthode d'animation basée sur la cinématique directe du squelette. Les déplacements ont
résulté alors de l'interpolation des postures de la marche du modèle.
        Pour simuler l’interaction du modèle avec l’environnent virtuel, nous avons décidé de
modéliser la préhension d'un objet de l'environnement par l'HV en deux étapes.
Dans un premier temps, nous avons simulé le positionnement du modèle de façon à ce qu'il
soit orienté face au centre de l'objet, et à portée de l'objet.
Puis, dans un second temps, nous avons défini des postures représentatives de la préhension
humaine pour l'HV. Le mouvements de préhension d'un objet ont résulté alors de
l'interpolation de ces postures.

                                                                                                 7
II.1.1 - Diagramme d'activité

                      Diagramme d'activité du projet

                                                       8
II.1.2 - Structures de Données essentielles

Notre code a été séparé en trois fichiers :

       anim.h

Ce fichier contient les différentes classes et méthodes utilisées dans le projet :

   –   Vector :     représentation de vecteurs dans espace 3D.
                    opérations de base sur les vecteurs.
   –   Point :      représentation de points dans espace 3D.
                    opérations de base sur les points.
   –   Vertex :     représentation d'un point dans l'espace.
   –   Face :       représentation de la face d'un objet avec trois vertex.
   –   Mesh :       représentation d'un objet composé de faces.
   –   Bone :       représentation d'un os du mesh.
   –   Quaternion : représentation de quaternions (rotations 3D)
                    opérations de base sur les quaternions.

       room.h

Ce fichier contient les différentes fonctions permettant de modéliser la scène.

       anim.cpp

Ce fichier contient les différentes fonctions de travail :

   –   initialisations (constantes de travail, tableaux de frames)
   –   main
   –   render_scene
   –   gestion des touches
   –   call-back

      Plus précisément, nous pouvons détailler les structures essentielles, liées au
personnage.
      Les différentes données des mesh du personnage sont ordonnées et stockées dans des
tableaux (tab_mesh, tab_face, tab_vertex) lors de l'appel de la fonction « parse_mesh_obj ».

                                                                                           9
Structure de donnée des mesh

Pour les os du modèle, la structure est la suivante :

                          Structure de donnée des os

                                                         10
II.1.3 – Traitements

      a – Human.obj - CF Annexe 1

      Nous avons utilisé le modèle d'humain utilisable sous Blender (Human.blend)
Nous avons équipé le modèle d'un squelette, le maillage du squelette a été pondéré dans
Blender.

             Modèle : vue de face                         Modèle : vue de profil

Puis, nous avons exporté les maillages du modèle et du squelette, ainsi que la pondération
des sommets à l'aide d'un script Python export_obj_anim.py
Les vertex du maillage ainsi que la pondération des vertices sont exportés dans le fichier
Human_Bones.obj

                                                                                             11
b – Human.bones - CF Annexe 2

       L 'export du squelette à l'aide du script python permet de hiérarchiser les os du modèle
et les stocker dans le fichier Human_Bones.bones

                                 Squelette du modèle 3D

                                                                                             12
c – Human_Bones_KF.cpp – CF Annexe 3

       A l'aide d'une interface générée par le fichier Bones-control_gtk.prl, il nous a été
possible de modifier, à la volée, la rotation d'angle a (suivant x , y et z) de chaque os définis,
pour chaque posture (frame). A chaque fois que les valeurs sont modifiées, un message UDP
est envoyé à l'application de l'animation (utilisant un programme serveur UDP) qui met à jour
les postures. Ainsi, des nouveaux fichiers Human_Bones_KF.cpp successifs sont générés à
chaque fois que l'interface est quittée.
Ainsi, nous avons pu générer les différentes postures du personnage.

       d – anim.cpp

      L'animation du personnage est contrôlée par la cinématique de son squelette. Le
maillage du modèle est connecté à son squelette. Ainsi, les mouvements du squelette
impliquent une déformation du maillage.

      La fonction « window_idle » de anim.cpp nous permet d’exécuter l'animation de la
marche ainsi que celle de la préhension.
Nous avons ainsi pu définir un pseudo-code, réalisant les simulations du modèle :

si (bouge)
    si (positionne pour prendre l'objet)
    si (changement de mouvement)
        bouger les membres (posture départ -> posture prédéterminée)
        enregistrer posture courante pour changer le mouvement
    sinon
        bouger les membres (posture prédéterminée -> posture prédéterminée 2)
        enregistrer posture courante

sinon si (attrape objet)
   si (tient objet)
       ramener l'objet à lui
   sinon attraper l'objet

sinon si (pose objet)
   si (tient objet)
       poser objet
   sinon repos

sinon
   repos (posture courante -> posture de repos)
   enregistrer position = départ

translater/tourner

translater/tourner si tiens objet

                                                                                                13
II.2 - Modélisation d'un squelette articulé

                                                           Effecteur
                                                           Racine

                                                           Jointure

      Squelette : arbre (os) avec nœuds (jointures) et effecteurs (extrémité chaîne)

       Un squelette peut être considéré comme un arbre (chaîne cinématique). Les os ne se
déforment pas, ils sont rigides. Les jointures rotationnelles possèdent différents degrés de
liberté. Chaque os est au moins attaché à une jointure, ainsi une rotation d'une jointure
entraîne la rotation de l'os attaché.
Le squelette peut être défini comme une hiérarchie (relation père/fils) de jointures :
Racine - Jointures – Effecteurs.
La racine (le pelvis du squelette) définie l'orientation de notre personnage dans la scène.

                   Schéma : (exemple 2 os du bras) : Root –-> Join J –-> Join J'

                                                                                               14
Transformation jointure J :
- Translation T
- composée avec rotation R

Transformation jointure J' :
- Transformation jointure J (T et R)
- composée avec Translation T'
- composée avec rotation R'

Le principe suivant est étendu à chaque os de chaque posture :
       - on doit récupérer sa position par rapport de celle de son père.
       - annuler sa transformation initiale.
       - appliquer la transformation de son père.
       - composer sa rotation avec celle de son père.
       - un os sans père n'a pas besoin d'être transformé.

       La transformation du maillage est calculée dans le système de coordonnés du maillage.
Les rotations sont définies dans le système de coordonnés locaux des os.
Le déplacement d'un point du maillage est alors la combinaison pondérée des déplacements
dus à chaque os.

      II.3 – Animation squelettale

    « Quels sont les outils mathématiques mis en œuvre pour donner un
mouvement cohérent à un modèle ? »

             II.3.1 – Quaternions - CF Annexe 4

       Il est possible d'implémenter les différentes orientations des os (rotations) au niveau
des jointures du squelette notre modèle :
       - en représentation Euler (matrices) : rotations spécifiées dans repère global
       - en représentation Angle-Axes

                   EULER                                            ANGLE-AXES
      [Rotx]:mat rotation suivant axe x               (x,y,z) : axes vecteur unitaire
      [Roty]:mat rotation suivant axe y                      a : angle
      [Rotz]:mat rotation suivant axe z

Un V vecteur est orienté de la façon suivante :
      V' = Rotx * Roty * Rotz * V

       Les matrices de coordonnées homogènes (Euler) représentant les orientations sont le
standard pour une animation gérée en OPENGL. Cependant, les rotations dans la
représentation d'Euler se font dans le repère global : une rotation suivant un axe peut annuler
la rotation suivant un autre axe. On perd alors un degré de liberté. C'est ce qui est appelé le
GIMBAL LOCK. (Blocage de Cardan). En utilisant cette représentation, l'orientation des os
n'aurait pas été exacte pour l'animation de notre modèle, et nous aurions rencontré des
problèmes lors de l’interpolation.

      Nous avons alors utilisé les QUATERNIONS pour éviter le GIMBAL LOCK.

                                                                                                 15
Nous avons utilisé un quaternion unitaire comme une rotation en quatre dimensions
dans lequel (x,y,z) sont les axes de rotation et (a) l'angle de rotation.
La multiplication de plusieurs quaternions unitaires donne un autre quaternion qui représente
la combinaison des rotations.

             II.3.2 – SLERP - Spherical Linear Interpolation

       SLERP consiste en une génération de série de quaternions entre deux quaternions
spécifiés (deux orientations). La série de quaternions résulte en un mouvement fluide entre le
premier et le dernier quaternion. L'interpolation entre deux quaternions se fait sur la sphère
unité. L'interpolation consiste à chercher l'arc minimal sur la sphère parcourue à vitesse
angulaire constante. Cette méthode d'interpolation produit des animations lissées.

                   Schéma Interpolation entre 2 quaternions (0
II.3.3 – Modèle de Cinématique Squelettale

                    II.3.3.1 – Cinématique Directe

      Les déplacements de l'HV dans l’environnement résultent de l'accumulation de postures
simulant la marche d'un avatar.

       Nous avons utilisé la méthode d'animation FORWARD KINEMATICS.
       Dans cette méthode, les mouvements possibles aux jointures sont définis par
l'animateur et la position du modèle dans l'espace cartésien résulte de l'accumulation des
transformations au niveau des jointures. Les rotations des os au niveau des jointures sont
représentées par des quaternions. Les postures étant des tuples de quaternions, l'animation
fluide résulte de l'interpolation linéaire de ces quaternions.

                    II.3.3.2 – Cinématique Inverse

      En premier lieu, nous avons décidé de simuler les mouvements de préhension d'un
objet de l'HV dans un EV, grâce à la méthode d'animation INVERSE KINEMATICS.

       Dans cette méthode, l'animateur définit la position finale des effecteurs de l'HV (les
mains et les pieds du modèle) en fonction du point à atteindre. La cinématique inverse
calcule, suivant la hiérarchie des os, les rotations au niveau des jointures menant à la
position finale des effecteurs de l'HV.

      Nous avons essayé d'utiliser le modèle de résolution analytique de cinématique inverse
en deux dimensions, appliqué a chaque bras (on obtient alors les rotations nécessaires au
niveau des jointures des os de l’humérus et du radius : tetha1 et tetha2).

                                 Schéma : 2D IK appliqué à deux os

                                                                                                17
Os 1 : longueur d1
      Os 2 : longueur d2
      Goal (x,y)

                                ( x² + y² -d1²-d2²)
      tetha2 =     arccos
                                       2*d1*d2

                                y( d1+d2*cos(tetha2)) - x(d2*sin(tetha2))
      tetha1 =     arctan
                                x(d1+d2*cos(tetha2) + y(d2*sin(tetha2))

       Nous ne sommes pas parvenu à implémenter, de manière rigoureuse, le modèle de
résolution analytique de cinématique inverse en deux dimensions pour simuler la préhension
de l'objet. Le choix d'un modèle de résolution en trois dimensions (méthode Jacobienne, par
exemple) aurait été plus judicieux, du fait de l'orientation initiale en trois dimensions des
différents os du squelette de l'HV.

      Alors, dans un second temps, nous avons décidé, comme pour la simulation de la
marche, d'utiliser la méthode d'animation FORWARD KINEMATICS pour la simulation de la
préhension.

                                                                                            18
II.4 – Postures et Mouvements réalisés
      Les simulations du déplacement et de l’interaction avec un objet d'un HV, dans un EV
peuvent être modélisées sous forme d'un automate à états finis.

      ETATS :

      R:           Repos
      M:           Marche
      SM :         Sortie de Marche
      C1:          Centrer au point 1
      C2 :         Centrer au point 2
      PR:          Prendre Objet
      PO :         Poser Objet
      MAO :        Marche Avec Objet

                         Automates des mouvements du modèle

                                                                                             19
II.4.1 - REPOS

      Nous avons défini une posture de repos du modèle.

                                     Posture repos

      II.4.2 - MARCHE :

       Pour simuler les mouvements de la marche (mouvement des jambes et des bras), nous
avons interpolé les quatre postures représentatives de la marche

            Posture marche 1                              Posture marche 2

                                                                                       20
Posture marche 3                        Posture marche 4

        Dans le cas de la marche, pour donner l'illusion d'un mouvement du personnage, on
calcule une interpolation entre la sortie de la marche et le début de l'animation du repos :
c'est l'animation de transition (sortie de marche).
Par exemple : pour stopper le personnage en train de marcher, l'animation de transition est
calculée à partir de la dernière frame de l'animation (en cours) de la marche et la première
frame de l'animation de repos.

      II.4.3 - MARCHE AVEC OBJET

       Pour simuler les mouvements de la marche avec un objet (mouvement des jambes sans
les bras), nous avons interpolé les postures de la marche sans le mouvement des os des bras
du modèle (clavicules, humérus, radius, index, pouces).
Les mouvements de translations et de rotations appliqués au modèle sont également
appliqués à l'objet.

                                                                                               21
II.4.4 - CENTRER

       Dans un premier temps, lorsque le modèle se trouve dans un cercle de rayon R, et de
centre l'objet, alors nous avons orienté le modèle de façon à ce qu'il vise le centre de l'objet
à prendre (rotation d'angle thêta).
Puis nous avons positionné le modèle de façon à ce qu'il soit à portée de l'objet (Distance
modèle/objet = longueur des bras du modèle ) : nous avons translaté alors le modèle, avec la
simulation des mouvements de la marche, en direction de l'objet.

      Schéma de centrage du modèle par rapport à l'objet : orientation et translation.

                                                                                              22
II.4.5 - PRENDRE / POSER OBJET

       Une fois le modèle centré et à portée de l'objet nous avons pu interpoler les postures
de la préhension d'objet. Nous avons défini deux postures des bras du modèle :
   – une première où le modèle est au contact de l'objet.
   – autre deuxième où le modèle a ramené à lui l'objet.

L'interpolation entre la première posture et la deuxième permet la simulation du mouvement
de prendre l'objet. Inversement, entre la deuxième et la première, nous avons pu simuler le
mouvement de poser l'objet.

                 Posture préhension 1                      Posture Préhension 2

                                                                                                23
II.5 – Environnement Virtuel

            II.5.1- Scène

       La scène a été modélisée uniquement à l'aide de primitives openGL.
La scène est composée de deux pièces séparées par un pont. Dans la deuxième pièce, nous
avons modélisé deux cylindres servant de support pour l'objet.
L'objet est une sphère.
Nous n'avons pas défini de textures, mais nous avons utilisé la couleur des matériaux pour
mieux visualiser la scène.

            II.5.2 – Caméra

      Nous avons défini les mouvements 3d de la caméra à l'aide de coordonnées sphériques.

                                                          Xcam = r*sin(theta)*cos(phi)

                                                          Ycam = r*sin(theta)*sin(phi)

                                                          Zcam = r*cos(theta)

                                                                                             24
Nous avons positionné la caméra à l'aide de la fonction openGL gluLookAt, de façon à
obtenir une vue à la 3ème personne de notre modèle en mouvement.

void gluLookAt ( eyeX , eyeY, eyeZ, centerX, centerY, centerZ, upX, upY, upZ)

avec eye : position de la camera
      eyeX = r*sin(theta)*cos(phi)
      eyeY = r*sin(theta)*sin(phi)
      eyeZ = r*cos(theta)

     center : point visé par la caméra (un point du modèle).

     up : direction du vecteur up de la camera.

             II.5.3 – Collisions avec environnement

        Un fois l'animation des mouvements du personnage mis en place, nous avons défini un
système de collisions entre le personnage et son environnement.
Le personnage possède un point de collision situé au niveau des pieds, permettant les
collisions frontales lors de la marche. Lors de la collision, le personnage se met en position de
repos.

             II.5.4 – Contrôles pour l'utilisateur

                                                                                               25
III – SYNTHESE ET CONCLUSION

        Les premiers humanoïdes animés par ordinateur datent de plus de 30 ans. Notre
Travail d’Étude et de Recherche nous a permis de prendre connaissance de l'étendue des
avancées technologiques dans ce domaine. Les divers articles et études de recherche que
nous avons étudiés, nous ont permis de constater qu'il n'existe actuellement aucun modèle
global permettant une représentation réaliste de l'être humain animé. La réalisation
d'humanoïdes est encore un domaine de recherche.
        Le TER nous a permis d'étudier diverses techniques d'animation d'Humains Virtuels :
- l'animation par points clés, simple et efficace, qui a longtemps été la technique d'animation
de choix pour les jeux vidéos.
- l'animation par squelette, bien plus souple en terme de possibilités de rendu et est
progressivement devenue la norme pour les jeux vidéos actuels.
        Notre travail nous a également permis de découvrir diverses méthodes d'animation
squelettale.
        Il nous semble avoir réalisé une démonstration intéressante sur la façon d'animer un
personnage. Il nous semble que nos choix ont rendu l'évolution et l’interaction de notre
personnage avec son environnement réaliste.
        Il pourrait être intéressant de compléter ce travail par la réalisation de mouvements
supplémentaires du personnage (sauter, courir, s’asseoir …)
Il pourrait être également intéressant d'implémenter des algorithmes permettant de rendre
« intelligent » l'humain virtuel. Dans le cas de la préhension d'objet, des mouvements de
préhension différents pourraient être calculés de façon autonome par l'Humain Virtuel en
fonction de divers paramètres d' un objet (forme, taille, poids ...). Dans le cas du
déplacement du modèle, il serait possible d'implémenter la planification de mouvements,
l'évitement d'un obstacle et la recherche de chemin optimal. L'utilisateur interviendrait alors
beaucoup moins dans la réalisation de l'animation.
Nous aurions pu ajouter l'animation du visage à l'animation du squelette. Cela contribuerait à
augmenter le réalisme de notre application.
        Le domaine de l'interaction homme-machine a beaucoup évolué et s'est grandement
amélioré. Aujourd’hui, des capteurs de mouvements 3D permettent de simuler des animations
d'Humain Virtuels avec toujours plus de précision et d'efficacité.
Ce domaine que nous côtoyons tous au quotidien, complexe mais passionnant, est en
perpétuelle évolution.

                                                                                            26
ANNEXES
       Annexe 1 :

       Human.obj

Ex :

mtllib       Human.mtl            //   fichier .materiaux Human
bonelib      Human.bones          //   fichier .bones Human
o            Human_Mesh           //   object mesh Human
v            abc                  //   vertices
vw           aw bw cw             //   vertices weight
vn           an bn cn             //   vertices normals
f            af bf cf             //   faces

       Annexe 2 :

       Human_bones.bones

Ex des os de la jambe droite :

transl ROOT_transl                // position os racine
0.0 0.0 -0.0357
rot_quat bassin_D_rot             // rotation os fils
0.015 0.7039 -0.7069 -0.0677
bone bassin_D                     // os fils
0.3065                            // taille os fils
parent_bone NULL                  // os parent

 transl bassin_D_transl
 0 0.3065 0
 rot_quat femur_D_rot
 0.4805 0.5363 -0.4818 -0.4993
 bone femur_D
 1.486
 parent_bone bassin_D

  transl femur_D_transl
  0 1.486 0
  rot_quat tibia_D_rot
  0.9999 -0.0072 0.0087 -0.0081
  bone tibia_D
  1.4441
  parent_bone femur_D

                                                                  27
transl tibia_D_transl
    0 1.4441 0
    rot_quat pied_D_rot
    0.7638 -0.6441 0.0328 0.0263
    bone pied_D
    0.8392
    parent_bone tibia_D

    bone_end pied_D                 //fin

  bone_end tibia_D                  //fin

 bone_end femur_D                   //fin

bone_end bassin_D                   //fin

       Annexe 3 :

       Human_Bones_KF.cpp

EX pour deux os :

char tab_Bones_ID[2][16] = { "os1" , "os2" };    // Définis dans    .bones

float tab_Bones_KF_a[2][10] = {
          kf1    kf2    ...
  os1 { 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 } ,
  os2 { 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.00 }
 };

idem pour :

float tab_Bones_KF_x[2][10] ...
float tab_Bones_KF_y[2][10] ...
float tab_Bones_KF_z[2][10] ...

avec -1 < x < 1 ; -1 < y < 1 ; -1 < z < 1
et -180 < a < 180

              Bones-control_gtk.prl

                                                                                  28
Annexe 4 :

      Un quaternion est un nombre complexe de la forme :
Q = w + xi + yj + zk tel que i²=j²=k²=-1 , w Réel (x,y,z) Im

Propriétés quaternions :

- Addition :

Q+Q' = w + w' + (x + x')i + (y + y')j + (z + z')k

- Produit :

Q1=(w1, x1, y1, z1);
Q2=(w2, x2, y2, z2);

Q1 * Q2 = Q3 avec Q3 = ( w3 = w1w2 - x1x2 - y1y2 – z1z2 ,
                         x3 = w1x2 + x1w2 + y1z2 – z1y2 ,
                         y3 = w1y2 + y1w2 + z1x2 – x1z2 ,
                         z3 = w1z2 + z1w2 + x1y2 - y1x2 )

- Produit scalaire :

dot(Q,Q') = (w w' + x x' + y y' + z z')

- Norme :

N(Q) = ww + xx + yy + zz

- Conjugué :

Q* = w - xi - yj - zk

- Inverse :

Q-1
      = q* / N(q)

                                                               29
BIBLIOGRAPHIE
[1] Marcelo Kallmann. 2008. Analytical inverse kinematics with body posture
control. Comput. Animat. Virtual Worlds 19, 2

[2] Esteban Pena Pitarch. 2010. Virtual Human Hand: Autonomous Grasping Strategy,
Modelling Simulation and Optimization, Gregorio Romero Rey and Luisa Martinez Muneta
(Ed.), ISBN: 978-953-307-048-3, InTech,
Univesitat Politechnica de Catalynia, Spain

[3] Marcelo Kallmann. 2008. Autonomous object manipulation for virtual humans. ACM
SIGGRAPH 2008 classes (SIGGRAPH '08). ACM, New York, NY, USA

[4] Thomas Feix and Roland Pawlik. Heinz-Bodo Schmiedmayer. Javier Romero and Danica
Kragic. 2011. Human grasping database : A comprehensive grasp taxonomy.
http://grasp.xief.net

[5] M.P. Johnson. 2003. Exploiting Quaternions to Support Expressive Interactive Character
Motion. Ph.D. Thesis. M.I.T USA

[6] Diana Gruber. 2000. Do we really need quaternions ?
http://www.gamedev.net/page/resources/_/technical/math-and-physics/do-we-really-need-
quaternions-r1199

                                                                                             30
PAGE INTERNET
Vos pouvez consulter la page HTML de présentation du projet à l'adresse suivante :

                     http://colin.gorce.free.fr

Vous   y trouverez :
   –    une démonstration de notre système.
   –    une archive des sources du projet téléchargeable.
   –    Le rapport du projet téléchargeable.

                                                                                     31
Vous pouvez aussi lire