|
Amener à la vie un sujet statique
Voir les définitions relatives à Seamless3d à la fin de ce didacticiel Ce didacticiel montre comment transformer un personnage statique importé, fabriqué avec n'importe quel éditeur de Vrml, en un personnage constitué de segments mobiles et dynamiquement animé. Ce didacticiel a été rédigé spécialement pour accompagner la demo robot bring static model to life (amener à la vie un sujet statique) Le fonctionnement de cette demo repose sur des fichiers disponibles ici. Ces fichiers devront être dézippés par vos soins et placés dans un répertoire que vous aurez créé à cette fin sur votre disque dur : My Documents\Seamless3d\Application Data For Seamless3d\For Robot Demos Only
Note du traducteur : Si cela fonctionne ainsi sur votre ordinateur, tant mieux. Sinon, essayez donc de laisser votre ordinateur dézipper les fichiers où il croit devoir le faire et n'intervenez pas. Il y a des chances pour que, dès lors, tout fonctionne sans histoires.Pour voir cette demo, déplacez le curseur de la souris vers l'angle haut à gauche de l'écran 3d et choisissez scene tree (arbre logique de la scène) puis bring static model to life demo (amener à la vie un sujet statique, démonstration) :
La demo montre toutes les actions successives nécessaires pour préparer le sujet statique à l'animation. Note du traducteur : Le robot de démonstration est un programme extraordinaire. Ce n'est pas un film, il effectue réellement ce qu'il montre, au fur et à mesure que le curseur de la souris se déplace tout seul, clique, clique-et-tire les parties nécessaires et les ajoute là où il le faut, modifie les paramètres dans les tableaux... et enregistre finalement le résultat du travail accompli. Ce sont les mêmes Noeuds Interpolators, les ROUTEs et les scripts utilisés habituellement pour animer des modèles en Vrml faits de multiples Noeuds Transform ou Shape (forme) qui vous permettront aussi d'animer ce sujet quand il sera prêt à l'être (à la fin de la démonstration). Le modèle statique utilisé ici a été fabriqué avec Seamless3d puis converti en un fichier qui ne comporte qu'une seule Shape (forme) Vrml, laquelle contient la géométrie et la texture et rien d'autre (aucun script). Si l'on ouvre ce modèle statique dans un navigateur Vrml, la géométrie sera conservée. En fait ce modèle statique aurait pu être écrit avec n'importe quel modeleur 3d, toutefois celui qui a été établi avec Seamless3d l'a été tout spécialement pour en faire une animation de surface en réseau maillé, des triangles supplémentaires ont déjà été prévus pour établir les épaules, coudes, genoux et ainsi de suite, de façon à conserver la qualité des articulations quand elles seront pliées. Le gros avantage qu'il y a à utiliser des Noeuds Build (constructeurs) c'est qu'on évitera de dégrader accidentellement le modèle puisque le modèle d'origine pourra à tout instant être rechargé. Les Noeuds constructeurs apportent une grande liberté dans ce que l'on peut faire dans notre travail. Une fois qu'ils ont été ajustés, ils peuvent être réutilisés pour importer tel autre modèle statique qui ferait appel aux mêmes formes de base.
L'Idée de base Les modèle statique est importé en tant que Part (partie) unique et seulement ensuite les sommets sont transférés dans les autres parties à l'aide d'un cylindre transparent qui sert à choisir les sommets à transférer. Quand tout est fait, les Pivot points (points de flexion) sont déplacés vers leur position correcte dans chaque partie de sorte que ces parties puissent être animées. Commencer Lancement du robot de démo : bring static model to life (amener à la vie un sujet statique) Note du traducteur : Thyme précise ci-dessous que tous ses titres, avec leur numéro de référence, sont en gras. Il est nécessaire de les laisser dans leur anglais d'origine pour qu'on puisse les reconnaître dans le programme qui se déroule automatiquement sous les yeux (ébahis) du (futur) programmeur. Comme d'habitude, une traduction en italiques est proposée à chaque fois. Tous les titres des opérations du robot de démonstration sont en gras et commentcent par leur numéro suivi du titre lui-même. Les commentaires éventuels figurent en dessous des titres.
0. Create A New Seamless File
Comme le modèle statique utilise une texture, nous remplacerons d'abord le Noeud ColorEffect (effet couleur) par un Noeud TextureEffect (effet texture). Si on ne le fait pas avant d'importer le modèle dans un Noeud Partie, toutes les applications de textures seront perdues. Bien entendu on n'en fait rien si le modèle à importer n'a pas de textures ainsi par exemple quand la Shape (forme) utilise des "color per vertex" (couleurs par sommets) ou seulement le Noeud Material pour colorer sa geometry (géométrie).
3. Import Static Model Into a Part Cette Partie devient la première source des sommets pour le modèle et elle ne devra pas être modifiée par aucun Noeud de construction de façon à rester constamment la réserve de tous les sommets d'origine. Un "build cycle" (cycle de construction) sera le terme utilisé chaque fois qu'un build node (Noeud de construction) sera actif (c'est assez l'équivalent de l'exécution d'une macro). Un cycle de construction intervient automatiquement chaque fois que nous modifions un champ appartenant à un Noeud de construction. Au cours d'un cycle de construction chaque Noeud de construction active sa fonction "doBuild" (construire) en ordre séquentiel de haut en bas. Le fait de réduire les Noeuds dans l'arbre logique de scène n'a aucune influence sur les cycles de construction. Le sujet statique a les bras étendus à l'horizontale ce qui permet de choisir plus aisément les sommets autour des épaules pour en faire les parties des bras mais si le modèle doit observer le standard H-Anim strict, les bras devraient rester le long du corps.
Note du traducteur : comme on peut le voir, le robot importe non seulement les triangles du fichier static_model.wrl mais aussi la texture du fichier static_model.png fin de note.4. Copy All of the Triangles to the Pelvis 4. Copier les Triangles vers le bassin. Du fait que nous utilisons des Noeuds TransferBCyl (transfert par cylindre) pour transférer l'appartenance des sommets depuis une Partie qui contient la source des sommets vers les autres Parties, et parce qu'il en résultera une modification (la perte de l'appartenance des sommets entraîne la perte des sommets) au lieu de transférer directement ces sommets à partir de la première source, nous allons donc les copier d'abord dans une autre Partie, le Pelvis (Bassin) et c'est seulement de là qu'aura lieu de transfert par le Noeud TransferBCyl. Cette copie se fait à l'aide d'un Noeud CopyPart (copier une Partie). Regardez bien le robot demo qui tire les Noeuds Part (Parties) depuis le squelette vers le Noeud CopyPart (copier une Partie) en maintenant pressée la clé Alt de sorte que les parties sont tirées à titre de références. Notez aussi que le Noeud source est déposé dans la moitié supérieure (et à droite) de la vignette (icône) du CopyPart de façon à être déposé comme Noeud source et que la Partie destination est tirée vers la moitié inférieure de l'icône de façon à être tirée à titre de Partie destination. La Partie source est distinguée de la partie destination dans l'arbre logique de scène par le blue dot (point bleu) à gauche de l'icône de référence:
La partie model_source est réduite à partir de maintenant de sorte que les seuls triangles qui resteront visibles seront ceux qui sont contenus dans le modèle véritable.
5. Place the Avatar to the Floor Si en revanche l'avatar devait être destiné à un standard H-Anim strict, le sol devrait être ajusté à zéro.
6. Zoom in View to l_shoulder 7. Transférer depuis le bassin vers le 1er groupe pour l'épaule. C'est ici que le premier Noeud TransferBCyl est ajouté. La tâche des Noeuds TransferBCyl consiste à choisir les sommets du Noeud Partie source (la partie supérieure de référence avec le point bleu) et à les transférer à la Partie dest(ination) (la partie inférieure de référence sans le point bleu). La position des sommets ne change cependant pas, parce que tous les Noeuds Partie sont à ce stade centrés sur la même location (0 0 0) (position) de sorte que seule l'appartenance des sommets change du fait de ce transfert. Les sommets venus de la source, pelvis (le bassin) sont choisis au moyen d'un cylindre semi transparent. Les proportions de ce cylindre sont ajustées avec les champs radius et height (rayon et hauteur) du Noeud TransferBCyl. La position de ce cylindre est ajustée avec les champs location et orientation. Le cylindre est bien visible dans la fenêtre 3d quand le Noeud TransferBCyl est choisi et lorsque le champ in est coché. Les indices des sommets choisis sont placés dans le champ indices. De ce fait la propriété length (étendue) du champ vertex montre combien de sommets ont été choisis (pour le transfert). Si le robot décoche ensuite le champ in chaque fois qu'un Noeud TransferBCyl est ajouté, c'est seulement pour accélérer le cycle de construction. En effet, lorsque in est décoché le transfert n'a pas à accomplir la longue tâche de s'assurer que les sommets tiennent bien dans le cylindre, dès lors que grâce au champ vertex la liste des sommets à transférer est connue. Lorsqu'une Partie comme l'épaule plie pendant une animation, il est possible d'accroître la qualité de l'articulation en faisant en sorte que les différents groupes de sommets tournent d'une fraction seulement du champ total rotation de cette Partie. On peut voir dans la figure suivante à quoi ressembleraient l'épaule et le coude si tous les sommets de ces Parties tournaient ensemble du montant total du champ rotation : Au contraire nous voyons ici comment l'épaule et le coude deviennent réalistes lorsque le premier et le second rang de sommets tournent respectivement de 1/3 et de 2/3 du montant total du champ rotation. Ce regroupement des sommets en 3 différents groupes s'opère en faisant appel à 3 Noeuds TransferBCyl, chacun des cylindres des Noeuds TransferBCyl étant ajustés pour choisir chaque groupe issu de l'épaule (ici gauche). Le champ group est ajusté à 0 pour que le champ coordGroup de la partie de destination soit ajustée au nombre de sommets correspondant au premier groupe (élément d'indice 0 du coordGroup). Le Noeud TransferBCyl se charge de trier les indices des coordonnées, mais du fait que les groupes sont définis par l'étendue de leurs indices (de coord 0 à coord 9 pour le premier groupe, de coord 10 à coord 19 pour le second groupe) il est nécessaire que nous traitions le premier groupe de l'épaule en premier, puis ensuite le groupe suivant de la série dans le cycle de construction. Autrement, les groupes ne seraient pas triés dans l'ordre voulu pendant l'animation. Après que les champs du TransferBCyl sont ajustés, le champ weight de l'épaule (gauche) est fixé à .333 (weight de l'élément d'indice 0) pour indiquer que le premier groupe doit tourner de 1/3 de la rotation totale (1 = rotation totale) pendant l'animation. Note : le champ group du Noeud TransferBCyl peut être laissé à sa valeur par défaut de -1 (il ne changera donc pas les coordGroup des Parties avec cette valeur par défaut). Si on contraire on spécifie manuellement dans les champs coordGroup des Parties le nombre des sommets que l'on veut dans le groupe, nous aurions toutes les chances d'ajouter une bogue. En revanche si on laisse le Noeud TransferBCyl écrire lui-même le nombre de sommets qu'il a choisis dans le cylindre tout ira bien. Notez aussi qu'au lieu d'ajouter un nouveau Noeud TransferBCyl pris dans la barre des Noeufs nouveaux, on recopie le précédent en maintenant la clé Contrôle (Ctrl) cependant qu'on clique-tire le Noeud TransferBCyl précédent vers le Noeud GroupBuild. Cela présente l'avantage de commencer avec un nouveau Noeud dont tous les champs sont ajustés aux valeurs du Noeud précédent.
9. Transfer Vertices from pelvis to rest of shoulder Note du traducteur : lors de cette étape 15, très longue, le robot démo va se lancer dans une série d'opérations qu'il faut observer très attentivement. Cette étape 15 est une épreuve pour le débutant, qui aura intérêt à la répéter plusieurs fois avant d'être en état de la suivre avec bonheur. Fin de note.Comme le sujet est symétrique, les Noeuds TransferBCyl du bras droit sont exactement les mêmes que les Noeuds TransferBCyl gauches, sauf pour les location et orientation des cylindres. Comme ces champs sont ajustés pour reproduire le côté gauche en miroir, tout ce qu'il y a à faire consiste à ajouter un signe moins aux composantes x des champs location et de tourner d'un demi tour les champs orientation. On tient enfoncée la clé Contrôle cependant qu'on clique les boutons des champs orientation, de sorte que les valeurs des orientation tournent à angles droits bien propres.
16. Transfer pelvis to 1st group for l_hip
31. Move the Pivot Points Bien que Seamless3d construise ses modèles avec des sommets indicés de manière ordonnée relativement à leur position, il serait sans inconvénient à cette étape d'avoir un modèle statique dont les sommets seraient indicés de façon aléatoire parce que les Noeuds TransferBCyl trient les indices des sommets pour pouvoir les grouper. Lorsque le premier rang est choisi par le cylindre semi transparent du Noeud TransferBCyl, les coordonnées de ce rang peuvent être regroupées par l'étendue de leurs indices et pour des Parties comme le bassin, la tête et le thorax dont le premier rang ne peut être choisi individuellement par le cylindre, cela n'a pas d'importance non plus car le champ indexPosition du Noeud TransferBCyl a été coché pour toutes les parties ce qui entraîne le tri des sommets par ordre de hauteur en relation avec l'orientation du cylindre. (Si le cylindre est horizontal, les sommets sont triés en ordre horizontal). Note : le fait de laisser indexPosition sans coche augmente significativement la vitesse du cycle de construction d'un TransferBCyl dans le cas où le champ in est coché. Cependant, comme la plupart des parties auront un champ in non coché à toute étape de la démo, cela ne fera que peu de différence, si même on en remarque une, de décocher le champ indexPosition des parties où ça n'est pas nécessaire. C'est pourquoi ce champ a été laissé coché partout dans cette démo.
Demo Completed
Animating The Model Après modification des Points de flexion le sujet est prêt à être animé. Puisque l'animation de ce sujet sera la même que celle qui a été décrite dans build avatar demo (démo de construction d'un avatar),
Les mêmes opérations que celles qui commencent avec l'opération 26 Setup Animation (26 installer l'animation) vous montreront comment animer ce modèle-ci.
Making Modifications to the TransferBCyl Fields at a Later Date
Un des grands avantages qu'il y a à utiliser les build nodes
(Noeuds constructeurs) tient à ce qu'on peut revenir en arrière
pour modifier son travail. Bien entendu cette possibilité entraîne celle
d'écrire des bogues qui amèneraient un cycle de construction à fonctionner
de travers. Par exemple si un champ in
d'un TransferBCyl est décoché et que le cylindre est changé pour choisir
d'autres sommets et que d'autres Noeuds TransferBCyl viennent
ensuite dans le cycle de construction avec leur champ
in décoché, il est bien possible
qu'ils ne soient plus liés aux bons sommets ce qui les amènerait à
indicer des sommets inexistants au moment où viendrait leur
tour d'entrer en fonction.
Ceci coche automatiquement le champ in du Noeud en cause ainsi que celui de tous ceux qui le suivent, s'ils en ont un.
Un tel cycle de construction entier ralentira évidemment les choses
(uniquement pour la correction en cours) mais les champs
in peuvent tout aussi facilement être
décochés en cliquant-droit dans le même Noeud constructeur et en chisissant
fast build. (Définitions spécifiques à Seamless3d) Vertex Un vertex est un sommet d'un polygone. Un sommet contient toujours une composante de coord (coordonnées). La composante coord (coordonnées) indique la position du sommet. Les valeurs des coord tiennent en 3 nombres x y et z qui représentent les 3 dimensions de l'espace 3d. Un sommet peut comporter une composante de couleur. Les valeurs de la couleur tiennent en 3 nombres r g et b (rouge vert et bleu) qui représentent les proportions des trois couleurs de base. Un sommet peut comporter une composante texCoord (coordonnée de texture). Les valeurs de TexCoord tiennent en deux nombres x et y qui désignent le point de la texture utilisé pour le sommet. coord
coordIndex
coord value
transform fields
vertex index
Copyright © 2000-2006 Graham Perrett thyme@seamless3d.com
traduction de Matthieu |