Dorian Fevrier's blog - Mot-clé - pyramidaleJe 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 2.2): Le debugurn:md5:fb7ac4999d9d421a89b046f7edaab3e62010-01-30T16:09:00+01:002013-07-26T22:34:42+02:00NarannInfographie 3D - Boulotdebugelliptiqueexplicationsfiltrefrmapmayamental raypyramidale<p><img src="https://www.fevrierdorian.com/blog/public/billets/sampling/map_debug_tn.png" alt="map_debug_tn.png" style="float:left; margin: 0 1em 1em 0;" title="map_debug_tn.png, janv. 2010" height="150" width="150" />Voici la suite du billet précédent. Peut-être le billet le plus compliqué que je n'ai jamais écrit. Ça été très hardu pour moi de réussir à énoncer clairement les différents fonctionnements des filtres dans la mesure ou ils nécessitent d'avoir déjà emmagasiné un bon paquet de connaissance avant de pouvoir être compris :baffed: ... Technophobes passez votre chemin, les autres, armez vous de courage! Et surtout! Laissez moi un commentaire si vous voyez des choses à redire (et il y en a tellement c'est compliqué!). Si vous voyez que je peut m'être planté quelque part, n'hésitez pas à me le notifier. Bon courage et j'espere que vous apprendrez des choses intéressantes en lisant ce billet :sourit: .</p> <h5>Sommaire:</h5>
<ul>
<li><a href="https://www.fevrierdorian.com/blog/post/2010/01/30/Les-maps-mental-ray-%28part-2.2%29%3A-Le-debug#la_map_de_debug">La map de debug</a></li>
<li><a href="https://www.fevrierdorian.com/blog/post/2010/01/30/Les-maps-mental-ray-%28part-2.2%29%3A-Le-debug#premier_test">Premier test</a></li>
<li><a href="https://www.fevrierdorian.com/blog/post/2010/01/30/Les-maps-mental-ray-%28part-2.2%29%3A-Le-debug#sans_le_filtrage">Sans le filtrage</a></li>
<li><a href="https://www.fevrierdorian.com/blog/post/2010/01/30/Les-maps-mental-ray-%28part-2.2%29%3A-Le-debug#limite_diagnose_sample">Petite pause sur le diagnose sample dans le cas d'une map de debug</a></li>
<li><a href="https://www.fevrierdorian.com/blog/post/2010/01/30/Les-maps-mental-ray-%28part-2.2%29%3A-Le-debug#on_reprend">On reprend avec les filtres de base de Maya</a></li>
<li><a href="https://www.fevrierdorian.com/blog/post/2010/01/30/Les-maps-mental-ray-%28part-2.2%29%3A-Le-debug#filtre_elliptic">Le filtre Elliptique</a></li>
<li><a href="https://www.fevrierdorian.com/blog/post/2010/01/30/Les-maps-mental-ray-%28part-2.2%29%3A-Le-debug#attack_mental_ray">A l'attaque de mental ray, le vrai, pas l'autre!</a></li>
<li><a href="https://www.fevrierdorian.com/blog/post/2010/01/30/Les-maps-mental-ray-%28part-2.2%29%3A-Le-debug#le_filtrage_pyramidale">Le filtrage Pyramidale</a></li>
<li><a href="https://www.fevrierdorian.com/blog/post/2010/01/30/Les-maps-mental-ray-%28part-2.2%29%3A-Le-debug#optimisation_et_explications_plus_precises">Optimisation et explications plus précises</a></li>
<li><a href="https://www.fevrierdorian.com/blog/post/2010/01/30/Les-maps-mental-ray-%28part-2.2%29%3A-Le-debug#le_filtrage_elliptique_le_retour">Le filtre Elliptique (Le Retour!)</a></li>
</ul>
<p>Avant de commencer je voulais remercier la personne qui m'a fait "découvrir" le principe de la "map de debug": <a href="http://fr.linkedin.com/in/pierrelopes" hreflang="en">Pierre LOPES</a>.</p>
<p>C'est bête comme tout et je me suis senti idiot de ne pas avoir eu l'idée en premier tellement le principe est simple.</p>
<h5>La map de debug <a name="la_map_de_debug"></a></h5>
<p>Comme vue dans <a href="https://www.fevrierdorian.com/blog/post/2009/12/24/Les-maps-mental-ray-%28part-2.1%29%3A-Le-debug#le_choix">mon billet précédent</a>, pour pouvoir voir comment se comporte une mipmap, il faut créer des maps différentes pour chaque niveau et des les empaqueter dans une .map mental ray (ce sera l'objet de mon dernier billet la dessus). Voici ma map de debug. En ce qui me concerne, j'ai "écrit" la taille de la map en question sur chaque niveau (je vous conseille vivement de faire ça):</p>
<p><img src="https://www.fevrierdorian.com/blog/public/billets/sampling/testMapProfil.png" alt="testMapProfil.png" style="display:block; margin:0 auto;" title="testMapProfil.png, janv. 2010" height="327" width="648" /></p>
<p>J'ai ainsi:</p>
<ul>
<li>Mon niveau principal, le plus grand: 8192 x 8192</li>
<li>Niveau 2: 4096 * 4096</li>
<li>Niveau 3: 2048 * 2048</li>
<li>Etc...</li>
</ul>
<p>Mais ne perdons pas de temps et testons cette map!</p>
<p>Vous pouvez la <a href="https://www.fevrierdorian.com/blog/public/billets/memorymap/debugMap.7z">télécharger ici</a> (24mo) au format <a href="http://www.7-zip.org/" hreflang="en">7-zip</a> (dsl pour le format mais Winrar, n'a atteint que 68mo... :mechantCrash: ).</p>
<h5>Premier test <a name="premier_test"></a></h5>
<p>Pour les paramètres de rendu, on fait simple et vite: J'utilise le preset Production, Anti-aliasing Contrast à 0.05, filtre Mitchel:</p>
<p><img src="https://www.fevrierdorian.com/blog/public/billets/sampling/map_debug001.png" alt="map_debug001.png" style="display:block; margin:0 auto;" title="map_debug001.png, janv. 2010" height="172" width="470" /></p>
<p><img src="https://www.fevrierdorian.com/blog/public/billets/sampling/map_debug002.png" alt="map_debug002.png" style="display:block; margin:0 auto;" title="map_debug002.png, janv. 2010" height="236" width="367" /></p>
<p>N'oubliez pas de passer en rendu mental ray (Maya software supporte les .map mais pas le mipmaping :sourit: ).
<img src="https://www.fevrierdorian.com/blog/public/billets/sampling/map_debug003.png" alt="map_debug003.png" style="display:block; margin:0 auto;" title="map_debug003.png, janv. 2010" height="480" width="640" />
Et un diagnostique du sampling:</p>
<p><img src="https://www.fevrierdorian.com/blog/public/billets/sampling/map_debug006.png" alt="map_debug006.png" style="display:block; margin:0 auto;" title="map_debug006.png, janv. 2010" height="198" width="480" /></p>
<p><img src="https://www.fevrierdorian.com/blog/public/billets/sampling/map_debug003Diagnose.png" alt="map_debug003Diagnose.png" style="display:block; margin:0 auto;" title="map_debug003Diagnose.png, janv. 2010" height="480" width="640" /></p>
<p>Vous l'aurez compris, il y a des options par défaut qui font déjà quelque chose. :hehe:</p>
<p>Ici, ont voit que mental ray à utiliser les niveau en 256*256 et 128*128. Donc mental ray utilise bien la mipmap avec des options de base. L'envois de sample est modéré et un bon compromis.</p>
<p>Vous pourrez le faire remarquer: 256 pixels, c'est peut être un peu léger (nous y reviendrons pour régler tout ça! :hehe: )</p>
<h5>Sans le filtrage <a name="sans_le_filtrage"></a></h5>
<p>Désactivons le filtrage:</p>
<p><img src="https://www.fevrierdorian.com/blog/public/billets/sampling/map_debug004.png" alt="map_debug004.png" style="display:block; margin:0 auto;" title="map_debug004.png, janv. 2010" height="165" width="340" /></p>
<p><img src="https://www.fevrierdorian.com/blog/public/billets/sampling/map_debug005.png" alt="map_debug005.png" style="display:block; margin:0 auto;" title="map_debug005.png, janv. 2010" height="480" width="640" /></p>
<p>Si nous regardons de plus près nous voyons en effet qu'aucun filtre n'est appliqué sur la texture:</p>
<p><img src="https://www.fevrierdorian.com/blog/public/billets/sampling/map_debug010.png" alt="map_debug010.png" style="display:block; margin:0 auto;" title="map_debug010.png, janv. 2010" height="480" width="640" /></p>
<p><img src="https://www.fevrierdorian.com/blog/public/billets/sampling/map_debug007.png" alt="map_debug007.png" style="display:block; margin:0 auto;" title="map_debug007.png, janv. 2010" height="480" width="640" />
Direct, ça lance beaucoup plus de samples... On peut même voir un effet de "vague" qui montre qu'il y a une sorte de "saturation".</p>
<h5>Petite pause sur le diagnose sample dans le cas d'une map de debug <a name="limite_diagnose_sample"></a></h5>
<p>Bon, je m'arrête un peu la dessus car ça mérite quelques précisions. :youplaBoum:</p>
<p>Utiliser le "diagnose samples" est conseillé car il permet de voir "ou les samples se perdent". Je vous ai montré deux exemples ici pour voir le principe. Cependant, <ins>il ne faut pas s'y arrêter</ins>. En effet, sur la map de debug, chaque niveau à sa propre texture, ses propres couleurs, son propre piquet. Comparer les passes de "diagnose" de différents paramètres entre elles n'a aucun intérêt avec une map de debug. Voici un exemple qui viens appuyer mes dires (j'ai utilisé un paramètre que nous verrons plus tard pour bien distinguer les deux résolutions):</p>
<p><img src="https://www.fevrierdorian.com/blog/public/billets/sampling/map_debug009.png" alt="map_debug009.png" style="display:block; margin:0 auto;" title="map_debug009.png, janv. 2010" height="480" width="640" /></p>
<p><img src="https://www.fevrierdorian.com/blog/public/billets/sampling/map_debug008.png" alt="map_debug008.png" style="display:block; margin:0 auto;" title="map_debug008.png, janv. 2010" height="480" width="640" /></p>
<p>Nous voyons que la résolution de 2048 à nécessité plus de sample que la résolution 4096 car, encore une fois, chaque niveau à sa propre texture, ses propres couleurs, son propre piquet (rabâche :redface: ).</p>
<p>Je vous invite donc, à diagnostiquer vos samples quand vous êtes en condition réelle mais cette manipulation est inutile voir trompeuse avec une map de debug. :sourit:</p>
<p>Fin de la parenthèse.</p>
<h5>On reprend avec les filtres de base de Maya <a name="on_reprend"></a></h5>
<p>Passons en Mipmap:</p>
<p><img src="https://www.fevrierdorian.com/blog/public/billets/sampling/map_debug011.png" alt="map_debug011.png" style="display:block; margin:0 auto;" title="map_debug011.png, janv. 2010" height="159" width="433" />
<img src="https://www.fevrierdorian.com/blog/public/billets/sampling/map_debug012.png" alt="map_debug012.png" style="display:block; margin:0 auto;" title="map_debug012.png, janv. 2010" height="480" width="640" /></p>
<p>Pour pouvoir faire varier la "vitesse" de changement entre les différents niveaux de la map, il suffit de jouer avec la valeur du filter (dans Effects).</p>
<p><img src="https://www.fevrierdorian.com/blog/public/billets/sampling/map_debug016.png" alt="map_debug016.png" style="display:block; margin:0 auto;" title="map_debug016.png, janv. 2010" height="127" width="422" />
<img src="https://www.fevrierdorian.com/blog/public/billets/sampling/map_debug017.png" alt="map_debug017.png" style="display:block; margin:0 auto;" title="map_debug017.png, janv. 2010" height="480" width="640" />
Plus vous la diminuer, plus vous atténuez l'effet du filtre (on dit la compression) et plus vous vous rapprochez du niveau "zéro" (full résolution). Un filter à 0 et votre texture est en full résolution, comme si vous étiez en off (logique).</p>
<p>Vous pouvez changer de filtre (Quadratic, Quartic, Gaussian, oubliez le Box...), vous obtiendrez toujours cet espèce de dégradé que vous pourrez "contrôler" grâce a la valeur du filter (dans Effects).</p>
<p>Ça c'est pour les filters de "base" (vous verrez plus tard que ce n'est pas aussi simple).</p>
<p>Je vous présente brièvement le dernier (j'aurai l'occasion d'y revenir plus en détail): Le filtre Elliptique</p>
<h5>Le filtre Elliptique <a name="filtre_elliptic"></a></h5>
<p>C'est quoi ça? o_O</p>
<p>C'est un filtre un peu spécial de mental ray qui offre l'avantage d'avoir un excellent piquet sur la texture et diminue fortement le flou sur celle ci (comparé à l'utilisation d'autres filtres). Avant, il fallait bidouiller pour l'avoir (nous verrons ça plus tard :sourit: ). Maintenant, rien de plus simple:</p>
<p>Vous passez en Mipmap:</p>
<p><img src="https://www.fevrierdorian.com/blog/public/billets/sampling/map_debug011.png" alt="map_debug011.png" style="display:block; margin:0 auto;" title="map_debug011.png, janv. 2010" height="159" width="433" /></p>
<p>Puis dans le frame mental ray, vous activez "Advanced Elliptical Filtering":</p>
<p><img src="https://www.fevrierdorian.com/blog/public/billets/sampling/map_debug013.png" alt="map_debug013.png" style="display:block; margin:0 auto;" title="map_debug013.png, janv. 2010" height="84" width="433" /></p>
<p>Dans sa grande bonté (sarcasmes inside), Maya va automatiquement vous cocher les deux cases suivantes ("Override Global Auto-Conversion Settings" et "Convert File To Optimized Format").</p>
<p>Décochez la première suffira. Mais assurez vous surtout que la case "use optimized texture (auto-conversion)" est décoché dans "Preference/Rendering":</p>
<p><img src="https://www.fevrierdorian.com/blog/public/billets/sampling/mentalRayPref001.png" alt="mentalRayPref001.png" style="display:block; margin:0 auto;" title="mentalRayPref001.png, janv. 2010" height="205" width="482" /></p>
<p>Revenons-en à notre filtre elliptique. En fait, l'utilisation de ce filtre n'est efficace que dans le cas d'une map pyramidale (petit rappel <a href="https://www.fevrierdorian.com/blog/post/2009/12/13/Les-maps-mental-ray-%28part-1%29%3A-Pratique#la_methode_new_age">ici</a> :sourit: ), d'où cette "gentille" façon de vous forcer la main des fois que vous serriez trop con pour faire vos maps tout seul... :baffed:</p>
<p>Le paramètre Anti-Aliasing Level est un peu comme la valeur du filter pour les autres filtres (mais en sens inverse). Il correspond (grosso modo, nous expliquerons mieux ça plus tard) au nombre de pixel de la texture (texels) qui seront utilisé par pixel. 8 est une bonne valeur. Plus vous la diminuez plus vous avancez dans les différents niveaux de la map (et donc une faible résolution). Testez par vous même:
<img src="https://www.fevrierdorian.com/blog/public/billets/sampling/mentalRayPref002.png" alt="mentalRayPref002.png" style="display:block; margin:0 auto;" title="mentalRayPref002.png, janv. 2010" height="480" width="640" />
PS: Sur <a href="http://download.autodesk.com/us/maya/2010help/index.html?url=mental_ray_for_Maya_rendering_Dynamic_Attributes.htm,topicNumber=d0e589888" hreflang="en">la documentation officielle</a> (à la fin) une option est donné pour ajouter des paramètres (qui sont au final les paramètres du node mental ray <a href="http://download.autodesk.com/us/maya/2010help/mr/shaders/node6.html#mi_shader__mib_texture_filter_lookup" hreflang="en">mib_texture_filter_lookup</a>):</p>
<pre class="mel mel">addAttr <span style="color: #339933;">-</span>longName <span style="color: #ff0000;">"miEllipticalBilinear"</span> <span style="color: #339933;">-</span>at bool <span style="color: #339933;">-</span>defaultValue <span style="color: #0000dd;">1</span> file1<span style="color: #339933;">;</span>
addAttr <span style="color: #339933;">-</span>longName <span style="color: #ff0000;">"miEllipticalEccMax"</span> <span style="color: #339933;">-</span>at <span style="color: #ff0000;">"float"</span> <span style="color: #339933;">-</span>defaultValue <span style="color:#800080;">4.0</span> <span style="color: #339933;">-</span>minValue <span style="color:#800080;">0.001</span> <span style="color: #339933;">-</span>maxValue <span style="color:#800080;">40.0</span> file1<span style="color: #339933;">;</span>
addAttr <span style="color: #339933;">-</span>longName <span style="color: #ff0000;">"miEllipticalDiscR"</span> <span style="color: #339933;">-</span>at <span style="color: #ff0000;">"float"</span> <span style="color: #339933;">-</span>defaultValue <span style="color:#800080;">0.3</span> <span style="color: #339933;">-</span>minValue <span style="color:#800080;">0.001</span> <span style="color: #339933;">-</span>maxValue <span style="color:#800080;">1.0</span> file1<span style="color: #339933;">;</span>
addAttr <span style="color: #339933;">-</span>longName <span style="color: #ff0000;">"miEllipticalCircleR"</span> <span style="color: #339933;">-</span>at <span style="color: #ff0000;">"float"</span> <span style="color: #339933;">-</span>defaultValue <span style="color:#800080;">0.8</span> <span style="color: #339933;">-</span>minValue <span style="color:#800080;">0.001</span> <span style="color: #339933;">-</span>maxValue <span style="color:#800080;">1.0</span> file1<span style="color: #339933;">;</span></pre>
<p>Je reviendrais sur ces options plus tard :sourit: .</p>
<h5>Arf! On voit la jonction entre les différents niveaux! C'est tout pourris! <a name="arf_on_voit_la_jonction"></a></h5>
<p>Héhé! :hehe: Vous êtes tombé dans le panneau. En effet, bien que ça puisse sembler surprenant, ce filtre est l'un des plus précis de tous. En effet, Les autres filtres font soit de l'aliasing (Off, Box) soit du flou (Mipmap, Quadratic, Quartic, Gaussian). Voici une image avec les différents filtres activés.
<img src="https://www.fevrierdorian.com/blog/public/billets/sampling/mentalRayFilters001.png" alt="mentalRayFilters001.png" style="display:block; margin:0 auto;" title="mentalRayFilters001.png, janv. 2010" height="495" width="640" /></p>
<p>On remarque les similitudes entre Quadratic, Quartic et Gaussian. Ils ont aussi cette tendance à finir en "gris" (l'effet "jeux vidéo"). Comparé au filtre Elliptique qui va beaucoup plus loin, et beaucoup plus précis. Après, ce n'est peut être pas le plus joli esthétiquement parlant mais c'est un autre débat. Il peut vraiment servir dans certains cas et le fait de savoir qu'il existe pourra vous aider.</p>
<h5>A l'attaque de mental ray, le vrai, pas l'autre! <a name="attack_mental_ray"></a></h5>
<p>Jusqu'à présent, tout ce qu'on a pu voir était "Maya thinked" et, comme tout ce qui est "Maya thinked", tout est caché pour pas traumatiser l'artiste en pleine folie créatrice... Nous, techniciens de base, on n'est pas trop susceptible vis-avis de ce genre de chose (si ont pouvais (re)faire de la 3D en console, on s'en plaindrait presque pas :baffed: ) et ce qui nous intéresse ici c'est justement de comprendre ce qui ce passe... :hehe:</p>
<h4>Les filtres mental ray <a name="les_filtres_mental_ray"></a></h4>
<p>Mental ray dispose, par défaut, de deux filtres de texture.</p>
<h5>Le filtrage Pyramidale <a name="le_filtrage_pyramidale"></a></h5>
<p>Je vais être franc, je n'ai jamais réussi à rendre de manière identique ce que me donne ce filtres de texture avec des rendus de filtre de type Maya (mipmap, quadratic, etc...). Je me demande si c'est possible en fait. ces derniers ont l'air de fonctionner dans mental ray comme avec Maya Software et donnent des résultats identiques. Je soupçonne que "mental ray for Maya" ait l'équivalent de ses filtres codé dans le plugins mais inutilisable en temps que node indépendant.</p>
<p>Pour revenir au filtre pyramidale, j'ai beaucoup de mal à comprendre la documentation (que je trouve presque contradictoire).</p>
<p>Je vous laisse juger:</p>
<p><a href="http://download.autodesk.com/us/maya/2010help/mr/manual/node23.html" hreflang="en">http://download.autodesk.com/us/maya/2010help/mr/manual/node23.html</a> << Doc mental ray</p>
<p><a href="http://download.autodesk.com/us/maya/2010help/Nodes/mentalrayTexture.html" hreflang="en">http://download.autodesk.com/us/maya/2010help/Nodes/mentalrayTexture.html</a> << Doc du node Maya</p>
<p><img src="https://www.fevrierdorian.com/blog/public/billets/sampling/mentalrayTextureSetup001.png" alt="mentalrayTextureSetup001.png" style="display:block; margin:0 auto;" title="mentalrayTextureSetup001.png, janv. 2010" height="269" width="420" /></p>
<p><img src="https://www.fevrierdorian.com/blog/public/billets/sampling/mentalrayTexturePanel001.png" alt="mentalrayTexturePanel001.png" style="display:block; margin:0 auto;" title="mentalrayTexturePanel001.png, janv. 2010" height="294" width="428" /></p>
<p>Si je devais résumé de ce que j'en comprend, c'est que:</p>
<ul>
<li>Si votre map est une texture "normal" (non .map), il converti la texture en map pyramidale (tout ça dans la mémoire, ce qui nécessite environs 30% de mémoire supplémentaire) avant d'y utiliser sont filtre mipmap (pour determiner la couleur de chaque pixel).</li>
<li>Si votre map est déja "memory mapped", il ne la convertie pas et utilise directement le filtre mipmap.</li>
</ul>
<p>Si c'est réellement ça, c'est assez mal énoncé... :zinzin:</p>
<p>Concernant la valeur du "filter size" du node mentalrayTexture (on va faire simple ce coup ci), c'est exactement le même principe que la valeur du filter du node de file.
<img src="https://www.fevrierdorian.com/blog/public/billets/sampling/mentalrayTextureFilter001.png" alt="mentalrayTextureFilter001.png" style="display:block; margin:0 auto;" title="mentalrayTextureFilter001.png, janv. 2010" height="480" width="640" />
D'après mes tests, il me semble que cette méthode offre la "courbe de changement" la plus douce.</p>
<p>En effet:</p>
<p>Maya filter Box, 0.5:
<img src="https://www.fevrierdorian.com/blog/public/billets/sampling/testFiltersMentalray/mentalRayFilterCurve001.png" alt="mentalRayFilterCurve001.png" style="display:block; margin:0 auto;" title="mentalRayFilterCurve001.png, janv. 2010" height="480" width="640" />
Maya filter Quadratic 0.5:
<img src="https://www.fevrierdorian.com/blog/public/billets/sampling/testFiltersMentalray/mentalRayFilterCurve003.png" alt="mentalRayFilterCurve003.png" style="display:block; margin:0 auto;" title="mentalRayFilterCurve003.png, janv. 2010" height="480" width="640" />
Maya filter Quartic 0.5:
<img src="https://www.fevrierdorian.com/blog/public/billets/sampling/testFiltersMentalray/mentalRayFilterCurve004.png" alt="mentalRayFilterCurve004.png" style="display:block; margin:0 auto;" title="mentalRayFilterCurve004.png, janv. 2010" height="480" width="640" />
Maya filter Gaussian 0.5:
<img src="https://www.fevrierdorian.com/blog/public/billets/sampling/testFiltersMentalray/mentalRayFilterCurve005.png" alt="mentalRayFilterCurve005.png" style="display:block; margin:0 auto;" title="mentalRayFilterCurve005.png, janv. 2010" height="480" width="640" />
Quadratic, Quartic et Gaussian se ressemble énormément... Et même Box en fait... Ormis la précision, la "courbe de changement" est identique...</p>
<p>Maya filter Mipmap 0.5:
<img src="https://www.fevrierdorian.com/blog/public/billets/sampling/testFiltersMentalray/mentalRayFilterCurve002.png" alt="mentalRayFilterCurve002.png" style="display:block; margin:0 auto;" title="mentalRayFilterCurve002.png, janv. 2010" height="480" width="640" />
Filtre Pyramidale 1.0 (mentalrayTexture):
<img src="https://www.fevrierdorian.com/blog/public/billets/sampling/testFiltersMentalray/mentalRayFilterCurve006.png" alt="mentalRayFilterCurve006.png" style="display:block; margin:0 auto;" title="mentalRayFilterCurve006.png, janv. 2010" height="480" width="640" />
Mipmap (de Maya) et le filtre (Pyramidale de la mentalrayTexture) se ressemble beaucoup mais je n'ai pas réussi à trouver un bon rapport pour les faire coïncider... (Si quelqu'un à déjà réussi, je serai ravis qu'il me fasse partager sa trouvaille).</p>
<p>Je pense que nous avons fait le tour du filtre pyramidale de mental ray, passons au suivant! :sourit:</p>
<h5>Le filtre Elliptique (Le Retour!) <a name="le_filtrage_elliptique_le_retour"></a></h5>
<p>Ici nous allons voir "comment que c'est qu'on faisait avant que le bien aimé Autodesk ne nous fasse une checkbox: Elliptical Filtering"... :enerve:</p>
<p>Nous avons vu comment faire "simple-mais-on-comprend-rien" (<a href="https://www.fevrierdorian.com/blog/post/2010/01/30/Les-maps-mental-ray-%28part-2.2%29%3A-Le-debug#filtre_elliptic">Plus haut</a>). Maintenant nous allons voir comment faire "compliqué-et-ptete-que-si-t'est-pas-trop-con-tu-va-capter-un-truc" (Avant de venir spammer ma boite mail que je suis un sale petit branleur médisant, sachez que je n'ai pas réellement compris comment il fonctionnait, donc "ironie inside" :hehe: ).</p>
<p>Voici comment "monter" notre shader:</p>
<p><img src="https://www.fevrierdorian.com/blog/public/billets/sampling/map_debug015.png" alt="map_debug015.png" style="display:block; margin:0 auto;" title="map_debug015.png, janv. 2010" /></p>
<p><img src="https://www.fevrierdorian.com/blog/public/billets/sampling/map_debug014.png" alt="map_debug014.png" style="display:block; margin:0 auto;" title="map_debug014.png, janv. 2010" height="285" width="419" /></p>
<p>Notez le coté indigeste du truc! ^^ (Et aussi les attributs qui étaient caché par Maya et ajoutable via un "addAttr", cf <a href="https://www.fevrierdorian.com/blog/post/2010/01/30/Les-maps-mental-ray-%28part-2.2%29%3A-Le-debug#filtre_elliptic">plus haut</a>).</p>
<p>La doc est ici:</p>
<p><a href="http://download.autodesk.com/us/maya/2010help/mr/manual/node24.html" hreflang="en">http://download.autodesk.com/us/maya/2010help/mr/manual/node24.html</a> << Doc mental ray</p>
<p><a href="http://download.autodesk.com/us/maya/2010help/mr/shaders/node6.html#mi_shader__mib_texture_filter_lookup" hreflang="en">http://download.autodesk.com/us/maya/2010help/mr/shaders/node6.html#mi_shader__mib_texture_filter_lookup</a> << Doc du node Maya</p>
<p>Et maintenant, l'explication. Accrochez vous car:</p>
<ul>
<li>D'une je ne suis pas sûr de moi</li>
<li>De deux c'est assez complexe à imaginer...</li>
</ul>
<p>J'ai donc fais quelques shema pour tenter d'expliquer tout ça:</p>
<p><img src="https://www.fevrierdorian.com/blog/public/billets/sampling/schemaExplicationFilters/shemaProjection01_normal.png" alt="shemaProjection01_normal.png" style="display:block; margin:0 auto;" title="shemaProjection01_normal.png, janv. 2010" height="480" width="640" /></p>
<p>Le framebuffer est une zone mémoire ou sont stocké les couleurs (RVBA) des pixels à la queue leu leu <a href="http://tony-mena.chez-alice.fr/a-la-queue-leu-leu.jpg">tout le monde s'éclaaaaate!...</a>. Ici, nous nous concentrons sur les méthodes utilisés pour déterminer la couleur d'un seul pixel (suivant les filtres utilisés).</p>
<p>Pour vous faire une idée simple, on a un plan avec un material surface shader avec une texture dessus.</p>
<h5>Cas de filter sur Off</h5>
<p><img src="https://www.fevrierdorian.com/blog/public/billets/sampling/schemaExplicationFilters/shemaProjection01_filterOff.png" alt="shemaProjection01_filterOff.png" style="display:block; margin:0 auto;" title="shemaProjection01_filterOff.png, janv. 2010" height="480" width="640" /></p>
<p>En désactivant le filter, ce seront les samples "classiques" qui détermineront la couleur du pixel.</p>
<p>C'est un petit peut plus complexe que ça mais dans l'idée:</p>
<ul>
<li>Le moteur lance des samples depuis la camera dans le pixel.</li>
<li>Ces samples se "cognent" à un pixel d'une texture (texel).</li>
<li>Chaque sample renvoit la couleur de se texel au moteur.</li>
<li>Le moteur fait la moyenne des couleurs des samples en fonction du filtre de rendu des samples utilisés (Pour simplifier l'explication, on prend le cas d'un filtre de rendu de type "box" à 1x1 qui fait, pour chaque pixel, la moyenne de la couleur des samples).</li>
<li>La valeur RVBA de la couleur résultante est placé dans le pixel du framebuffer.</li>
<li>On passe au pixel suivant.</li>
</ul>
<p>Le problème de cette méthode (nous l'avons vue dans le <a href="https://www.fevrierdorian.com/blog/post/2009/12/24/Les-maps-mental-ray-%28part-2.1%29%3A-Le-debug">billet précédent</a>) est qu'elle créé beaucoups d'aliasing et est donc très sensible au mouvement.</p>
<p>Ce n'est pas mon habitude mais je trouve que ce shema est très parlant. Il est tiré du livre "mental ray Handbooks Vol. 1 : Rendering with mental ray" (<a href="http://www.amazon.com/Rendering-mental-ray%C2%AE-Handbooks/dp/3211228756" hreflang="en">lien Amazon</a>):</p>
<p><img src="https://www.fevrierdorian.com/blog/public/billets/sampling/texture_sampling_locationOff.jpg" alt="texture_sampling_locationOff.jpg" style="display:block; margin:0 auto;" title="texture_sampling_locationOff.jpg, janv. 2010" height="600" width="600" /></p>
<p>Nous voyons que les informations récupérées sont indépendantes de la distance (la camera étant supposé être situé en bas du schéma) ce qui fait qu'au moindre mouvement, les informations récupérées sont totalement différentes.</p>
<h5>Cas de filter sur mipmap (Box, Mipmap, Quadratic, Quartic, Gaussian)</h5>
<p><img src="https://www.fevrierdorian.com/blog/public/billets/sampling/schemaExplicationFilters/shemaProjection01_filterMipmap.png" alt="shemaProjection01_filterMipmap.png" style="display:block; margin:0 auto;" title="shemaProjection01_filterMipmap.png, janv. 2010" height="480" width="640" /></p>
<p>Comme expliqué dans le dessin, l'idée est que le moteur va descende dans les niveaux de la mipmap jusqu'à avoir un texel suffisamment grand pour englober toute le pixel. Il suffit donc de récupérer la couleur de se textel.</p>
<p>Voici l'idée (Ici un pixel qui cible un plan texturé):</p>
<p><img src="https://www.fevrierdorian.com/blog/public/billets/sampling/schemaExplicationFilters/projectionMipmap01.png" alt="projectionMipmap01.png" style="display:block; margin:0 auto;" title="projectionMipmap01.png, janv. 2010" height="413" width="386" /></p>
<p style="font-style:italic; text-align:center;">Non</p>
<p><img src="https://www.fevrierdorian.com/blog/public/billets/sampling/schemaExplicationFilters/projectionMipmap02.png" alt="projectionMipmap02.png" style="display:block; margin:0 auto;" title="projectionMipmap02.png, janv. 2010" height="413" width="386" /></p>
<p style="font-style:italic; text-align:center;">Non</p>
<p><img src="https://www.fevrierdorian.com/blog/public/billets/sampling/schemaExplicationFilters/projectionMipmap03.png" alt="projectionMipmap03.png" style="display:block; margin:0 auto;" title="projectionMipmap03.png, janv. 2010" height="413" width="386" /></p>
<p style="font-style:italic; text-align:center;">Non</p>
<p><img src="https://www.fevrierdorian.com/blog/public/billets/sampling/schemaExplicationFilters/projectionMipmap04.png" alt="projectionMipmap04.png" style="display:block; margin:0 auto;" title="projectionMipmap04.png, janv. 2010" height="413" width="386" /></p>
<p style="font-style:italic; text-align:center;">Non</p>
<p><img src="https://www.fevrierdorian.com/blog/public/billets/sampling/schemaExplicationFilters/projectionMipmap05.png" alt="projectionMipmap05.png" style="display:block; margin:0 auto;" title="projectionMipmap05.png, janv. 2010" height="413" width="386" /></p>
<p style="font-style:italic; text-align:center;">Non</p>
<p><img src="https://www.fevrierdorian.com/blog/public/billets/sampling/schemaExplicationFilters/projectionMipmap06.png" alt="projectionMipmap06.png" style="display:block; margin:0 auto;" title="projectionMipmap06.png, janv. 2010" height="413" width="386" /></p>
<p style="font-style:italic; text-align:center;">Ok! :banaeyouhou: </p>
<p>Et le schema de ce qui est récupéré dans le pixel:</p>
<p><img src="https://www.fevrierdorian.com/blog/public/billets/sampling/texture_sampling_locationMipmap.jpg" alt="texture_sampling_locationMipmap.jpg" style="display:block; margin:0 auto;" title="texture_sampling_locationMipmap.jpg, janv. 2010" height="554" width="600" /></p>
<p>Ici, plus les points sont éloignés, plus les zones récupérées pour l'approximation sont grandes.</p>
<h5>Optimisation et explications plus précises <a name="optimisation_et_explications_plus_precises"></a></h5>
<p>Bon, dans les faits c'est très couteux de faire ça. Les gars de mental image, plutot que de calculer à chaque fois si un seul texel rentre dans le pixel, ont décidé de faire "moins complexe" (uniquement en terme de calcul parce que j'ai mis un peu de temps avant de capter ^^).</p>
<p>En gros, l'idée est de calculer un "facteur de compression" qui servira "d'index" pour se déplacer entre les différents niveaux de la mipmap (1=niveau0, 0.5=niveau1, 0.25=niveau2, etc...). Pour calculer ce facteur, voici la méthode (accrochez vous, ça va aller très vite):</p>
<ul>
<li>Le pixel (du framebuffer) projette un rectangle sur la texture (pour alléger l'algo, il projette en fait un carré).</li>
<li>On récupère la taille (en texel) d'un des cotés du carré (qui a été projeté dans l'espace de la texture: UV)</li>
<li>On fait l'inverse de cette valeur (inv(x) = 1/x)</li>
</ul>
<p>Ça y est, nous avons notre facteur de compression :baffed: .</p>
<p>Pour comprendre un peu mieux "le coup de l'inverse", je vais prendre un exemple: Si notre carré projeté avait fait 4 pixels de coté, le facteur de compression aurait été 1/4, autrement dit, il aurait fallu déscendre de 4 niveaux pour récupérer la valeur du pixel.</p>
<p>Imaginez la mipmap comme un building: Tout en haut est la map la plus grande (le niveau0). Et plus on descend plus on avance dans les niveau des maps. Mais dans la mesure ou le facteur de compression est un chiffre à virgule, il se peut qu'il soit entre deux niveaux de la mipmap. Ni précisément sur l'un, ni précisément sur l'autre.</p>
<p>Si c'est le cas, le moteur récupère les deux texels (juste en haut et juste en bas). Ceux ci sont (saucisson haha trop bonne celle là! :hehe:), dans un premier temps, interpolés de manière bilinéaire (pas flouté, ce n'est pas pareille, nous le verrons <a href="https://www.fevrierdorian.com/blog/post/2010/01/30/Les-maps-mental-ray-%28part-2.2%29%3A-Le-debug#le_cas_du_filtrage_bilineaire">plus bas</a>). Les valeurs de couleurs du pixel de chaque niveau respectif sont ensuite interpolés de manière linéaire. (En gros de chez gros, il fait la moyenne. Encore une fois, <a href="http://download.autodesk.com/us/maya/2010help/mr/manual/node23.html">la doc est votre amis</a>).</p>
<p>Malgré le coté indigeste de mes explications <del>foireuses</del> modestes :baffed: , gardez mon exemple précédent à l'esprit: Grosso modo, il va chercher le texel de la taille de mon pixel.</p>
<p>Comme vous pouvez vous en douter, cette méthode à la fâcheuse tendance à "flouter rapidement" (voir <a href="https://www.fevrierdorian.com/blog/post/2010/01/30/Les-maps-mental-ray-%28part-2.2%29%3A-Le-debug#arf_on_voit_la_jonction">plus haut</a>). Imaginez le cas d'un plan quasi-horizontal par rapport à la caméra (comme le schéma mais en plus prononcé). La distance physique (comprenez "dans l'espace 3D"), sur le plan, qu'il peut y avoir entre le bas du pixel et le haut peut être importante et le moteur doit descendre "profondément" dans la mipmap pour avoir un texel qui recouvre tout le pixel. C'est ce qui nous donne des pixels complètement gris dans le cas d'un damier noir et blanc répétitif. On peut cepandant faire varier la taille du filter pour tenter de grappiller un peu (pas trop sinon c'est l'aliasing assuré). Cette technique est surement le meilleur rapport qualité/vitesse.</p>
<p>Il y a un exemple que je trouve très parlant dans <a href="http://download.autodesk.com/us/maya/2010help/mr/manual/node23.html">la doc officiel</a>:</p>
<blockquote><p>If the pixel has a projected size of four texels in texture space, then one texel is compressed to 1/4 in the focal plane.</p></blockquote>
<p>Comprenez: Si un pixel (framebuffer) à une taille projeté (sur le plan) de quatre texels, et bien un texel est "compressé à 1/4" dans ce pixel(et il faudra descendre de 4 niveau dans la mipmap pour obtenir sa couleur).</p>
<h5>Cas de filter elliptique</h5>
<p>Pour le filtre elliptic, je vais devoir passer à un schema 3D:</p>
<p><img src="https://www.fevrierdorian.com/blog/public/billets/sampling/schemaExplicationFilters/shemaProjection01_filterElliptic.png" alt="shemaProjection01_filterElliptic.png" style="display:block; margin:0 auto;" title="shemaProjection01_filterElliptic.png, janv. 2010" height="480" width="640" /></p>
<p>Soyez indulgent, ce n'est pas facile de représenter ça. Ormis le gros cercle blanc dont je vais expliquer la présence, nous avons tout les éléments déja présents dans les schemas 2D:</p>
<ul>
<li>Le framebuffer (en rouge et la plaque transparente)</li>
<li>Le plan et sa texture</li>
<li>Les rayons de projection (en bleu)</li>
</ul>
<p>Une fois encore, n'oubliez pas l'echelle (même si elle n'est pas bien retranscrite sur mon schéma, c'est justment pour ça que je me permet de faire un rappel): On cherche à savoir comment est calculé un pixel. Dans un cas plus "réel", la camera serait beaucoup plus loin, et le plan et sa texture aussi).</p>
<p>Alors, comment ça marche. :sourit:</p>
<p>En fait, un cercle ("ellipse" serait plus aproprié) est projeté dans le pixel du framebuffer:</p>
<p><img src="https://www.fevrierdorian.com/blog/public/billets/sampling/schemaExplicationFilters/shemaProjection02_filterElliptic.png" alt="shemaProjection02_filterElliptic.png" style="display:block; margin:0 auto;" title="shemaProjection02_filterElliptic.png, janv. 2010" height="480" width="640" /></p>
<p>Une fois ce cercle projeté:</p>
<ul>
<li>On mesure son rayon minimum (minor radius) dans "l'espace 3D" (ici, le rayon minimum sera quasiment horizontal).</li>
<li>On compte le nombre de texel que traverse le minor radius</li>
<li>Si celui ci est plus élevé que la valeur de maxminor (Anti-aliasing Level dans <a href="https://www.fevrierdorian.com/blog/post/2010/01/30/Les-maps-mental-ray-%28part-2.2%29%3A-Le-debug#filtre_elliptic">l'UI Maya thinked</a>, 8 par défaut), on "avance" d'un niveau dans la mipmap puis on recommence jusqu'à ce que ce soit le cas.</li>
</ul>
<p>Si vous avez bien compris, vous devriez être en mesure de comprendre pourquoi, ducoup, la coupure est aussi "net" entre les différents niveaux de la mipmap avec le filtre elliptic.
<img src="https://www.fevrierdorian.com/blog/public/billets/sampling/map_debug018.png" alt="map_debug018.png" style="display:block; margin:0 auto;" title="map_debug018.png, janv. 2010" height="480" width="640" />
Vous comprendrez aussi le dernier schema:</p>
<p><img src="https://www.fevrierdorian.com/blog/public/billets/sampling/texture_sampling_locationElliptical.jpg" alt="texture_sampling_locationElliptical.jpg" style="display:block; margin:0 auto;" title="texture_sampling_locationElliptical.jpg, janv. 2010" height="600" width="585" /></p>
<p>Nous avons fini pour l'explication des différents filtres mental ray. (ouf)</p>
<p>N'hésitez pas à laisser un commentaire si vous ne comprennez pas des choses, si je n'ai pas été assez clair quelque part ou si, tout simplement, je me suis planté... :sourit:</p>
<p>A très bientôt pour la dernière partie qui expliquera comment fabriquer la map de debug utilisé durant ses exercices.</p>
<p>Dorian</p>Les 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>