ANIMATION D'UN AVATAR PAR SQUELETTE - SIMULATION DE LA MARCHE ET DE LA PREHENSION DANS UN ENVIRONNEMENT VIRTUEL
←
→
Transcription du contenu de la page
Si votre navigateur ne rend pas la page correctement, lisez s'il vous plaît le contenu de la page ci-dessous
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
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
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
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