Les maps mental ray (part 1): Pratique
Par Narann le dimanche, 13 décembre 2009, 14:21 - Infographie 3D - Boulot - Lien permanent
Ce billet est le premier d'un chapitre qui concerne les .map dans mental ray. Ici je vais expliquer les différentes méthodes pour en créer une. Il s'agit plus d'une introduction aux billets qui suivront où nous expliqueront exactement comment réagit Maya à l'utilisation des options de .map. Vous pouvez considérer ce tuto comme une solution clef en mains. Pour illustrer mes propos, j'ai décidé de racoler un peu en utilisant le modèle dont nous nous somme servi durant notre production de fin d'année 2007 (Mauvais Rôle): Le gobelin. Le modèle ainsi que la texture ont été fait par Jérémie Rousseau. :bravo:
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:
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!
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:
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 ^^).
Rien de plus simple...
J'ajoute un peu de DOF, pour le fun!
Ç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
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)":
Je met mon image originale dans le node de file:
Je lance mon rendu puis je vais voir dans:
Documents\maya\projects\default\sourceimages\cache
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!
Commentaires
vraiment très sympa ton blog je l'ai découvert via mayalounge et je ne regrette pas d'y avoir fait un tour.. j'ai lu pas mal d'article qui ont grandement éclairer ma lanterne, sur les .map, les anciens preset caché dans les calques de rendu entre autres articles et j'ai encore pas mal de lecture qui m'attend n’hésite a poster je prendrai plaisirs a te lire !!
Héhé merci beaucoup! :)