tutoriel 1
modeler un objet
 
 


 
INTRODUCTION    Qu'est-ce qu'on va faire ici ?

L'objectif de ce tutoriel est d'apprendre à modeler un objet virtuel en trois dimensions destiné à être inséré dans le monde de NuntiusVita.
Ce dernier utilise pour l'affichage 3D le moteur Cortona qui est un pluggin VRML (Virtual Reality Modeling Language) édité par Parallel-Graphics. Le résultat final sera donc un objet au format VRML, et donc avec un nom de fichier portant l'extension " .wrl ".
La version actuellement acceptée par Cortona est VRML 97 (soit VRML 2.0).

A l'instar de la pluspart des objets 3D affichés par un ordinateur, un objet VRML est avant tout constitué de points (vertices). Un vertex est constitué d'un triplet de coordonnées (X, Y, Z). A priori, X et Z sont les deux axes horizontaux et Y l'axe de l'altitude (repère ortho-normé droit hérité de OpenGL).
Ces vertices sont reliés entre eux pour former des triangles, lesquels forment la surface de l'objet. Les faces d'un objet peuvent être colorées en affectant une couleur à leurs sommets, ou bien en plaquant dessus des "textures", simples images 2D classiques.
Enfin, le format VRML 97 permet aussi la mise en place d'animations diverses.

Nous allons voir ensembles toutes les étapes nécessaires à la conception d'un objet VRML. Nous verrons donc des points essentiels à la conception d'objets 3D en général, ainsi que les détails du code VRML lui-même.


SUJET    Sur quoi je bosse ?

La première étape dans la création d'un objet est la définition du sujet.
J'entends par là qu'il est très important de savoir ce à quoi on veut arriver. Rien de plus décourageant que de se mettre devant son écran blanc et de se dire :
" bon, qu'est-ce que je vais pondre maintenant ? "
C'est en effet en général à ce moment que l'esprit se vide et que le regard devient vague...
L'ordinateur n'étant qu'un outil, il ne vous aidera pas à trouver l'inspiration. Il est préférable de mûrir un petit peu le projet en amont. Il suffit pour cela de commencer par plaquer ses idées sur une feuille de papier à l'aide de quelques croquis simples. Il n'est pas là question de talent artistique ou précision extraordinaire, il faut juste laisser les idées se coucher sur le papier.

Lors de cette élaboration, il est nécessaire de garder en tête que la complexité de l'objet est déterminante (plus il comportera de triangles, plus l'ordinateur sera lent à l'afficher) et que les textures sont aussi limitées (de nombreuses textures ralentissent aussi l'affichage). C'est ce que l'on appelle habituellement la 3D "low-poly" par opposition à la 3D "high-poly" (photo réalisme, effets spéciaux cinéma...)

A titre d'exemple, nous allons créer une plante de Nuntiusvita.


OUTILS    Avec quoi créer la plante exotique de mes rêves ?

Comme pour toute création à support informatique, nous disposons de plusieurs outils permettant d'arriver au même résultat (dans notre cas : le code VRML décrivant la plante). Le tout est de savoir lequel utiliser.
C'est alors une question de feeling, il suffit de voir celui qui vous convient le mieux. Il faut souvent faire le poids entre la puissance du logiciel (et donc souvent sa complexité) et sa facilité d'utilisation.
Les principaux softs disponibles sont listés sur le site de la guilde des artisans

Il faut admettre que la bonne maîtrise d'un outil de ce type nécessite un peu d'efforts, c'est pourquoi il est très difficile de convertir un infographiste lorsqu'il a pris ses marques dans un de ces logiciels.

Puisque j'utilise 3D Studio Max dans ce tutoriel, mais cela ne change rien à la méthode globale.


