Projet HUMANS
Présentation de H-ANIM

Intro

H-Anim est une norme standard internationale (n° ISO/IEC FCD 19774) pour la description de personnages 3D animés destinée à rendre les personnages virtuels compatibles avec les différents systèmes de modélisation, animation, capture de mouvements et visualisation.

La version actuelle de la spécification H-Anim est 200x.


Définitions

La représentation d'un personnage 3D articulé est appelée personnage H-Anim, constituée:

  • d'un objet humanoid, racine du personnage H-Anim
  • d'objets joints, décrivant la position de ses articulations et organisés hiérarchiquement à partir de la racine humanoid
  • d'objets segments, représentant la géométrie et l'apparence des ses différentes parties
  • d'objets displacers, spécifiant des contraintes de mouvement
  • d'objets sites, permettant la mise en place de caméras virtuelles, d'effecteurs de CI ou de points d'attachement pour des accessoires

On parlera également de niveau d'articulation (LOA) correspondant au nombre de joints de l'humanoid.


Concepts

Même si la norme concerne principalement les personnages humains, il est possible d'enrichir la hiérarchie d'autres membres, têtes etc.

Géométrie

La géométrie d'un personnage H-Anim peut être décrite selon deux méthodes différentes:

Modélisation

Des conventions ont été mises en place pour assurer la compatibilité d'une animation avec n'importe quel personnage H-Anim ainsi que la cohérence de ces personnages. Les contraintes concernent la pose initiale d'un personnage avant animation:

  • positionnement: pieds au sol (Y=0), centre de gravité sur l'axe Y
  • orientation: regard dans la direction +Z, +X sur la gauche du personnage
  • pieds écartés de la largeur du bassin
  • bras et main parallèles au corps (axe Y), paumes tournées vers le corps
  • doigts parallèles à l'axe Y, pouce à 45°
  • visage sans expression, yeux ouverts, bouche fermée

Dans cette position initiale, tous les angles des joints sont à 0 (champs rotation =(0 0 1 0), translation=(0 0 0), échelle=(1 1 1) ).

Structure

Un corps H-Anim est une hiérarchie d'objets joint, auxquels peuvent être associés des objets segment. Les paires joint-segment doivent suivre la convention de nommage établie dans le standard H-Anim. La hiérarchie complète des joints et leurs segments associés est donnée ci-dessous:

 HumanoidRoot : sacrum
  sacroiliac : pelvis
  |   l_hip : l_thigh
  |     l_knee : l_calf
  |       l_ankle : l_hindfoot
  |         l_subtalar : l_midproximal
  |           l_midtarsal : l_middistal
  |             l_metatarsal : l_forefoot
  |   r_hip : r_thigh
  |     r_knee : r_calf
  |       r_ankle : r_hindfoot
  |         r_subtalar :  r_midproximal
  |           r_midtarsal : r_middistal
  |             r_metatarsal : r_forefoot
  vl5  : l5
    vl4 : l4
      vl3  : l3
        vl2 : l2
          vl1  : l1
            vt12 : t12
              vt11 : t11
                vt10  : t10
                  vt9 : t9
                    vt8 : t8
                      vt7 : t7
                        vt6  : t6
                          vt5 : t5
                            vt4 : t4
                              vt3 : t3
                                vt2 : t2
                                  vt1  : t1
                                    vc7 : c7
                                    | vc6 : c6
                                    |   vc5 : c5
                                    |     vc4  : c4
                                    |       vc3 : c3
                                    |         vc2  : c2
                                    |           vc1 : c1
                                    |             skullbase : skull
                                    |               l_eyelid_joint : l_eyelid
                                    |               r_eyelid_joint : r_eyelid
                                    |               l_eyeball_joint : l_eyeball
                                    |               r_eyeball_joint : r_eyeball
                                    |               l_eyebrow_joint : l_eyebrow
                                    |               r_eyebrow_joint : r_eyebrow
                                    |               temporomandibular : jaw 
                                    l_sternoclavicular : l_clavicle
                                    | l_acromioclavicular : l_scapula
                                    |   l_shoulder : l_upperarm
                                    |     l_elbow : l_forearm
                                    |       l_wrist : l_hand
                                    |         l_thumb1 : l_thumb_metacarpal
                                    |           l_thumb2 : l_thumb_proximal
                                    |               l_thumb3 : l_thumb_distal
                                    |         l_index0 : l_index_metacarpal
                                    |           l_index1 : l_index_proximal
                                    |             l_index2 : l_index_middle
                                    |                 l_index3 : l_index_distal
                                    |         l_middle0 : l_middle_metacarpal
                                    |           l_middle1 : l_middle_proximal
                                    |             l_middle2 : l_middle_middle
                                    |               l_middle3 : l_middle_distal
                                    |         l_ring0 : l_ring_metacarpal
                                    |           l_ring1 : l_ring_proximal
                                    |             l_ring2 l_ring_middle
                                    |               l_ring3 : l_ring_distal
                                    |         l_pinky0 : l_pinky_metacarpal
                                    |           l_pinky1 : l_pinky_proximal
                                    |             l_pinky2 : l_pinky_middle
                                    |               l_pinky3 : l_pinky_distal
                                    r_sternoclavicular : r_clavicle
                                      r_acromioclavicular : r_scapula
                                        r_shoulder : r_upperarm
                                          r_elbow : r_forearm
                                            r_wrist : r_hand
                                              r_thumb1 : r_thumb_metacarpal
                                                r_thumb2 : r_thumb_proximal
                                                  r_thumb3 : r_thumb_distal
                                              r_index0 : r_index_metacarpal
                                                r_index1 : r_index_proximal
                                                  r_index2 : r_index_middle
                                                    r_index3 : r_index_distal
                                              r_middle0 : r_middle_metacarpal
                                                r_middle1 : r_middle_proximal
                                                  r_middle2 : r_middle_middle
                                                    r_middle3 : r_middle_distal
                                              r_ring0 : r_ring_metacarpal
                                                r_ring1 : r_ring_proximal
                                                  r_ring2 : r_ring_middle
                                                    r_ring3 : r_ring_distal
                                              r_pinky0 : r_pinky_metacarpal
                                                r_pinky1 : r_pinky_proximal
                                                  r_pinky2 : r_pinky_middle
                                                    r_pinky3 : r_pinky_distal

