Tutoriels iOS


précédentsommairesuivant

V. Tutoriel 3. Animation de personnages (skinning) sur GPU

Ce tutoriel montre comment réaliser du skinning sur le GPU en utilisant le vertex du pipeline programmable pour soulager le CPU. Nous utilisons Assimp pour importer le modèle animé. Un modèle animé est composé d'un maillage lié à un squelette articulé. Le squelette est composé d'une hiérarchie d'os où chaque os est représenté par une matrice de transformation. Chaque position de vertex est affectée par N os. Les indices des os influencés, ainsi que leur poids respectif, sont stockés dans les attributs du vertex. Dans le vertex shader, nous calculons la position finale du vertex en additionnant les combinaisons des différentes contributions des os. Par exemple : un vertex 'vert' est influencé par l'os 'bone0' avec le poids 'weight0' et l'os 'bone1' avec le poids 'weight1'. La position finale de 'vert' est calculée comme suit :

 
Sélectionnez
vert.finalpos = weight0 * (bone0.matrix * vert.pos) + weight1 * (bone1.matrix * vert.pos);

V-A. Code de la procédure

Dans le vertex shader, nous trouvons les matrices de transformation des os influencés pour le vertex actuel avec leur poids respectif comme suit :

 
Sélectionnez
 // skinningMatrix contient les matrices de transformation de tous les os. bones.x/y/z/w contient les indices des os qui affectent le vertex 
    vec4 p0 = skinningMatrix[ int(bones.x) ] * position;
    vec4 p1 = skinningMatrix[ int(bones.y) ] * position;
    vec4 p2 = skinningMatrix[ int(bones.z) ] * position;
    vec4 p3 = skinningMatrix[ int(bones.w) ] * position;

La position finale du vertex est la somme des quatre vertices, chacun multiplié par le poids de l'os (la somme des poids d'un os doit être égale à 1) :

 
Sélectionnez
    // Position interpolée 
    vec4 interpolatedPosition = p0 * weights.x + p1 * weights.y + p2 * weights.z + p3 * weights.w;
Image non disponible

précédentsommairesuivant

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2013 Abdallah DIB. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.