Tutoriel: Lightmaps pour Contact en utilisant 3dsmax.

But: Transformer vos scènes VRML en scènes lightmappées.
Cliquez ici pour un exemple


Pre-requis:
--- avoir le plug-in Luminaire (gratuit)
--- 3dsmax (le tutoriel est écrit pour 3dsmax4+ mais Luminaire existe aussi pour R2 et R3)
--- utiliser l'exporter VRML (gratuit) de Blaxxun est recommandé (non-testé avec celui par defaut). (téléchargez le ici)

Note: je ne dis pas que c'est la seule façon, ni même la meilleure, mais une d'entre elles.


Partie 1: Préparer la scène.

Alors vous voulez avoir des lightmaps et êtes tout excité qu'il y ait un plug-in gratuit pour celà, mais en lisant sa documentation, vous tombez sur un os: VRMLent parlant, vous ne devriez utiliser qu'une seule texture par objet (c.a.d que la texture ne pourrait pas être utilisée sur un autre objet), ni utiliser de TextureTransform{}. Aïe.
Mais ne vous inquiétez pas, il y a toujours une solution comme vous allez le voir :-)

Si ce n'est pas déjà le cas, ouvrez votre scène dans 3dsmax (si vous n'en avez pas, vous pouvez utiliser celle-là) pour le tutoriel.

Exportez en VRML tel-quel, mais vérifiez bien que:
     - tous les objest qui seront illuminés ont des coordonnées UVW
     - vous n'exportez pas en tant que primitives pour être sûr que les UVW correspondront bien à ce que vous attendez
Nommez-la mascene_normale.wrl


Partie 2: Exporter les lightmaps.

Maintenant, nous allez tricher pour avoir les lightmaps: dans l'éditeur de matériaux (tapez "M" pour l'ouvrir), désactivez la map diffuse (pas la couleur, la map), s'il y en a une, pour TOUS les matériaux utilisés par les objets futurs-illuminés.

Puis dans Tools, cliquez le bouton "More.." et trouvez "Lum. Lightmap".



Paramétrez comme sur l'image ci-dessous, puis sélectionnez tous les objets et cliquez "Render Selected Objects" (n'oubliez pas de donner un nom au(x) fichier(s) générés en cliquant le bouton "...").

Explication: nous avons remplacé la map diffuse de chaque objet par sa lightmap. Si nous n'avions pas désactivé les maps diffuse, les lightmaps auraient été intégrées dans les textures au lieu d'être des images séparées (en résumé).

Maintenant, exportez en VRML et nommez-la mascene_illuminee.wrl


Partie 3: Editer le code VRML.

La partie sympatique :-)
Créez une scène vide (nommez-la mascene_lightmappee.wrl) et tapez ce qui suit:
#VRML V2.0 utf8

EXTERNPROTO DrawGroup[
	exposedField SFVec3f bboxSize
	exposedField SFVec3f bboxCenter
	exposedField SFBool sortedAlpha
	exposedField MFNode drawOp
	exposedField MFNode children
	eventIn MFNode addChildren
	eventIn MFNode removeChildren
][
	"urn:inet:blaxxun.com:node:DrawGroup",
	"http://www.blaxxun.com/vrml/protos/nodes.wrl#DrawGroup",
	"nodes.wrl#DrawGroup"
]
EXTERNPROTO DrawOp[
	exposedField MFInt32 op
	exposedField MFFloat args
][
	"urn:inet:blaxxun.com:node:DrawOp",
	"http://www.blaxxun.com/vrml/protos/nodes.wrl#DrawOp",
	"nodes.wrl#DrawOp"
]

DrawGroup {sortedAlpha FALSE  children [
	### Normal
	#
	# Point A
	#
	DrawOp {op [2 3  6 1  7 5  8 2]}

	### Lightmaps
	#
	# Point B
	#
	DrawOp {op [2 4  6 0  7 2  8 2]}
] }

### Reste de la scene

#
# Point C
#
Notez que les valeurs données dans les DrawOp ne sont pas forcément les meilleures dans votre cas particulier. Plus d'infos sur la syntaxe de DrawOp et DrawGroup ici (en anglais).

Ouvrez mascene_normale.wrl et copiez les éléments qui ne seront pas illuminés (genre proximitysensors et autres) dans mascene_lightmappee.wrl au Point C.
Faites de même pour les éléments qui eux seront illuminés, mais mettez-les au Point A.
Ouvrez mascene_illuminée.wrl et répétez l'opération pour les éléments qui seront illuminés, mais cette fois au Point B.


Partie 4: Conclusion.

Ca y est :-) Mais vous pouvez (et c'est même conseillé) de traficoter des variantes, exemple: render les lightmaps assignées en "self-illumination" au lieu de "diffuse", ré-activez les maps diffuse et exportez en multitexturage, mais vous aurez à convertir en png avec un masque alpha dans PaintShopPro/Photoshop/autre.

Egalement, si vous avez des nodes redondants, vous devriez penser à éditer votre code pour utiliser DEF...USE afin d'avoir de plus petits fichiers.




Annexe: questions/(débuts de) réponses.

Q: Localement, pas de problème, mais sur internet j'obtiens des erreurs "Missing or bad image file" (image corrompue ou manquante), pourquoi ?
-> Vérifiez la casse de vos noms de fichiers, certains sont probablement en majuscules alors que d'autres sont en minuscules: en effet, Luminaire tend à exporter en majuscules tandis que c'est le contraire avec l'exporter VRML.

Q: Cà produit une lightmap noire, où me suis-je trompé ?
-> Essayez de mettre du blanc comme couleur diffuse (dans 3dsmax) et ré-essayez. Si c'est toujours noir, il se peut que l'objet soit tout simplement trop loin des sources lumineuses, essayez d'augmenter le rayon des lumières.

Q: J'ai renderé les lightmaps assignées en self-illumination comme vous avez dit et voulu exporter en multitexturage, mais l'exporter a planté :-(
-> Vérifiez que vous n'avez pas de maps non-VRML dans vos matériaux genre Gradient Linéaire, convertissez-les en Bitmaps/Images à la place.

Q: Ok, c'est pas mal, mais je voudrais que çà paraisse plus réaliste !
-> Lisez la documentation de Luminaire (en anglais), c'est un plug-in puissant s'il est manié de la bonne façon, mais celà dépasse le cadre de ce tutoriel. Egalement, documentez-vous sur les techniques d'éclairage naturel en général, même si ce n'est pas forcément pour la 3D.

Q: Je ne veux pas une lightmap par objet, je les veux toutes dans un seul fichier :-(
-> Dans la partie 2, compactez tous vos objets-à-illuminer ensemble (Tools>Collapse), mais vous perdrez alors les spécificités de chaque materiau (le bump par exemple) lors du calcul des lightmaps, sans compter que quand elles sont séparées, vous pouvez compresser chaque lightmap avec un ratio différent, les animer plus facilement et aussi leur donner une résolution différente (genre 128*128 pour un petit objet et 512*512 pour un plus gros).


Ecrit par Cécile Muller
Page en anglais : http://www.wildpeaks.com/tutorials/lightmaps.html
Source: http://www.wildpeaks.com/tutorials/lightmaps_fr.html

 
18 internaute(s) sur Web3d-fr
Copyright Web3d-fr 2001-2004