The first weblog devoted to Demoniak3D Demo-System

Jointure (Seam) Visible sur les Meshes

February 7th, 2008 Posted in FR, Tips'n'Tricks, Tutorials

Dans ce billet nous allons voir le phénomène de jointure qui apparaît sur certains meshes et comment y remédier. Je reçois souvent des feedbacks par rapport à ce problème qui en réalité n’en est pas un. La jointure (ou seam dans la langue de shakespeare) sur la surface d’un mesh est visible seulement lorsque le mesh est éclairé. Sur l’image suivant, le mesh de gauche possède une belle jointure tandis que celuide droite en est dépourvu.

Le phénomème de jointure prend sa source dans la normal d’un vertex. Le mesh sphère peut être vu comme une feuille de papier que l’on a réussi à plier de manière à former une sphère. L’endroit ou les bords de la feuille se rejoingent forme la jointure. A cet endroit, plusieurs vertices ont la même position mais ont des vecteurs normaux différents:

Sur cette image l’explication devient claire: au niveau de la jointure, on voit que pour chaque vertex il y a deux vecteurs normaux. En réalité il y a pour chaque position deux vertices, chacun avec sa propre normale. Et comme l’éclairage est basé sur la valeur du vecteur normal, la jointure entre les bords du mesh sphère apparaît très nettement.

Maintenant que nous avons vu d’où vient la jointure, regardons comment la supprimer. Cette suppression est activée par défaut dans les logiciels de modélisation mais comme Demoniak3D est avant tout un outil d’apprentissage et d’expérimentation de la 3D temps réel, la jointure n’est pas supprmée par défaut car il est important de comprendre ce que c’est et comment y remédier. Théoriquement, pour supprimer cette jointure, il suffit que les vecteurs normaux situés sur la jointure aient la même valeur. Pratiquement, cette opération porte le nom de Average Normals (ou moyenner les normals) et s’effectue le plus simplement du monde avec l’instruction average_normals dans le noeud mesh:

<mesh name="sphere01" lighting="TRUE" average_normals="TRUE" >
</mesh>

Le LUA n’est pas en reste, plus que la fonction AverageNormals() de la librairie HYP_Object permet de faire la même chose:

HYP_Object.AverageNormals( "sphere01" );

Les normales ont été moyennées dans la sphère de droite et ont été laissées tel quel dans la sphère de gauche.

Le code source de cette démo est disponible ici:
[ DEMO Mesh Seam - DOWNLOAD ]

You must be logged in to post a comment.