Dorian Fevrier's blog - Mot-clé - gobelinJe m’appelle FEVRIER Dorian, je suis infographiste 3D passionné par mon métier, l’informatique en général, l’internet, la programmation et l’évolution de tout ce petit monde. Vous trouverez sur ce blog des tutoriaux, mes coups de cœurs, avis, etc.2024-01-02T23:48:05+01:00FEVRIER Dorianurn:md5:695d9c73474c33ce3dab043823509c4bDotclearLes maps mental ray (part 1): Pratiqueurn:md5:9097340c202dfe6b5d9ea0444e3dd3ab2009-12-13T14:21:00+01:002013-07-26T22:35:46+02:00NarannInfographie 3D - Boulot3dfrgobelinmapmappage en memoiremayamental raypyramidalerenduscript<p><img src="https://www.fevrierdorian.com/blog/public/billets/maps_mental_ray_part_1_Pratique/maps_mental_ray_part_1_Pratique_th.png" alt="maps_mental_ray_part_1_Pratique_th.png" style="float:left; margin: 0 1em 1em 0;" title="maps_mental_ray_part_1_Pratique_th.png, déc. 2009" height="150" width="150" />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 (<a href="http://mauvais-role.com/" hreflang="fr">Mauvais Rôle</a>): Le gobelin. Le modèle ainsi que la texture ont été fait par <a href="http://www.linkedin.com/pub/j%C3%A9r%C3%A9mie-rousseau/5/434/77b" hreflang="en">Jérémie Rousseau</a>. :bravo:</p> <p>Avant de commencer, je vous invite fortement à lire <a href="https://www.fevrierdorian.com/blog/post/2009/01/14/Le-mappage-en-m%C3%A9moire-des-textures-dans-Mental-Ray-expliqu%C3%A9-%28Memory-mapped-textures%29." hreflang="fr">la partie "théorique"</a> sur le principe de memory-mapping (mappage en mémoire) des textures.</p>
<h4>Sommaire</h4>
<ul>
<li><a href="https://www.fevrierdorian.com/blog/post/2009/12/13/Les-maps-mental-ray-%28part-1%29%3A-Pratique#start">Start!</a></li>
<li><a href="https://www.fevrierdorian.com/blog/post/2009/12/13/Les-maps-mental-ray-%28part-1%29%3A-Pratique#la_methode_old_school">La méthode "Old school"</a></li>
<li><a href="https://www.fevrierdorian.com/blog/post/2009/12/13/Les-maps-mental-ray-%28part-1%29%3A-Pratique#la_methode_new_age">La méthode "New age"</a></li>
<li><a href="https://www.fevrierdorian.com/blog/post/2009/12/13/Les-maps-mental-ray-%28part-1%29%3A-Pratique#comparaison_des_deux_methodes">Comparaison des deux méthodes</a></li>
<li><a href="https://www.fevrierdorian.com/blog/post/2009/12/13/Les-maps-mental-ray-%28part-1%29%3A-Pratique#conclusion">Conclusion</a></li>
</ul>
<h4>Start! <a name="start"></a></h4>
<p>Voici notre texture:</p>
<p><img src="https://www.fevrierdorian.com/blog/public/billets/maps_mental_ray_part_1_Pratique/gobelin_color_512.jpg" alt="gobelin_color_512.jpg" style="display:block; margin:0 auto;" title="gobelin_color_512.jpg, déc. 2009" height="512" width="512" /></p>
<p>Elle a fait 4096x4096. :sourit:</p>
<p>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.</p>
<p>Commençons par "l'ancienne".</p>
<h5>La méthode "Old school" <a name="la_methode_old_school"></a></h5>
<p>Pour convertir notre texture en .map nous utilisons le programme imf_copy placé dans:</p>
<pre class="bash bash">C:\Program Files\Autodesk\Maya2010\bin\imf_copy.exe</pre>
<p>Soit la commande (Pour les options, <a href="https://www.fevrierdorian.com/blog/post/2009/01/14/Le-mappage-en-m%C3%A9moire-des-textures-dans-Mental-Ray-expliqu%C3%A9-%28Memory-mapped-textures%29.#imf_copy_traduction">voir ici</a>):</p>
<pre class="bash bash">imf_copy <span style="color: #660033;">-p</span> <span style="color: #660033;">-r</span> <span style="color: #660033;">-v</span> gobelin_color.png gobelin_color.map</pre>
<p>Nous venons de créer une map pyramidale!</p>
<p><img src="https://www.fevrierdorian.com/blog/public/billets/maps_mental_ray_part_1_Pratique/maps_mental_ray_part_1_Pratique_001.png" alt="maps_mental_ray_part_1_Pratique_001.png" style="display:block; margin:0 auto;" title="maps_mental_ray_part_1_Pratique_001.png, déc. 2009" height="59" width="511" /></p>
<p>Notez la taille de la .map: 87Mo.</p>
<p>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 <a href="https://www.fevrierdorian.com/blog/post/2009/01/14/Le-mappage-en-m%C3%A9moire-des-textures-dans-Mental-Ray-expliqu%C3%A9-%28Memory-mapped-textures%29." hreflang="fr">la partie "théorique"</a>).</p>
<p>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:</p>
<pre class="bash bash"><span style="color: #000000; font-weight: bold;">for</span> <span style="color: #000000; font-weight: bold;">%%</span>f <span style="color: #000000; font-weight: bold;">in</span> <span style="color: #7a0874; font-weight: bold;">(</span><span style="color: #000000; font-weight: bold;">*</span>.jpg <span style="color: #000000; font-weight: bold;">*</span>.tif, <span style="color: #000000; font-weight: bold;">*</span>.tga,<span style="color: #000000; font-weight: bold;">*</span>.bmp, <span style="color: #000000; font-weight: bold;">*</span>.png<span style="color: #7a0874; font-weight: bold;">)</span> <span style="color: #000000; font-weight: bold;">do</span> imf_copy <span style="color: #660033;">-p</span> <span style="color: #660033;">-r</span> <span style="color: #660033;">-v</span> <span style="color: #ff0000;">"%%f"</span> <span style="color: #ff0000;">"%%~nf.map"</span></pre>
<p>(Un de ses quatre je ferais peut être un petit tuto Python pour convertir des textures en map en fonction de sa date)... :sourit:</p>
<p>Nous allons donc appliquer notre .map au modèle de <a href="http://www.linkedin.com/pub/j%C3%A9r%C3%A9mie-rousseau/5/434/77b" hreflang="en">Jérémie</a>:</p>
<p><a href="https://www.fevrierdorian.com/blog/public/billets/maps_mental_ray_part_1_Pratique/face_gobelin001.png" title="face_gobelin001.png"><img src="https://www.fevrierdorian.com/blog/public/billets/maps_mental_ray_part_1_Pratique/.face_gobelin001_m.jpg" alt="face_gobelin001.png" style="display:block; margin:0 auto;" title="face_gobelin001.png, déc. 2009" height="325" width="448" /></a></p>
<p style="font-style:italic; text-align:center;">PS: J'en profite pour regarder le modèle, il avait bien bossé dis donc! o_O</p>
<p>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 ^^).</p>
<p><img src="https://www.fevrierdorian.com/blog/public/billets/maps_mental_ray_part_1_Pratique/maps_mental_ray_part_1_Pratique_002.png" alt="maps_mental_ray_part_1_Pratique_002.png" style="display:block; margin:0 auto;" title="maps_mental_ray_part_1_Pratique_002.png, déc. 2009" height="342" width="473" /></p>
<p style="font-style:italic; text-align:center;">Rien de plus simple...</p>
<p>J'ajoute un peu de DOF, pour le fun!</p>
<p><a href="https://www.fevrierdorian.com/blog/public/billets/maps_mental_ray_part_1_Pratique/face_gobelin002dof.jpg" title="face_gobelin002dof.jpg"><img src="https://www.fevrierdorian.com/blog/public/billets/maps_mental_ray_part_1_Pratique/.face_gobelin002dof_m.jpg" alt="face_gobelin002dof.jpg" style="display:block; margin:0 auto;" title="face_gobelin002dof.jpg, déc. 2009" height="336" width="448" /></a></p>
<p style="font-style:italic; text-align:center;">Ça fait longtemps que j'ai pas fait un peu de rendu moi, ça me manquait! :banaeyouhou:</p>
<p>Comme dis dans <a href="https://www.fevrierdorian.com/blog/post/2009/01/14/Le-mappage-en-m%C3%A9moire-des-textures-dans-Mental-Ray-expliqu%C3%A9-%28Memory-mapped-textures%29." hreflang="fr">la partie "théorique"</a>, mental ray reconnait automatiquement les textures au format .map. Il va donc l'utiliser sans autres manipulations de votre part.</p>
<p>Nous avons fini pour la première méthode.</p>
<h5>La méthode "New age" <a name="la_methode_new_age"></a></h5>
<p>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:</p>
<pre class="bash bash">Windows -<span style="color: #000000; font-weight: bold;">></span> Settings<span style="color: #000000; font-weight: bold;">/</span>Preferences -<span style="color: #000000; font-weight: bold;">></span> Preferences</pre>
<p>Puis dans:</p>
<pre class="bash bash">Settings -<span style="color: #000000; font-weight: bold;">></span> Rendering</pre>
<p><img src="https://www.fevrierdorian.com/blog/public/billets/maps_mental_ray_part_1_Pratique/maps_mental_ray_part_1_Pratique_003.png" alt="maps_mental_ray_part_1_Pratique_003.png" style="display:block; margin:0 auto;" title="maps_mental_ray_part_1_Pratique_003.png, déc. 2009" height="442" width="621" /></p>
<p>Ici, il faut cocher la case: "Use optimized textures (auto-conversion)".</p>
<p>Vous pouvez également choisir où vous souhaitez que les textures converties aillent ("Optimized textures location"):</p>
<ul>
<li>Soit dans le "sourceimages/cache" de votre projet maya</li>
<li>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:</li>
</ul>
<pre class="bash bash"><span style="color: #007800;">$MYCACHE</span>=C:\mycache</pre>
<p>Et bien:</p>
<pre class="bash bash"><span style="color: #007800;">$MYCACHE</span><span style="color: #000000; font-weight: bold;">/<</span>scene<span style="color: #000000; font-weight: bold;">></span></pre>
<p>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: )</p>
<p>"Conversion Mode" peut prendre deux valeurs:</p>
<ul>
<li>Assigned textures only.</li>
<li>All textures.</li>
</ul>
<p>"Assigned textures only" peut vous permettre de gagner un peu de temps en ne convertissant uniquement les textures qui appartiennent à un shader assigné.</p>
<p>Si vous avez pleins de shaders mais que vous ne vous en servez que de deux ou trois, il vaut mieux laisser cette option.</p>
<p>Voila, j'active donc "Use optimized textures (auto-conversion)":</p>
<p><img src="https://www.fevrierdorian.com/blog/public/billets/maps_mental_ray_part_1_Pratique/maps_mental_ray_part_1_Pratique_004.png" alt="maps_mental_ray_part_1_Pratique_004.png" style="display:block; margin:0 auto;" title="maps_mental_ray_part_1_Pratique_004.png, déc. 2009" height="93" width="420" /></p>
<p>Je met mon image originale dans le node de file:</p>
<p><img src="https://www.fevrierdorian.com/blog/public/billets/maps_mental_ray_part_1_Pratique/maps_mental_ray_part_1_Pratique_005.png" alt="maps_mental_ray_part_1_Pratique_005.png" style="display:block; margin:0 auto;" title="maps_mental_ray_part_1_Pratique_005.png, déc. 2009" height="110" width="301" /></p>
<p>Je lance mon rendu puis je vais voir dans:</p>
<pre class="bash bash">Documents\maya\projects\default\sourceimages\cache</pre>
<p><img src="https://www.fevrierdorian.com/blog/public/billets/maps_mental_ray_part_1_Pratique/maps_mental_ray_part_1_Pratique_006.png" alt="maps_mental_ray_part_1_Pratique_006.png" style="display:block; margin:0 auto;" title="maps_mental_ray_part_1_Pratique_006.png, déc. 2009" height="147" width="487" />
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:</p>
<h4>Comparaison des deux méthodes <a name="comparaison_des_deux_methodes"></a></h4>
<p>Maintenant que nous avons fait le tour de ses deux méthodes, je vous proprose de les comparer rapidement :hehe:</p>
<h5>La méthode "Old school"</h5>
<ul>
<li>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".</li>
<li>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.</li>
<li>Si vous n'êtes pas scripteur cette méthode vous gonflera rapidement ^^.</li>
</ul>
<h5>La méthode "New age"</h5>
<ul>
<li>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.</li>
<li>Tout est généré tous seul au moment du rendu. Les textures .map se mettent à jour toutes seules.</li>
<li>Cette technique semble assez pratique dans le cas ou vous travaillez en local.</li>
<li>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.</li>
</ul>
<h4>Conclusion <a name="conclusion"></a></h4>
<p>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.</p>
<p>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:</p>
<p>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:</p>
<p>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).</p>
<p>De même, si vous travaillez chez vous, je vous conseille cette technique!</p>
<p>J'espère que ce "mini-tuto" Vous aura aidé un peu (notamment la seconde méthode qui n'est pas encore démocratisé).</p>
<p>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.</p>
<p>A bientôt!</p>