Imaginez que vous vouliez plaquer une texture réaliste sur un modèle de corps humain. "Réaliste" signifie que votre texture doit recréer les variations subtiles de la couleur de la peau, qui doit être plus rose ici, plus brune là, etc. Comme cela semble très difficile à réaliser en procédural (c'est à dire avec des textures définies algorithmiquement comme bozo ou gradient), il semble logique d'utiliser une image map, peinte à la main ou d'origine photographique. Mais comment faire alors pour projeter cette image sur le modèle ? Il y a dans POV-Ray différents types de mapping disponible, pour des primitives simples : plan, sphère, cylindre... Mais, même en faisant l'hypothèse qu'un corps humain est plus ou moins cylindrique, il va être très difficle de positionner une couleur donnée à un endroit particulier. Heureusement, l'UV-mapping permet de résoudre ce genre de question.
Une map UV ressemble aux images ci-contre : La première image est un gabarit UV pour une tête humaine (Femme Nue Poser 4), tandis que la seconde est la version peinte (en l'occurence celle utilisée dans Eve au réveil). Contrairement à une image map classique, qui est projetée selon une géométrie indépendante du modèle, cette image est en correspondance précise avec le modèle sur lequelle elle doit s'ajuster. Ainsi, les lignes du gabarit correspondent à ses polygones. Le modèle sera peint en fonction de sa couleur sur l'image : pour cela, à chaque sommet (vertex) du maillage est associé une coordonnée de l'image (le vecteur <u,v>). |
Note : ce tutoriel ne couvre que l'UV-mapping pour les mesh. Pour d'autres utilisations, voir la documentation de votre version de POV (Megapov et POV 3.5).
Dans Megapov et POV 3.5 et supérieur, deux formats de mesh supportent l'UV-mapping. Ces mesh UV contiennent donc, outre l'information sur leur géométrie et leurs normales, l'information (les coordonnées UV) concernant leur texture.
Il faut noter qu'il y a une différence fondamentale de comportement entre un mesh de type mesh2 et un mesh classique. Dans ce dernier cas, chaque copie du mesh présente dans la scène peut être texturée indépendamment sans avoir à re-parser le mesh. Avec un mesh de type mesh2, la texture est donnée au moment du parsing : toutes les copies ultérieures ont la même texture. Pour avoir une texture différente, il faut reparser le mesh.
D'abord, il faut une version de POV qui supporte l'UV-mapping : soit POV 3.5 et supérieur, soit un patch comme Megapov.
Parce que l'UV-mapping n'a été supporté que récemment par POV-Ray, il y a encore peu d'utilitaires dédiés. Ce tutoriel ne concerne que Windows, mais certains des utilitaires ci-dessous disposent également de version Mac et Linux.
Les utilitaires suivants seront également utiles :
Vous aurez également besoin d'un programme de retouche d'images bitmaps comme Photoshop ou Paintshop Pro, pour pouvoir lire et écrire les principaux formats de fichiers graphiques (JPG, TIFF, TGA, PNG et BMP).
Tout mesh peut théoriquement être UV-mappé et converti pour être utilisé sous POV. Présentement (Juillet 2000), il n'y a pas de solution 100% fiable pour convertir un fichier OBJ ou 3DS contenant des informations d'UV-mapping vers POV. Tous les convertisseurs listés plus haut ont tendance soit à planter sur certains fichiers, soit à produire des fichiers qui ne marchent pas bien. Cela semble dû au fait que les convertisseurs ne sont pas 100% compatibles avec l'ensemble des spécifications de ces fichiers : un convertisseur marchera avec un OBJ issu de Poser, mais produira un fichier erroné avec un OBJ issu de Lightwave. En règle générale, si un convertisseur ne marche pas, essayez-en un autre. Mon outil favori reste 3DS2POV, que j'ai utilisé intensivement en 1999-2000. Cependant, il requiert une conversion préalable au format 3DS, ce qui peut être plus compliqué que prévu.
L'utilisation de Poser, un logiciel commercial dédié à la création de personnages, est une des raisons principales pour laquelle de nombreux utilisateurs de POV se sont intéressés à l'UV-mapping. J'utiliserai donc Poser comme exemple. Poser exporte vers de nombreux formats, dont OBJ et 3DS, qui sont déja UV-mappés ; l'image map et la bump map sont fournies avec les modèles.
De Poser vers mesh2
Il y a deux façons de faire.
Une fois le modèle exporté au format mesh2, le convertisseur produit plusieurs fichiers. Dans le cas de 3DS2POV, et dans l'hypothèse que le fichier 3DS de base s'appelle TOTO.3DS, alors:
- TOTO_O.INC est le fichier objet lui-même.
- TOTO.POV est un fichier POV prêt à l'emploi.
- TOTO_M.INC contient les informations de textures.
- TOTO_A.INC contient les informations d'animation.
Modification des textures
Le fichier TOTO_M.INC contient une ou plusieurs définitions de textures. En fait, un mesh UV peut faire appel à de nombreuses textures, chacune étant attachée à une zone particulière du mesh. Classiquement, les modèles Poser utilisent une douzaine de textures.
Cependant, les textures présentes dans TOTO_M.INC ne sont que des gabarits de textures. Il faut les changer et remplacer les informations de pigment par la bonne image map. On peut aussi modifier le "finish" et ajouter un "normal", qui peut être une bump_map. Avec 3DS2POV, une texture appelée "default_texture" peut servir de point de départ. Après édition, le fichier des textures devrait ressembler à ceci :
#declare default_texture = texture {
pigment{image_map{png "p4woman.png"}} // la map UV
finish{metallic brilliance 2 ambient 0.01 diffuse 0.6 specular 0.03 roughness 0.05}
}
#declare Mskin=texture{default_texture} // la texture principale
#declare Meyeball =texture{Mskin finish{reflection 0.3}}
#declare MeyeBrow = texture{Mskin}
#declare Mnipple = texture{Mskin}
#declare Mlips = texture{Mskin finish{ambient 0.1 diffuse 0.3 specular 1 roughness 0.01}}
#declare MinnerMouth = texture{Mskin}
#declare Mtongue = texture{Mskin}
#declare Mteeth = texture{Mskin}
#declare Mlashes = texture{Mskin}
#declare Mpupil = texture{Meyeball}
#declare Miris =texture{ Meyeball}
Les noms de textures sont en général explicites, au moins pour les modèles Poser. Ce n'est pas le cas pour tous les modèles, et il faut parfois faire des tests pour déterminer le rôle exact de chaque texture.
Dans l'exemple ci-dessus, toutes les textures sont basées sur l'image_map fournie avec le modèle Poser. Il faut éventuellement convertir l'image (souvent au format TIFF) dans un format lisible par POV. Les fichiers de bosselage (*.BUM) sont en fait des fichiers BMP, du moins dans la version Windows : il suffit de changer l'extension (et d'en augmenter le contraste pour améliorer l'effet).
En règle générale, l'image map est définie une fois pour toutes et utilisée pour toutes les parties du corps. En effet, une map Poser couvrent l'intégralité du corps : le même fichier image est utilisé pour les yeux et la peau, par exemple. Cependant, rien n'empêche de modifier cette texture au passage : dans l'exemple ci-dessus, de la réflexion a été ajoutée aux textures des yeux (iris, blanc, pupille).
Certains modèles peuvent nécessiter plusieurs maps. Par exemple, le modèle "Victoria" de chez Zygote, qui est beaucoup plus détaillé que le modèle Poser 4 standard, requiert une map pour le visage et une autre pour le reste du corps. Cheveux, vêtements et accessoires utilisent leurs propres maps.
L'utilisation d'une image map n'est en rien obligatoire. On peut mettre n'importe quoi à la place. En fait, on peut ne pas fournir de map et n'utiliser l'UV-mapping que pour colorer indépendamment chaque partie du modèle, ou on peut mélanger bitmaps et pigments procéduraux classiques. Dans l'exemple ci-dessus,
#declare Miris = texture{pigment{SkyBlue}}
remplace la couleur de l'iris telle qu'indiquée dans l'image map par la couleur SkyBlue.
Le procédé sera plus ou moins similaire avec les autres convertisseurs.
Une dernière chose à bien comprendre : parce que les maps UV s'ajustent précisémment à la géométrie d'un modèle, il est préférable de ne rien changer à la position des éléments sur l'image (mais cela est possible : voir la page d'UVMapper pour les détails). Bien sûr, on peut changer les couleurs, ou même la taille de l'image (les coordonnées UV sont relatives).
Placer le modèle dans la scène POV
Une fois les textures prêtes, il n'y a plus qu'à mettre le modèle dans la scène. Dans le cas de 3DS2POV et toujours dans l'hypothèse d'un fichier de départ TOTO.3DS, le fichier TOTO.POV est prêt à l'emploi et peut s'utiliser comme base de travail. Ce fichier fait appel aux fichiers TOTO_O.INC, TOTO_A.INC et TOTO_M.INC). En règle générale, on peut enlever la référence à TOTO_A.INC et modifier la caméra et les lumières. TOTO.POV contient aussi les coordonnées min et max du mesh. Les modèles Poser sont souvent très petits (une unité POV de haut). D'autres modèles peuvent avoir n'importe quelle taille.
Parfois, 3DS2POV fournit plusieurs mesh dans le fichier *.INC résultant. Tous ces mesh sont listés dans *.POV et rassemblés dans une seule union{ }.
Si vous utilisez l'UV-mapping avec Megapov ou une autre version non officielle, il vous faudra éventuellement ajouter quelque chose comme ça au début du fichier *.INC:
#version unofficial Megapov xxx.yyy; // où xxx.yyy est le numéro de version de Megapov.
Résumé
Pour utiliser l'UV-mapping, il vous faudra :
Le procédé est globalement le même que précédemment avec une différence : vous devrez générer la map vous-même. Heureusement, cela est presque automatique.
La première étape consiste à convertir le fichier au format OBJ, par exemple par 3DWIN, ou par tout autre logiciel qui peut exporter au format OBJ sans toucher aux informations UV. NE PAS UTILISER CROSSROADS, car il ignore les infos UV.
La seconde étape consiste à utiliser un utilitaire d'UV mapping pour recréer la map. Le plus populaire est l'UVMapper de Steve Cox. Il suffit de charger le mesh OBJ : UVMapper recrée la map sous forme de gabarit à partir des informations UV du fichier. Ce gabarit est sauvé au format BMP 8 bits (noir et blanc). Vous devrez le convertir en 24 bits pour pouvoir le peindre.
Après cela, continuer comme indiqué dans la section précédente.
Dans les cas précédents, l'information UV était fournie. Selon toute vraisemblance, elle a été créée avec des outils permettant de peindre interactivement sur un modèle 3D. Comme il n'existe pas, à ma connaissance, d'outils de ce type existant en shareware ou en freeware, il faudra utiliser UV-mapper pour faire le travail.
Voici un exemple détaillé basé sur sPatch, Crossroads, UVMapper et POSE2POV. Les fichiers (mais pas les programmes) nécessaires à la démonstration sont fournis ici. La technique est la même avec OBJUVPOV.
1. Créer le modèle dans sPatch
2. Convertir le modèle au format OBJ par Crossroads
|
3. Créer les informations UV
|
|
4. Conversion au format mesh2
|
5. Modifier les fichiers et lancer
POV
|
|
Notes:
Faire de l'UV-mapping avec des outils shareware ou freeware demande une certaine obstination, car il y a BEAUCOUP d'occasions où cela ne marche pas, ou mal. Les normales et les vecteurs UV peuvent disparaître ; les listes d'indices mesh2 causent des erreurs ; les maps n'apparaissent bien, et j'en passe.... Si mesh2 vous rend fou, essayez le format mesh classique avec OBJUVPOV. Essayez aussi plusieurs convertisseurs.
Voici quelques solutions à des problèmes que j'ai rencontré.
Mon modèle Poser 3DS est tordu après sa conversion, ou il refuse d'être exporté, ou il fait planter les convertisseurs
L'image map n'apparaît pas correctement
Voici deux raisons possibles :
L'image map apparaît correctement, sauf au niveau des "sutures" ; des triangles semblent mappés de façon erratique