CONSTRUCTION    Ben alors on la fait cette plante ?

  • EBAUCHE DU TRONC

    On part en général d'une forme géométrique simple. C'est bien évidemment dans ce cas un cyclindre.

    le cylindre pour débuter le tronc

    le nombre de segments et de côtés est alors décisif pour la complexité future de l'objet même si cela peut être modifié par la suite. J'ai choisi ici 5 segments en longueur et 5 côtés. Le lissage ne sert pour l'instant à rien.
    Contrairement à ce qui fut édicté pour le VRML, on remarquera que 3D Studio utilise l'axe Z comme axe représentant l'altitude. On veillera à ne pas faire de confusion dans les deux repères ;)
    Afin de pouvoir éditer ce nouvel objet au niveau de ses vertices et de ses triangles, il faut effondrer sa pile (notion informatique représentant la succession ordonnée des actions appliquées). Son type doit être " éditable mesh ".

    effondrer la pile

    On peut alors supprimer le fond du cylindre puisque ces 5 triangles ne seront jamais visibles (l'arbre est destiné à être constemment enfoncé dans le sol)
    Il faut étirer le vertex au milieu de la face supérieur du cylindre afin de réaliser l'extrémité en pointe du tronc. Puis, en modifiant les points de chaque segment (simples rotations et translation) on doit pouvoir obtenir la forme grossière du tronc final.

    une ébauche du tronc


  • RAFFINEMENT DU TRONC

    Il reste à ajuster chaque vertex afin que la forme finale soit satisfaisante. On est alors souvent amené à supprimer ou rajouter des vertices ou des triangles, puisqu'il y a peut de chance que la forme géométrique de base corresponde parfaitement à notre attente.
    Les outils utiles pour ce genre de modification sont très basiques. Lorsque l'objet sélectionné est bien au format "Mesh" (étape précédente), on peut accéder aux boutons suivants qui permettent de sélectionner les sous-objets concernés (vertices, arêtes, triangles, polygones ou élément) :

    sélecteurs de sous-objets

    Une fois un sous-ensemble sélectionné, on peut le modifier grâce aux boutons suivants (translation, rotation, échelle) on remarquera qu'un clic gauche entraîne une modification manuelle alors qu'un clic droit affiche un panneau de saisie numérique :

    outils de modification

    Voilà environ la forme recherchée pour le tronc. Elle comporte 58 triangles et 33 vertices (File >>> Summary Info). On peut raisonnablement pensenter que la limite prévue sera respectée...

    tronc amélioré

    Il est intéressant de directement regarder l'équivalent actuel en code source VRML.


    Explication du code VRML :

    Ne voyez pas effrayer par les mots "code source". Le langage VRML est très naturel au vu de ce que j'ai expliqué jusqu'ici. Il est constitué de noeuds organisés en arborescence simple et claire. Il y a peu de noeuds différents (moins que de tags HTML par exemple...)
    - DEF tronc Shape indique que l'on défini un nouvel objet nommé "tronc".
    - appearance est le noeud qui traite de la coloration (tutoriel 3). Défini juste la couleur bleutée ici.
    - geometry donne la forme des polygones. Exactement l'objet de ce tutoriel ! IndexedFaceSet dit que c'est un assemblage manuel de triangles.
    - ccw garantie que les faces sont bien formées en terme de convexité.
    - solid indique l'objet est sujet aux collisions ou non.
    - ccw garantie que les faces sont bien formées en terme de convexité.
    - coord est strictement la liste des vertices du tronc. Ils sont sous la forme d'un tableau de points (trois coordonnées spatiales XYZ avec Y pour altitude).
    - coordIndex est ,de la même façon, strictement la liste des triangles du tronc. Ils sont sous la forme de références au vertices (les trois entiers positifs sont les numéros de places des vertices dans le tableau coord puis -1 qui indique que la face est terminée).

    Le résultat visualisable en VRML :



  • LISSAGE DU TRONC

    Puisque l'on fait la chasse aux triangles, la forme a l'air plus ou moins cubique. Il est possible d'améliorer sa qualité visuelle sans rajouter de face en lissant l'éclairage. C'est à dire que les triangles ne changent pas mais leur coloration oui.

    Explication du lissage "Gouraud" :

    Un triangle est mathématiquement un plan. Il a donc un vecteur Normal (orthogonal). Si la couleur du triangle est calculée directement à partir de ce vecteur, tous les points (pixels) du triangle ont la même couleur (même inclinaison par rapport à la lumière). Pour le lissage "Gouraud", on cherche cette même normale pour chaque vertex (et non plus pour chaque triangle). Alors quand il faut afficher un point (pixel) d'un triangle, on dispose de la normale en chacun des trois coins du triangle, et on fait une moyenne en fonction de la proximité à tel ou tel sommet (ca s'appelle une interpolation en fait). Alors chaque triangle n'a plus une couleur unie mais "lissée".

    Pour lisser entre eux des triangles d'une "Mesh" sous 3DS, il faut les sélectionner (toujours avec l'outil "sous-objet")...

    sélection par triangle

    ...puis attribuer à ces faces un groupe de lissage. Dans notre cas, le tronc n'étant fait que d'un bloc uni, on ne réalise qu'un groupe (ici le numéro 1)...

    un seul groupe de lissage (le 1)

    ...pour finalement obtenir un meilleur aspect :

    un seul groupe de lissage (le 1)

    Voyons les modifications apportées au code VRML :


    - NormalPerVertex indique que l'on désire appliquer une normale à chaque vertex pour le lissage "Gouraud". Dans le cas contraire, la normale à chaque triangle est calculée automatiquement.
    - normal est un tableau de vecteurs à trois dimensions (x,Y,Z). C'est le tableau de ces normales.
    - normalIndex fonctionne de manière analogue à coordIndex. Il donne, pour chaque triangle, la place de la normale dans le tableau normal pour chaque sommet de chaque triangle.

  • DISYMETRIE

    Le dernier ajustement du tronc concerne sa symétrie. Il est en général préférable d'éviter la trop grande symétrie d'un modèle (comme par exemple pour cet arbre) lorsqu'il s'agit d'un élément organique. Lorsque le décors en comporte quelque uns, cela ne choque pas l'oeil. Mais si il n'y a que des plantes "parfaites", la scène semble complètement artificielle.
    On va donc simplement désaxer naturellement le tronc à l'aide du modificateur twist/torsion paramétré comme suit (je rappelle que Z est ici l'altitude) :

    un seul groupe de lissage (le 1)


    Ce qui doit rendre approximativement :

    un seul groupe de lissage (le 1)


    On peut visualiser l'effet obtenu en VRML :



  • MODELISATION D'UNE FEUILLE

    Dans le cas d'une feuille, on commencera plutôt par création de son contour avec une ligne close :

    un seul groupe de lissage (le 1)

    Une fois passée à l'état de "Mesh", on peut encore ajuster ses vertices et lisser sa surface (cette fois en deux groupes gauche/droite). On a alors un objet du type :

    un seul groupe de lissage (le 1)

    Il est important de se rendre compte qu'un tel objet n'est visible que d'un côté. En effet, en VRML (comme dans beaucoup de système de visualisation 3D) le triangle élémentaire d'est visible que sur sa face avant (celle-ci est déterminée dans le sens du produit vectoriel selon l'ordre de ses sommets).
    Il faut donc cloner cet objet puis renverser la normale de ses faces, afin de représenter le dessous de la feuille. On éventuellement assembler les deux faces et fondre certains de leur vertices afin d'en diminuer le nombre.

    On a enfin une feuille...


    ... avec de code VRML correspondant :



  • ASSEMBLAGE

    Maintenant que le tronc et qu'une feuille sont au point, la dernière étape est de reproduire cette feuille en plusieurs exemplaires sur le tronc. Le langahe VRML est parfaitement adapté à cet effet.
    Le mot clef USE permet de réutiliser un noeud prédéfini à plusieurs reprises. On peut donc facilement créer les huits feuilles de notre plante :


    Le problème est que les objets se superposent tout simplement, et toutes les feuilles se confondent. L'utilisation du noeud "Transform" permet de modifier la position, l'orientation et l'échelle d'un noeud et de tous ses fils.
    On va donc traiter chaque feuille ainsi :


    Explication du code VRML :

    - translation est un simple déplacement (tx,ty,tz) du nombre d'unités indiquées (repère local).
    - rotation est exercée autour d'un axe engendré par le vecteur (rx,ry,rz). L'angle de rotation autour du vecteur est donné par a en radians.
    - scale est une mise à l'échelle des dimensions selon les trois directions de l'espace.
    - children est la liste des objets auxquels s'applique la transformation.

    On peut visualiser le modèle final pour cette plante de NuntiusVita :-)




    pour tout renseignement supplémentaire, conseil, ou remarque, n'hésitez pas à m'écrire ou à laisser un message sur le forum.