Avant de commencer, je vous invite fortement à lire la partie "théorique" sur le principe de memory-mapping (mappage en mémoire) des textures.

Sommaire

Start!

Voici notre texture:

gobelin_color_512.jpg

Elle a fait 4096x4096. :sourit:

Il y a deux façons de travailler avec des .map dans Maya. Nous allons les voir l'une après l'autres puis nous comparerons leurs avantages/inconvénients.

Commençons par "l'ancienne".

La méthode "Old school"

Pour convertir notre texture en .map nous utilisons le programme imf_copy placé dans:

C:\Program Files\Autodesk\Maya2010\bin\imf_copy.exe

Soit la commande (Pour les options, voir ici):

imf_copy -p -r -v gobelin_color.png gobelin_color.map

Nous venons de créer une map pyramidale!

maps_mental_ray_part_1_Pratique_001.png

Notez la taille de la .map: 87Mo.

Si nous l'avions généré sans l'option "-p" elle aurait fait 65Mo, la même taille que sa version bmp non compressé. (Logique vu qu'en format .map, tout est décompressé et écrit tel qu'elle serait lu dans la ram, une dernière fois: Lisez la partie "théorique").

Comme je suis bon prince, je vous donne un petit script qui nous a beaucoup servit à l'époque pour convertir automatiquement nos images en .map (convertDirectoryToMap.bat) :joue:

for %%f in (*.jpg *.tif, *.tga,*.bmp, *.png) do imf_copy -p -r -v "%%f" "%%~nf.map"

(Un de ses quatre je ferais peut être un petit tuto Python pour convertir des textures en map en fonction de sa date)... :sourit:

Nous allons donc appliquer notre .map au modèle de Jérémie:

face_gobelin001.png

PS: J'en profite pour regarder le modèle, il avait bien bossé dis donc! o_O

Hop hop quelques area lights, un lambert avec la map en color (on avait fait 4-5 maps à l'époque pour le SSS, bump etc... Mais là, on se concentre sur l'utilisation des .map ^^).

maps_mental_ray_part_1_Pratique_002.png

Rien de plus simple...

J'ajoute un peu de DOF, pour le fun!

face_gobelin002dof.jpg

Ça fait longtemps que j'ai pas fait un peu de rendu moi, ça me manquait! :banaeyouhou:

Comme dis dans la partie "théorique", mental ray reconnait automatiquement les textures au format .map. Il va donc l'utiliser sans autres manipulations de votre part.

Nous avons fini pour la première méthode.

La méthode "New age"

Depuis Maya 2008 (je crois...), on peut convertir les textures en .map "a la volé", au moment du rendu. Pour cela, rien de plus simple, on va dans:

Windows -> Settings/Preferences -> Preferences

Puis dans:

Settings -> Rendering

maps_mental_ray_part_1_Pratique_003.png

Ici, il faut cocher la case: "Use optimized textures (auto-conversion)".

Vous pouvez également choisir où vous souhaitez que les textures converties aillent ("Optimized textures location"):

  • Soit dans le "sourceimages/cache" de votre projet maya
  • Soit dans un répertoire personnalisé. Notez que si vous choisissez "Custom Location" et que vous entrez "<scene>/map", les textures .map généré iront dans le répertoire de votre scène, dans un sous dossier "map". Le champ de saisi supporte également les variables d'environnement. Si par exemple, vous avez une variable d'environnement:
$MYCACHE=C:\mycache

Et bien:

$MYCACHE/<scene>

Vous créera un dossier du nom de votre scène dans votre répertoire de cache. Si le chemin entré n'existe pas, Maya en créé un automatiquement. (Copie de la doc :sourit: )

"Conversion Mode" peut prendre deux valeurs:

  • Assigned textures only.
  • All textures.

"Assigned textures only" peut vous permettre de gagner un peu de temps en ne convertissant uniquement les textures qui appartiennent à un shader assigné.

Si vous avez pleins de shaders mais que vous ne vous en servez que de deux ou trois, il vaut mieux laisser cette option.

Voila, j'active donc "Use optimized textures (auto-conversion)":

maps_mental_ray_part_1_Pratique_004.png

Je met mon image originale dans le node de file:

maps_mental_ray_part_1_Pratique_005.png

Je lance mon rendu puis je vais voir dans:

Documents\maya\projects\default\sourceimages\cache

maps_mental_ray_part_1_Pratique_006.png On vois déja un premier défaut: Il faut faire attention à la nomenclature de ses textures. Si vous utilisez deux textures portant le même nom mais dans un dossier différent il génèrera l'une, ou l'autre (je ne sais pas trop comment il fait son choix). Méfiance donc... :redface:

Comparaison des deux méthodes

Maintenant que nous avons fait le tour de ses deux méthodes, je vous proprose de les comparer rapidement :hehe:

La méthode "Old school"
  • Cette méthode offre l'avantage de "voir ce qu'on fait": Un fichier image, et son .map... Elle est plus "logique" en quelque sorte car "ce qu'on voit c'est ce qu'on lui donne".
  • Si vous êtes un peu scripteur, vous pouvez rapidement faire un système qui compare les dates des fichiers d'image original et régénère le .map. Le tout combiné avec un script de pre-render qui change les extensions des images si la version .map existe. (Refaire la méthode New Age en gros ^^ ) Sauf que vous contrôlez exactement ce qui ce passe au moment du rendu.
  • Si vous n'êtes pas scripteur cette méthode vous gonflera rapidement ^^.
La méthode "New age"
  • Le gros intérêt de cette méthode est que cela ne change rien à l'intérieur de vos scènes et vous évite d'avoir à jongler avec les extensions de fichier.
  • Tout est généré tous seul au moment du rendu. Les textures .map se mettent à jour toutes seules.
  • Cette technique semble assez pratique dans le cas ou vous travaillez en local.
  • En revanche, comme toute méthode dites "automatique", il est nécessaire de bien comprendre comment elle fonctionne si on souhaite l'intégrer à un pipeline. Mais c'est tout à fait possible.

Conclusion

En ce qui me concerne, j'ai un penchant pour la méthode "Old School". Surtout pour le coté "pipeline". La conversion des images en .map, combiné à un script pour les comparaisons de date, si fait régulièrement, n'est pas particulièrement dérangeant.

De plus, passer par une "génération de .map" permet de faire une étape (un breakpoint) dans le pipeline, ce qui peut être intéressant et diminue les risques de fausses manipulations. :youplaBoum:

Généraliser la technique "New age" à tout un pipeline peut être dangereux si un/des graphistes utilise des textures persos pour faire des tests d'uv par exemple, ou dans le cas d'un graphiste qui texture un personnage avec 36 versions d'une image. On peut vite se retrouver avec des gigas de .map inutiles... :baffed:

En revanche, je pense que c'est une très bonne idée d'utiliser cette technique sur certains postes de travail, en local (comprenez hors renderfarm/rendu/pipeline) peut faire gagner du temps (l'exemple de notre graphiste qui test ses textures).

De même, si vous travaillez chez vous, je vous conseille cette technique!

J'espère que ce "mini-tuto" Vous aura aidé un peu (notamment la seconde méthode qui n'est pas encore démocratisé).

Dans le prochain billet, nous utiliseront une map spécial (je l'appel la map de debug) et nous verrons comment réagit Maya avec une map pyramidale.

A bientôt!