Joints et Segments supplémentaires

Les pré-requis pour ajouter de nouveaux joints et segments à la hiérarchie de base sont:

Points caractéristiques

Ces points caractéristiques de surface sont généralement spécifiés dans les objets Displacers, leur CoordIndex est l'index du sommet du maillage le plus proche. Ils peuvent également être utilisés pour définir des Sites (cf exemples sur le site h-anim).

  •  1 : sellion
  •  2 : r_infraorbitale
  •  3 : l_infraorbitale
  •  4 : supramenton
  •  5 : r_tragion
  •  6 : r_gonion
  •  7 : l_tragion
  •  8 : l_gonion
  •  9 : nuchale
  • 10 :r_clavicale
  • 11 :suprasternale
  • 12 :l_clavicale
  • 13 :r_thelion/bustpoint
  • 14 :l_thelion/bustpoint
  • 15 :substernale
  • 16 :r_rib10
  • 17 :r_asis
  • 18 :l_rib10
  • 19 :l_asis
  • 20 :r_iliocristale
  • 21 :r_trochanterion
  • 22 :l_iliocristale
  • 23 :l_trochanterion
  • 24 :cervicale
  • 25 :rib10_midspine
  • 26 :r_psis
  • 27 :l_psis
  • 28 :waist_preferred_post
  • 29 :r_acromion
  • 30 :r_axilla_ant
  • 31 :r_radial_styloid
  • 32 :r_axilla_post.
  • 33 :r_olecranon
  • 34 :r_humeral_lateral_epicn
  • 35 :r_humeral_medial_epicn
  • 36 :r_radiale
  • 37 :r_metacarpal_pha2
  • 38 :r_dactylion
  • 39 :r_ulnar_styloid
  • 40 :r_metacarpal_pha5
  • 41 :l_acromion
  • 42 :l_axilla_ant
  • 43 :l_radial_styloid
  • 44 :l_axilla_post.
  • 45 :l_olecranon
  • 46 :l_humeral_lateral_epicn
  • 47 :l_humeral_medial_epicn
  • 48 :l_radiale
  • 49 :l_metacarpal_pha2
  • 50 :l_dactylion
  • 51 :l_ulnar_styloid
  • 52 :l_metacarpal_pha5
  • 53 :r_knee_crease
  • 54 :r_femoral_lateral_epicn
  • 55 :r_femoral_medial_epicn
  • 56 :r_metatarsal_pha5
  • 57 :r_lateral_malleolus
  • 58 :r_medial_malleolus
  • 59 :r_sphyrion
  • 60 :r_metatarsal_pha1
  • 61 :r_calcaneous_post.
  • 62 :r_digit2
  • 63 :l_knee_crease
  • 64 :l_femoral_lateral_epicn
  • 65 :l_femoral_medial_epicn
  • 66 :l_metatarsal_pha5
  • 67 :l_lateral_malleolus
  • 68 :l_medial_malleolus
  • 69 :l_sphyrion
  • 70 :l_metatarsal_pha1
  • 71 :l_calcaneous_post.
  • 72 :l_digit2
  • 73 :crotch
  • 74 :r_neck_base
  • 75 :l_neck_base
  • 76 :navel

LOA (Niveaux d'articulation)

Dans les hiérarchies, les cases vertes représentent les Joints, les bleues les Segments.

LOA 0

C'est le niveau minimal supporté pour un personnage h-anim. Seul le joint HumanoidRoot est requis (avec le Segment sacrum pour fils).

LOA 1

Ce niveau est généralement employé pour les personnages temps réels à basse polygonisation.

LOA 2

Ce niveau correspond à des personnages ayant une colonne simplifiée (3 lombaires, 3 thoraciques, 2 cervicales), des plantes de pied articulées (subtalar, midtarsal, metatarsal), et l'ensemble des phalanges pour chacun des doigts de la main.

LOA 3

Ce niveau supporte la hiérarchie h-anim complète comme présentée au paragraphe structure.


Interface

Objet Humanoid

Cet objet contient la définition du personnage hanim au travers de ses différents champs.

Description

ChampTypeDescriptionValeur par défaut
bboxCenterfloat[3]bounding box du personnage
elle peut ne pas être définie (valeurs par défaut)
0 0 0
bboxSizefloat[3]-1 -1 -1
centerfloat[3]translation par rapport au repère local (0, 0, 0)0 0 0
translationfloat[3]translation du repère du personnage h-anim 0 0 0
rotationfloat[4]rotation du repère du personnage h-anim 0 0 1 0
scalefloat[3]facteur d'échelle non uniforme du personnage h-anim1 1 1
scaleOrientationfloat[4]orientation dans laquelle sera effectué le facteur d'échelle0 0 1 0
infosequence<string>informations générales sur le personnage h-anim du type:
"authorName=xxx"
"authorEmail=xxx"
"copyright=xxx"
"creationDate=xxx"
"usageRestrictions=xxx"
"humanoidVersion=xxx"
"age=xxx"
"gender=xxx" habituellement female male or neuter
"height=xxx"
"weight=xxx"
[ ]
versionstringversion de la norme h-anim utilisée"200x"
namestringnom (obligatoire) du personnage h-anim""
skeletonsequence<Object>contient le Joint HumanoidRoot, racine de la hiérarchie des Joints du personnage h-anim ainsi que la définition de cette dernière. Toute transformation appliquée à l'objet Humanoid est donc répercutée à l'ensemble de la hiérarchie. Il peut également contenir des objets Sites[ ]
jointssequence<Object>contient une liste des Joints utilisés dans la hiérarchie définie dans le champ skeleton (liste de références)[ ]
segmentssequence<Object>contient une liste des Segments utilisés dans la hiérarchie définie dans le champ skeleton (liste de références)[ ]
sitessequence<Object>contient une liste des Sites utilisés dans la hiérarchie définie dans le champ skeleton (liste de références)[ ]
viewpointssequence<Object>peut contenir des objets Sites qui seront affectés uniquement par les transformations appliquées à l'objet Humanoid (caméras virtuelles)[ ]
skinsequence<Object>contient une ou plusieurs définitions d'indexed face sets.[ ]
skinCoordsequence<float[3]>contient une séquence de points utilisés dans la définition des indexed face sets du champ skin[ ]
skinNormalsequence<float[3]>contient une séquence de normales utilisées dans la définition des indexed face sets du champ skin[ ]

Note: les différences de h-anim 200x par rapport à h-anim 1.1 sont:

Implémentation VRML

PROTO Humanoid [
   field           SFVec3f     bboxCenter            0 0 0
   field           SFVec3f     bboxSize              -1 -1 -1
   exposedField    SFVec3f     center                0 0 0
   exposedField    MFString    info                  [ ]
   exposedField    MFNode      joints                [ ]
   exposedField    SFString    name                  ""
   exposedField    SFRotation  rotation              0 0 1 0
   exposedField    SFVec3f     scale                 1 1 1
   exposedField    SFRotation  scaleOrientation      0 0 1 0
   exposedField    MFNode      segments              [ ]
   exposedField    MFNode      sites                 [ ]
   exposedField    MFNode      skeleton              [ ]
   exposedField    MFNode      skin                  [ ]
   exposedField    SFNode      skinCoord             NULL
   exposedField    SFNode      skinNormal            NULL
   exposedField    SFVec3f     translation           0 0 0
   exposedField    SFString    version               "200x"
   exposedField    MFNode      viewpoints            [ ]
]
{
  Transform {
    bboxCenter       IS bboxCenter
    bboxSize         IS bboxSize
    center           IS center
    rotation         IS rotation
    scale            IS scale
    scaleOrientation IS scaleOrientation
    translation      IS translation
    children [
      Group {
        children IS viewpoints
      }
      Group {
        children IS skeleton 
      }
    ]
  }
}
DEF Humanoid Humanoid {
  info [ "humanoidVersion=BipLow v1.0",
    "authorName=Laurence Boissieux",
    "authorEmail=Laurence.Boissieux@inrialpes.fr",
    "copyright=2005 INRIA , all rights reserved.",
    "creationDate=Mon Feb 28 2005",
    "usageRestrictions=Noncommercial usage is ok if INRIA name is present
    and proper credit is given." ]
  name "BipLow"
  version "200x"
  skeleton [
    DEF hanim_HumanoidRoot Joint {...
    }
  ]
  joints [ USE hanim_HumanoidRoot,
    ... ]   
  segments [ USE hanim_pelvis,
    ... ]

  viewpoints [
    DEF FrontView Viewpoint {
     ...
    }
    ...
  ]
}

Objet Joint

Cet objet contient la définition des éléments articulaires du personnage h-anim

Description

ChampTypeDescriptionValeur par défaut
namestringseul champ obligatoire, le nom doit suivre les conventions suivantes:
  • si le personnage hanim est seul, le nom du Joint sera préfixé par hanim_ (ex: hanim_l_hip)
  • s'il y a plusieurs personnages, le nom du Joint sera préfixé par le nom défini dans le champ name de l'objet Humanoid suivi d'un _ (ex: BipLow_l_hip)
""
centerfloat[3]coordonnées du centre du Joint par rapport à la racine du personnage h-anim (objet Humanoid)0 0 0
translationfloat[3]translation du Joint dans le repère père0 0 0
rotationfloat[4]rotation du Joint dans le repère père0 0 1 0
scalefloat[3]facteur d'échelle non uniforme du Joint1 1 1
scaleOrientationfloat[4]orientation dans laquelle sera effectué le facteur d'échelle0 0 1 0
skinCoordWeightsequence<float>séquence de points de valeurs entre 0 et 1 utilisés pour pondérer les sommets contenus dans le champ skinCoord de l'Objet Humanoid[ ]
skinCoordIndexsequence<int>séquence d'indices indiquant quelles cooronnées influencer[ ]
llimitsequence<float[3]>limite inférieure de rotation du Joint autour de X Y et Z, aucune contrainte par défaut[ ]
ulimitsequence<float[3]>limite supérieure de rotation du Joint autour de X Y et Z, aucune contrainte par défaut[ ]
limitOrientationfloat[4]orientation des axes contraintes sur lesquels s'appliquent les limites, ce repère ayant pour origine l'origine du Joint0 0 1 0
stiffnesssequence<float[3]>si présent, contient des valeurs entre 0 et 1 indiquant l'amplitude à appliquer à chacun des degrés de liberté pour calculer la rotation à chaque pas dans le cadre d'un solver de cinématique inverse [0 0 0]
displacerssequence<Object>liste d'objets Displacer utilisés pour déformer le maillage[ ]
childrensequence<Object>contient la suite de la hiérarchie (objet(s) Segment et Joints enfants)[ ]

Implémentation VRML

...
PROTO Joint [
    exposedField     SFVec3f      center              0 0 0
    exposedField     MFNode       children            [ ]
    exposedField     MFFloat      llimit              [ ]
    exposedField     SFRotation   limitOrientation    0 0 1 0
    exposedField     SFString     name                ""
    exposedField     SFRotation   rotation            0 0 1 0
    exposedField     SFVec3f      scale               1 1 1
    exposedField     SFRotation   scaleOrientation    0 0 1 0
    exposedField     MFInt32      skinCoordIndex      [ ]
    exposedField     MFFloat      skinCoordWeight     [ ]
    exposedField     MFFloat      stiffness           [ 0 0 0 ]
    exposedField     SFVec3f      translation         0 0 0
    exposedField     MFFloat      ulimit              [ ]
]
{
    Transform {
        center           IS center
        children         IS children
        rotation         IS rotation
        scale            IS scale
        scaleOrientation IS scaleOrientation
        translation      IS translation
    }
}

...
DEF hanim_HumanoidRoot Joint {
      name "HumanoidRoot"
      translation 0 0 0
      rotation 0 0 1 0
      center 0 0.903 -0.025
      children [
	       DEF hanim_sacroiliac Joint {
	          name "sacroiliac"
	          rotation 0 0 1 0
	          center 0 0.903 0.025
	          children [
               DEF hanim_pelvis Segment {...}
               ...
            ]
         }
         ...
      ]
}
...

Objet Segment

Cet objet contient la définition des éléments constituant le corps du personnage h-anim

Description

ChampTypeDescriptionValeur par défaut
bboxCenterfloat[3]bounding box de l'ensemble des enfants du Segment
elle peut ne pas être définie (valeurs par défaut)
0 0 0
bboxSizefloat[3]-1 -1 -1
namestringseul champ obligatoire, le nom doit suivre les conventions suivantes:
  • si le personnage hanim est seul, le nom du Segment sera préfixé par hanim_ (ex: hanim_l_thigh)
  • s'il y a plusieurs personnages, le nom du Segment sera préfixé par le nom défini dans le champ name de l'objet Humanoid suivi d'un _ (ex: BipLow_l_thigh)
""
massfloatmasse du Segment0
centerOfMassfloat[3]coordonnées du centre de masse dans le repère du Segment, par défaut il n'y a pas de masse-1 -1 -1
momentsOfInertiafloat[9]matrice du moment d'inertie[ 0 0 0 0 0 0 0 0 0 ]
coordsequence<float[3]>pour les Segments dont le maillage est déformable, ce champ contiendra les coordonnées référencées à partir de l'IndexedFaceSet défini pour le Segment. La convention de nommage de ces coordonnées est nomSegment_coords (ex: l_thigh_coords)NULL
displacerssequence<Object>liste d'objets Displacer utilisés pour déformer le maillage[ ]
childrensequence<Object>enfants du Segment (Shape pour définir la géométrie entre autres)[ ]
addChildrensequence<Object>enfants à ajouter au Segment 
removeChildrensequence<Object>enfants du Segment à supprimer 

Implémentation VRML

                                            
...
PROTO Segment [
    field           SFVec3f     bboxCenter        0 0 0
    field           SFVec3f     bboxSize          -1 -1 -1
    exposedField    SFVec3f     centerOfMass      0 0 0
    exposedField    MFNode      children          [ ]
    exposedField    SFNode      coord             NULL
    exposedField    MFNode      displacers        [ ]
    exposedField    SFFloat     mass              0 
    exposedField    MFFloat     momentsOfInertia  [ 0 0 0 0 0 0 0 0 0 ]
    exposedField    SFString    name              ""
    eventIn         MFNode      addChildren
    eventIn         MFNode      removeChildren
]
{
    Group {
        addChildren    IS addChildren
        bboxCenter     IS bboxCenter
        bboxSize       IS bboxSize
        children       IS children
        removeChildren IS removeChildren
    }
}
...
   DEF hanim_pelvis Segment {
	    name "pelvis"
	    children Shape {
		     appearance Appearance {
		        material Material {
		           diffuseColor 0.102 0.6941 0.102
		        }
		     }
		     geometry IndexedFaceSet {
		        coord Coordinate {
		           point [ .... ]
		        }
		        coordIndex [  .... ]
		        creaseAngle 1.14
		     }
	    }
	 }
  ....


Objet Site

Cet objet contient des informations pour positionner des caméras, des points d'attachement d'accessoires etc.

Description

ChampTypeDescriptionValeur par défaut
namestringchamp obligatoire, le nom doit suivre les conventions suivantes:
  • si le personnage hanim est seul, le nom du Site sera préfixé par hanim_ (ex: hanim_crotch)
  • s'il y a plusieurs personnages, le nom du Site sera préfixé par le nom défini dans le champ name de l'objet Humanoid suivi d'un _ (ex: BipLow_crotch)
  • si le site est un effecteur d'extrémité on lui ajoute un suffixe _tip (ex: hanim_l_index_distal_tip), cet objet site sera le fils du Segment décrivant l'extrémité (ex:hanim_l_index_distal_tip est fils de hanim_l_index_distal)
  • si le site donne la position d'une caméra, on lui ajoute le suffixe _view
  • on ajoute le suffixe _pt aux autres types de sites
""
centerfloat[3]coordonnées du centre du Site par rapport à la racine du personnage h-anim (objet Humanoid)0 0 0
translationfloat[3]translation du Site dans le repère père0 0 0
rotationfloat[4]rotation du Site dans le repère père0 0 1 0
scalefloat[3]facteur d'échelle non uniforme du Site1 1 1
scaleOrientationfloat[4]orientation dans laquelle sera effectué le facteur d'échelle0 0 1 0
childrensequence<Object>enfants du Site [ ]
addChildrensequence<Object>enfants à ajouter au Site 
removeChildrensequence<Object>enfants du Site à supprimer 

Implémentation VRML/Exemple

                                            
...
PROTO Site [
    exposedField    SFVec3f     center           0 0 0
    exposedField    MFNode      children         []
    exposedField    SFString    name             ""
    exposedField    SFRotation  rotation         0 0 1 0
    exposedField    SFVec3f     scale            1 1 1
    exposedField    SFRotation  scaleOrientation 0 0 1 0
    exposedField    SFVec3f     translation      0 0 0
    eventIn         MFNode      addChildren 
    eventIn         MFNode      removeChildren
]
{
    Transform {
        addChildren      IS addChildren
        center           IS center 
        children         IS children
        removeChildren   IS removeChildren
        rotation         IS rotation
        scale            IS scale
        scaleOrientation IS scaleOrientation
        translation      IS translation
    }
}
....

   DEF hanim_crotch Site {     # CAESAR Feature Point #73
       name           "crotch"
       translation    0.0034 0.8266 0.0257
       children [
       ]
   }

....

Objet Displacer

Cet objet contient des informations pour positionner des contraintes de mouvement sur les élémens du personnage h-anim.

Description

ChampTypeDescriptionValeur par défaut
namestringseul champ obligatoire, le nom doit suivre les conventions suivantes:
  • si le personnage hanim est seul, le nom du Displacer sera préfixé par hanim_ (ex: hanim_l_eyebrow_feature)
  • s'il y a plusieurs personnages, le nom du Displacer sera préfixé par le nom défini dans le champ name de l'objet Humanoid suivi d'un _ (ex: BipLow_l_eyebrow_feature)
  • si le Displacer est utilisé pour identifier une zone, on lui ajoute le suffixe _feature
  • si le Displacer est utilisé pour décrire le mouvement d'une zone, on lui ajoute le suffixe _action souvent précédé du type de mouvement (ex: hanim_l_eyebrow_raiser_action pour le Displacer qui décrit le haussement du sourcil)
  • lorsqu'il s'agit d'un Displacer de configuration des sommets, on lui ajoute le suffixe _config
""
coordIndexsequence<int>indices des sommets du maillage affectés par le Displacer[ ]
displacementssequence<float>valeurs 3D de déplacement maximum pour chacun des points du maillage référencés dans coordIndex
weightfloatpoids à appliquer aux valeurs de déplacement, en modulant ce poids on peut effectuer un morphing linéaire

Les déplacements des Displacers contenus dans les champs des objets Segment sont définis et appliqués dans le repères des Segments. Ceux contenus dans les champs des objets Joint s'appliquent au maillage défini dans le champ skinCoord de l'objet Humanoid et dans le repère des Joints.

Note: le champ weight est une nouveauté de h-anim 200x par rapport à h-anim 1.1

Implémentation VRML/Exemple

                                            
...
PROTO displacer [
    exposedField MFInt32  coordIndex     [ ]
    exposedField MFVec3f  displacements  [ ]
    exposedField SFString name           ""
    exposedField SFFloat  weight         0.0
]
...
   DEF hanim_l_eyebrow_raiser_action Displacer {
    coordIndex [ 7, 12, 21, 18 ]
    displacements [ 0 0.0025 0, 0 0.005 0, 0 0.0025 0, 0 0.001 0 ]
    name "l_eyebrow_raiser_action"
   }
...

Pré-requis pour VRML et X3D

Les applications supportant le standard h-anim doivent au minimum supporter les noeuds suivants:


Exemples


Viewers gratuits compatibles

NomTypeLinuxWindowsMacURL
cortonaplug-in XXhttp://www.parallelgraphics.com/products/browsers/
freewrlstandaloneX Xhttp://sourceforge.net/projects/freewrl/
octagastandaloneXX http://www.octaga.com/start/start.php?startpage=download_octaga

Liens utiles