Dorian Fevrier's blog - Mot-clé - nvidiaJe 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:695d9c73474c33ce3dab043823509c4bDotclearMy impressions about mental ray's futur (English Translation)urn:md5:993e273f90a68ceeaf2188d0c0e4ede32011-07-17T21:50:00+02:002013-07-26T18:07:31+02:00NarannInfographie 3D - Boulotenmental raynvidiavray<p><img src="https://www.fevrierdorian.com/blog/public/divers/mental_ray_its_over_tn.png" alt="mental_ray_its_over_tn.png" style="float:left; margin: 0 1em 1em 0;" title="mental_ray_its_over_tn.png, juil. 2011" height="150" width="150" />
I use mental ray since 2004 and it quickly become my favorite render engine. I attended, as a lot of you, to his slow decline over years... I have opportunity to work with Vray for a vfx feature film. The pipeline is around Vray and uses many new features highly "prod oriented" that make our lives easier.</p>
<p>It was my first experience with this engine and I must unfortunately admit it made me realize that mental ray can never back up the hill... :neutral:</p>
<p>I propose you my little impression on all of that in this post.</p> <h3>Some illusions...</h3>
<p>At first, I was pretty confident about mental ray's futur. Each new version add somme little cool features and the enemy to be defeated was that Autodesk which was unable to make a correct integration of this engine in they softwares. You had to tinker to use the latest features but you could get by. (<a href="http://forum.mentalimages.com/showthread.php?7835-Why-not!#post_32500" hreflang="en">Read</a>, the very informative history of the integration of mental ray in Maya by one of its devs).</p>
<p>I saw many active <a href="http://forums.cgsociety.org/showthread.php?t=639480" hreflang="en">threads</a> about some "heads" leaving the project or the futur of mental ray following the purchase of Nvidia.</p>
<p>Nvidia had Gelato and, peoples making the project quitting it, found themselves without any GPU rendering solution under hand, hence the acquisition of mental image to retrieve devs of mental ray and make them work with CUDA.</p>
<p><img src="https://www.fevrierdorian.com/blog/public/logos/Nvidia_Cuda_logo.jpg" alt="Nvidia_Cuda_logo.jpg" style="display:block; margin:0 auto;" title="Nvidia_Cuda_logo.jpg, août 2010" height="303" width="500" /></p>
<p>At first, everyone thought, eyes full of stars, that mental ray went "CUDA accelerated" but just think for two seconds to realize that the problem was actually more complicated... :tuComprendRien:</p>
<p>Paolo Berto (<a href="http://forums.cgsociety.org/member.php?u=124550" hreflang="en">jupiterjazz</a>), an influent member <a href="http://www.jupiter-jazz.com/group" hreflang="en">working</a> for the jupiter jazz group (<del>a</del> THE group of vfx dev), and obviously well informed <a href="http://forums.cgsociety.org/showpost.php?p=5203466&postcount=14" hreflang="en">wrote</a> this:</p>
<blockquote><p>No, mental ray won't be ever ported on cuda, there is no intention and it simply can't. Only some parts could, and if so it will be done just for marketing reasons.</p></blockquote>
<p>A member ask him about that and <a href="http://forums.cgsociety.org/showpost.php?p=5204780&postcount=18" hreflang="en">he give</a> a little more details:</p>
<blockquote><p>So, to make things work on cuda you need to have a lot of *coherent* computations to perform: the problem of mental ray is that it is casting one ray then calling a native C shader to shade the intersection then maybe the shader casts another batch of rays and so on. Very non coherent.<br />
This is just not suited for gpu computation unless if a massive rewrite/refactoring of the pipeline is done by mental images, which will not happen soon enough (I am speaking about years).<br />
Some specific task like fast AO could be definitely done though (and also this won't happen soon).<br />
<br />
Also another problem of mental ray is that the codebase is 15 years old (and it's not a Whiskey), native C for the CPU, full of pointers mem alloc and other shit, so to use an euphemism is a fcking mess.</p></blockquote>
<p>It is quite clear:</p>
<ul>
<li>Not GPU thinked.</li>
<li>Too old.</li>
<li>"Stop dreaming!"</li>
</ul>
<p>Everyone wondered what Nvidia was going to do of a full CPU render engine that did not seem to be able to change...</p>
<p>All indulged in some speculations but until then, there was nothing let guessing what would happen.</p>
<p>My doubts really began in 2009 at the Nvidia's <a href="http://www.youtube.com/watch?v=TQsXualxLVs" hreflang="en">GPU Technology Conference</a>. I saw one of the single "old dev" of mental ray and I learned that he had worked "several years" on the thing we all expected (irony): iRay and Reality Server.</p>
<p>Maybe I was the only one but I immediately thought that putting the last "heads" (there is not many) on a project full CUDA that will be used to sell entire plants which are more for "Arch and Viz" than anim/vfx did not bode well for mental ray.</p>
<h3>...to desillusions</h3>
<p><img src="https://www.fevrierdorian.com/blog/public/logos/mental_image_logo.png" alt="mental_image_logo.png" style="display:block; margin:0 auto;" title="mental_image_logo.png, juil. 2011" height="40" width="175" /></p>
<p>And that's what happened. Nvidia announced, <a href="http://blogs.nvidia.com/2011/05/nvidia-integrates-workstation-software-efforts/" hreflang="en">very politely</a> it <del>dismantled</del> reorganized mental image to, I quote :</p>
<blockquote><p>integrating it into our other activities focused on software solutions for design professionals</p></blockquote>
<p>It follows:</p>
<blockquote><p>The combined group brings together mental images with related efforts in the Quadro group focused on the world’s most demanding design professionals, from feature film artists to architects and product designers.</p></blockquote>
<p>Basically, they bring closer mental picture from "Quadro Group" to "focus" on the needs of film artists... :septic:</p>
<p>Mhum... Personally, the more you avoid Quadros, CUDA and other proprietary technologies which are a misery to deploy and very expensive, the more I am satisfied ...</p>
<p>So for this time, it's completely missed... I think many big CAD companies invest in there. But a VFX studio? Seriously?</p>
<p>Nvidia left mental image alone for a while (about four years during which I kept hope), to let them keep their commitments (this is often what happens for big acquisitions) but now they resume the reindeer and <a href="https://twitter.com/#!/virtualritz/status/72603197121896448" hreflang="en">it hurts</a>:</p>
<blockquote><p>Mental images is gone. Rumor has it ~30 people were laid off, management was dispersed. The corporate bullshit version: <a href="http://blogs.nvidia.com/2011/05/nvidia-integrates-workstation-software-efforts/" title="http://blogs.nvidia.com/2011/05/nvidia-integrates-workstation-software-efforts/">http://blogs.nvidia.com/2011/05/nvi...</a></p></blockquote>
<p>As we are in the rumor, it seems that the mental ray team has not been dismantled (although there were some voluntary departures). But insofar Nvidia is a very opaque compagnie you can't have more informations.</p>
<p>That said, I would be in bad faith if I said that <a href="http://www.mentalimages.com/products/mental-ray/mental-ray-39.html" hreflang="en">the latest mental ray features list</a> was empty, far from it!</p>
<p>Mental ray is a very good render engine (I suspect to be faster than Vray in pure raytracing...) but the big studios do not make prods on a "good engine" but rather "an engine they considers to be the best". What mental ray is no longer.</p>
<p>If you have some times, <a href="http://forum.mentalimages.com/showthread.php?7402-Iray-For-OpenCl" hreflang="en">read this four messages's short thread</a>... It summarizes perfectly in what mental image is sinking.</p>
<p>In short, a person asks a simple argued question to iray's devs about OpenCL (it will include reference to Chaos Group). No dev will respond (it's pretty rare, they often take the time to answer, even briefly to such issues) but a person, who appears to be more a Nvidia's commercial than a dev answer a marketing pitch promoting CUDA face OpenCL:</p>
<blockquote><p>iray uses C for CUDA because it needs the highest performance and greatest capabilities available to it.</p>
<p>
While NVIDIA leads the industry in the broadest OpenCL support, the language is several years behind C in both capabilities and tools, and it advances at the speed of open standards. A CPU fallback is unnecessary for iray as it supports x86 directly - far more efficiently than a fallback could. In using C for CUDA, iray ensures you have the very latest GPU capabilities as soon as they come online, while having direct influence on its evolution.</p>
<p>
With C for CUDA, there are over 1/2billion NVIDIA GPUs that can increase iray performance. I believe you would find the %increase from AMD to be quite small as their OpenCL support is limited to their latest offerings.</p>
<p>
As for CPUs, iray runs as well on AMD as Intel, taking full advantage of multiple cores and sockets.</p>
<p>
- Phil
NVIDIA</p></blockquote>
<p>I think, for a support forum, it's stain. Especially as the defenders of CUDA on <a href="http://www.chaosgroup.com/forums/vbulletin/showthread.php?53415-Cuda-4.0&p=451532#post451532" hreflang="en">the Chaos Group forum</a> debit the same kind of nonsense to finally take a big setback from Vlado, senior member of the Chaos Group forum:</p>
<blockquote><p>- (Membre): I had a feeling CUDA is gonna kick OpenCL in the ass and it is ! I hope that OpenCL will be able to share memory too at some point... <br />
- (vlado): We do have a CUDA version of V-Ray RT that we use internally, so if we see that there are significant benefits of going this way, it is certainly something that we would do without too much hesitation.<br />
- (Membre): Wow... Release it ploxxxxxxxxx, isn't it a lot more responsive(refresh speed) then opencl btw?<br />
- (vlado): No, not really. In some of the last tests, OpenCL was a tad bit faster.</p></blockquote>
<p>So here we are: For Chaos Group, released a CUDA version of V-Ray RT is useless because it is less efficient...</p>
<p>And while we're talking about that: The arrival of Vray for Maya could had be done without too much noise... It was expected by many but not necessarily the VFX industrie at that time. Chaos Group seems to have understood that the needs of Maya users are not quite the same as 3dsMax users where Vray was considered as the rendering engine "for archviz"...</p>
<p>Who would have thought, with the release of Vray for Maya that he would serve Digital Domain to make Tron Legacy's shots:</p>
<iframe src="http://player.vimeo.com/video/20014133?title=0&byline=0&portrait=0" width="590" height="332" frameborder="0"></iframe>
<p>Indeed, this version is very "prod oriented". They did not try to "copy" their render engines from 3dsMax to Maya. They didn't try to uniform it, they adapted it. And very cleverly adapted...</p>
<h3>Conclusion</h3>
<p>In short, the purpose of this post was not to praise Vray but to explain why I can't believe in mental ray anymore...</p>
<p>The fact it's still an excellent render engine and it's integrated to Maya and 3ds Max leaves him a bright future and he will not go away at once. But I think the studios will turn away slowly, as though faithful for years, I began to do so.</p>Mes impressions sur mental ray et son futururn:md5:16a24118616e0aaefa3347ce07f05fa62011-07-17T20:50:00+02:002013-07-26T18:09:07+02:00NarannInfographie 3D - Boulotfrmental raynvidiarenduvray<p><img src="https://www.fevrierdorian.com/blog/public/divers/mental_ray_its_over_tn.png" alt="mental_ray_its_over_tn.png" style="float:left; margin: 0 1em 1em 0;" title="mental_ray_its_over_tn.png, juil. 2011" height="150" width="150" />J'utilise mental ray depuis 2004 et il est rapidement devenu mon moteur de prédilection. J'ai assisté, comme pas mal d'entre vous, à son lent déclin au fil des années... J'ai l'occasion de bosser sous Vray pour les vfx d'un long métrage. Le pipeline tourne autour de Vray et utilise un certain nombre des nouvelles features très orientées prod qui nous facilitent pas mal la vie.</p>
<p>C'était ma première expérience sur ce moteur et je dois malheureusement admettre qu'elle m'a fait prendre conscience que mental ray ne pourra jamais remonter la pente... :neutral:</p>
<p>Je vous propose ma petite impression sur tout ça dans ce billet.</p> <h3>Des illusions...</h3>
<p>Au début, j’étais plutôt confiant quand à l'avenir de mental ray. Chaque nouvelle version intégrait des petites features intéressantes et l'ennemi à abattre était Autodesk qui était incapable de faire une intégration correcte de ce moteur dans ses softs. Il fallait souvent bricoler pour pouvoir utiliser les dernières nouveautés mais on pouvait s'en sortir. (<a href="http://forum.mentalimages.com/showthread.php?7835-Why-not!#post_32500" hreflang="en">A lire</a>, l'histoire, très instructive, de l'intégration de mental ray dans Maya par un de ses devs).</p>
<p>Je voyais pas mal de <a href="http://forums.cgsociety.org/showthread.php?t=639480" hreflang="en">threads</a> animés sur CGTalk concernant le départ de telle ou telle "tête" du projet ou l'avenir de mental ray suite au rachat de Nvidia.</p>
<p>Nvidia avait Gelato et, les différentes personnes s'occupant du projet l'ayant quitté, se retrouvaient sans aucune solution de rendu GPU sous la main, d’où le rachat de mental image pour récupérer des membres du développement de mental ray et les faire travailler sur CUDA. :bete:</p>
<p><img src="https://www.fevrierdorian.com/blog/public/logos/Nvidia_Cuda_logo.jpg" alt="Nvidia_Cuda_logo.jpg" style="display:block; margin:0 auto;" title="Nvidia_Cuda_logo.jpg, août 2010" height="303" width="500" /></p>
<p>Au début, tout le monde à pensé, les yeux pleins d'étoiles, que mental ray allé être "CUDA accelerated" mais il suffit de réfléchir deux secondes pour bien se rendre compte que le problème était en fait plus compliqué... :tuComprendRien:</p>
<p>Paolo Berto (<a href="http://forums.cgsociety.org/member.php?u=124550" hreflang="en">jupiterjazz</a>), un membre influent de CGTalk <a href="http://www.jupiter-jazz.com/group" hreflang="en">travaillant</a> notamment pour le groupe jupiter jazz (<del>un</del> LE collectif de développeurs vfx), et visiblement bien informé <a href="http://forums.cgsociety.org/showpost.php?p=5203466&postcount=14" hreflang="en">écrivait</a> ceci:</p>
<blockquote><p>No, mental ray won't be ever ported on cuda, there is no intention and it simply can't. Only some parts could, and if so it will be done just for marketing reasons.</p></blockquote>
<p>Un membre le relance et <a href="http://forums.cgsociety.org/showpost.php?p=5204780&postcount=18" hreflang="en">il rentre</a> un peu plus dans les détails:</p>
<blockquote><p>So, to make things work on cuda you need to have a lot of *coherent* computations to perform: the problem of mental ray is that it is casting one ray then calling a native C shader to shade the intersection then maybe the shader casts another batch of rays and so on. Very non coherent.<br />
This is just not suited for gpu computation unless if a massive rewrite/refactoring of the pipeline is done by mental images, which will not happen soon enough (I am speaking about years).<br />
Some specific task like fast AO could be definitely done though (and also this won't happen soon).<br />
<br />
Also another problem of mental ray is that the codebase is 15 years old (and it's not a Whiskey), native C for the CPU, full of pointers mem alloc and other shit, so to use an euphemism is a fcking mess.</p></blockquote>
<p>C'est assez clair:</p>
<ul>
<li>Pas pensé GPU.</li>
<li>Trop vieux.</li>
<li>"Arrêtez de rêver!"</li>
</ul>
<p>Tout me monde se demandait ce qu'Nvidia allait bien pouvoir foutre d'un moteur full CPU qui n'avait pas l'air de pouvoir en changer...</p>
<p>Tous se laissait aller à ces spéculations mais jusque là, rien ne permettait de deviner ce qui allait ce passer.</p>
<p>Mes doutes ont réellement commencé durant l'année 2009, lors de la <a href="http://www.youtube.com/watch?v=TQsXualxLVs" hreflang="en">GPU Technology Conference</a> de Nvidia. J'y vis l'un des seul et unique "ancien membre" de mental ray et j'y ai appris qu'il avait travaillé depuis "quelques années" sur le truc que nous attendions tous: iRay et son Reality Server. (super... :septic: )</p>
<p>Et bien j'étais peut être le seul, mais j'ai tout de suite pensé que mettre les dernières têtes sur un projet full CUDA qui servira à vendre des installations entières qui sont plus destiné à de "l'Arch and Viz" qu'à de l'anim/fx n'augurait rien de bon pour mental ray. :gne:</p>
<h3>...aux désillusions</h3>
<p><img src="https://www.fevrierdorian.com/blog/public/logos/mental_image_logo.png" alt="mental_image_logo.png" style="display:block; margin:0 auto;" title="mental_image_logo.png, juil. 2011" height="40" width="175" /></p>
<p>Et c'est ce qui arriva. Nvidia annonça, <a href="http://blogs.nvidia.com/2011/05/nvidia-integrates-workstation-software-efforts/" hreflang="en">très poliment</a>, qu'il <del>démantelait</del> réorganisait mental image pour, je cite:</p>
<blockquote><p>integrating it into our other activities focused on software solutions for design professionals</p></blockquote>
<p>S'en suit:</p>
<blockquote><p>The combined group brings together mental images with related efforts in the Quadro group focused on the world’s most demanding design professionals, from feature film artists to architects and product designers.</p></blockquote>
<p>En gros, ils rapprochent mental image du "Quadro Group" pour se "focuser" sur les besoins des film artists... :septic:</p>
<p>Mouai mouai... Personnellement, plus on se tient éloigné des Quadro, CUDA et autres techno proprios qui sont une misère à déployer et coutent très cher, plus je suis satisfait...</p>
<p>Donc pour le coup, c'est complètement raté... Je vois bien des grosses entreprises de CAD investir là dedans. Mais un studio de VFX? Sérieusement?</p>
<p>Nvidia à laissé mental image tranquille pendant quelques temps (quatre années environ durant lesquelles j'ai gardé espoir :pasClasse: ), sûrement pour les laisser tenir leurs engagements (c'est souvent ce qui arrive lors de grosses acquisitions) mais là ils reprennent les rennes et <a href="https://twitter.com/#!/virtualritz/status/72603197121896448" hreflang="en">ça fait mal</a>:</p>
<blockquote><p>Mental images is gone. Rumor has it ~30 people were laid off, management was dispersed. The corporate bullshit version: <a href="http://blogs.nvidia.com/2011/05/nvidia-integrates-workstation-software-efforts/" title="http://blogs.nvidia.com/2011/05/nvidia-integrates-workstation-software-efforts/">http://blogs.nvidia.com/2011/05/nvi...</a></p></blockquote>
<p>Tant qu'on est dans la rumeur, il semble que l'équipe de mental ray n'ait pas été démantelé (mais qu'il y a eu quelques départs volontaires).</p>
<p>Après, je serais de mauvaise foi si je disais que la <a href="http://www.mentalimages.com/products/mental-ray/mental-ray-39.html" hreflang="en">dernière liste</a> des features de mental ray était vide, loin de là!</p>
<p>Mental ray est un très bon moteur (je le soupçonne d’être plus rapide que Vray en raytracing pur..) mais les gros studios ne font pas des prods sur un "très bon moteur" mais plutôt "le moteur qu'il estime être le meilleur". Et mental ray n'en fait clairement <del>pas</del> plus parti. :lanceUnePierre:</p>
<p>Si vous avez un peu de temps, <a href="http://forum.mentalimages.com/showthread.php?7402-Iray-For-OpenCl" hreflang="en">lisez ce court thread</a> de quatre messages... Il résume parfaitement le n'importe quoi dans lequel est en trains de sombrer mental image. :grenadelauncher:</p>
<p>Pour résumer, une personne pose une question simple et argumentée aux devs de iray concernant OpenCL (il fera notamment référence à Chaos Group). Pas un seul dev ne répondra (c'est assez rare, ils prennent souvent la peine de répondre, même brièvement à ce genre de questions) mais une personne qui semble être plus un commercial de Nvidia qu'un dev répondra un baratin marketing faisant la promotion de CUDA face à OpenCL:</p>
<blockquote><p>iray uses C for CUDA because it needs the highest performance and greatest capabilities available to it.</p>
<p>
While NVIDIA leads the industry in the broadest OpenCL support, the language is several years behind C in both capabilities and tools, and it advances at the speed of open standards. A CPU fallback is unnecessary for iray as it supports x86 directly - far more efficiently than a fallback could. In using C for CUDA, iray ensures you have the very latest GPU capabilities as soon as they come online, while having direct influence on its evolution.</p>
<p>
With C for CUDA, there are over 1/2billion NVIDIA GPUs that can increase iray performance. I believe you would find the %increase from AMD to be quite small as their OpenCL support is limited to their latest offerings.</p>
<p>
As for CPUs, iray runs as well on AMD as Intel, taking full advantage of multiple cores and sockets.</p>
<p>
- Phil
NVIDIA</p></blockquote>
<p>Je trouve que pour un forum de support, ça fait tache. D'autant que des défenseurs de CUDA sur le <a href="http://www.chaosgroup.com/forums/vbulletin/showthread.php?53415-Cuda-4.0&p=451532#post451532" hreflang="en">forum de Chaos Group</a> (inscription nécessaire) débitaient le même genre d’âneries pour finalement se prendre un gros revers de la part de vlado, membre principal sur le forum de Chaos Group (merci <a href="http://deex.info/wordpress2/" hreflang="en">Deex</a> pour l'info):</p>
<blockquote><p>- (Membre): I had a feeling CUDA is gonna kick OpenCL in the ass and it is ! I hope that OpenCL will be able to share memory too at some point... <br />
- (vlado): We do have a CUDA version of V-Ray RT that we use internally, so if we see that there are significant benefits of going this way, it is certainly something that we would do without too much hesitation.<br />
- (Membre): Wow... Release it ploxxxxxxxxx, isn't it a lot more responsive(refresh speed) then opencl btw?<br />
- (vlado): No, not really. In some of the last tests, OpenCL was a tad bit faster.</p></blockquote>
<p>Donc voilà, d'après Chaos Group, sortir une version CUDA de V-Ray RT n'est pas utile car il est moins performant... :pasClasse:</p>
<p>Et puisqu'on en parle: L'arrivée de Vray sous Maya aurait pu se faire sans trop de bruit... Elle était attendu par beaucoup mais on ne parlait pas nécessairement de faire du VFX à ce moment là. Chaos Group semble cependant avoir bien compris que les besoins des utilisateurs de Maya ne sont pas tout à fait les mêmes que les utilisateurs de 3dsMax ou Vray était considéré comme le moteur de rendu "pour l'archi"...</p>
<p>Qui aurait pu penser, lors de la sortie de Vray for Maya qu'il servirait Digital Domain pour sortir les plans de Tron Legacy:</p>
<iframe src="http://player.vimeo.com/video/20014133?title=0&byline=0&portrait=0" width="590" height="332" frameborder="0"></iframe>
<p>En effet, cette version est très orienté prod. Ils n'ont pas essayé de "copier" leur moteur depuis 3dsMax dans Maya. Ils l'ont adapté. Et adapté très intelligemment...</p>
<h3>Conclusion</h3>
<p>Bref, le but de ce billet n'était pas de faire l'éloge de Vray mais d'expliquer pourquoi je ne crois plus à mental ray...</p>
<p>Le fait qu'il reste un excellent moteur et qu'il soit intégré à Maya et 3dsMax lui laisse de beaux jours devant lui et il ne va pas disparaître d'un coup. Mais je pense que les studios vont s'en détourner petit à petit, comme, bien que fidèle depuis des années, j'ai commencé à le faire. :pasClasse:</p>
<p>Dorian</p>CgFX - Faire du Bump mapping avec les cartes ATI Radeonurn:md5:dcaf023be0f78f0df4fde259d4537b7c2010-04-25T19:32:00+02:002013-07-26T22:30:44+02:00NarannCrashs et bugs3daticgfxfrmayanvidiaradeon<p><img src="https://www.fevrierdorian.com/blog/public/billets/cgfx_intro/CG_atiMayalogo150.png" alt="CG_atiMayalogo150.png" style="float:left; margin: 0 1em 1em 0;" title="CG_atiMayalogo150.png, mai 2010" height="150" width="150" />Ceux qui, comme moi, veulent faire du bump mapping en CgFX, dans Maya, avec une carte ATI Radeon (on doit bien être une dizaine dans toute la France à vouloir faire un truc pareil!) se sont peut être cassés les dents sur <a href="http://developer.download.nvidia.com/shaderlibrary/webpages/cgfx_shaders.html" hreflang="en">les exemples de Nvidia</a>. En effet, quelques règles doivent être respectées pour pouvoir faire tourner ses shaders sur toutes les cartes. Le support du langage CgFX étant plus évolué pour les cartes Nvidia. Normal, c'est eux qui ont inventés ce langage.</p>
<p>Mais c'est possible! :sourit:</p> <p>D'après <a href="http://forums.cgsociety.org/showthread.php?t=310564" hreflang="en">un utilisateur de CGTalk</a> (confirmé par <a href="http://en.wikipedia.org/wiki/Cg_%28programming_language%29http://en.wikipedia.org/wiki/Cg_%28programming_language%29" hreflang="en">wikipedia</a>), Cg à été développé par Nvidia conjointement à HLSL (Langage de <a href="http://fr.wikipedia.org/wiki/Shader" hreflang="fr">shader</a> de DirectX) de Microsoft. Les deux langages se ressemblent. Cg à été proposé à l'époque en temps que langage de shader OpenGL. Le groupe "OpenGL ARB" (qui est le groupe noyaux du standard OpenGL) a refusé, lui préférant GLSL proposé par ATI/3DLabs (Je sais qu'il y a des raisons techniques à ça mais je ne les connais pas). Toujours est-il que Nvidia s'est retrouvé avec un langage sur les bras dont personne ne semblait vouloir (Microsoft utilisant HLSL et l'OpenGL ARB ayant décidé d'utiliser GLSL) mais qui était doté de très bonnes choses. Nvidia décida d'attaquer un secteur à prendre et fit de Cg, un meta-langage de shader. En gros, l'idée c'est d'écrire un shader en Cg et de le "compiler", via des <a href="http://developer.nvidia.com/object/cg_profiles.html" hreflang="en">profiles de compilation</a>, dans un autre langage (cf mon futur tuto sur l'écriture de shaders en CgFX).</p>
<p><img src="https://www.fevrierdorian.com/blog/public/billets/cgfx_intro/cgfw_bug_0001.png" alt="cgfw_bug_0001.png" style="float:left; margin: 0 1em 1em 0;" title="cgfw_bug_0001.png, mai 2010" height="217" width="180" />Toujours d'après cet utilisateur (et c'est plus ou moins ce que j'ai entendu un peu partout sur le net): Les shader codé en Cg compilé en GLSL devrait théoriquement fonctionner sur n'importe quelle carte qui supporte GLSL. En pratique, ce n'est pas le cas. Le compilateur Cg fonctionne mieux sur les cartes Nvidia. En effet, certaines commandes et/ou variables ne sont pas supportées. C'est le cas de "TANGENT" et "BINORMAL" qui ne sont tout simplement pas compris par les cartes ATI (Quand on utilise les profiles arbvp1 et arbfp1, seul profiles de compilation compris par Maya).</p>
<center>:longBar:</center>
<h5>Le problème</h5>
<ul>
<li>Seuls les profiles de compilation arbvp1 et arbfp1 fonctionnent sous Maya. Ce sont les premiers et les plus anciens profiles de compilation.</li>
<li>Les TANGENT datas et BINORMAL datas ne sont pas supportées par les profiles de compilation arbvp1 et arbfp1 (ou bien par les cartes ATI). C'est particulièrement embêtant car nous avons besoin de stocker les tangents et binormals pour pouvoir faire du bum mapping. Il semble que Nvidia triche. En effet, si vous avez une carte du constructeur, les TANGENT datas et BINORMAL datas fonctionnent, même si les profiles de compilation sont arbvp1 et arbfp1.</li>
</ul>
<center>:longBar:</center>
<h5>La solution</h5>
<p>Donc, pour pouvoir faire fonctionner la plupart des <a href="http://developer.download.nvidia.com/shaderlibrary/webpages/cgfx_shaders.html" hreflang="en">shaders d'exemples</a>, il suffit:</p>
<ul>
<li>De stocker les tangentes et les binormals dans des TEXCOORD datas au lieu des TANGENT datas et BINORMAL datas.</li>
<li>De changer les profiles de compilation (vp40 par arbvp1 et fp40 par arbfp1).</li>
</ul>
<center>:longBar:</center>
<h5>Exemple concret</h5>
<p>Allons reprendre le shader "blinn bump reflect" de <a href="http://developer.download.nvidia.com/shaderlibrary/webpages/cgfx_shaders.html" hreflang="en">la librairie d'exemples Nvidia</a>.</p>
<p><img src="https://www.fevrierdorian.com/blog/public/billets/cgfx_intro/cgfx_intro_012.png" alt="cgfx_intro_012.png" style="display:block; margin:0 auto;" title="cgfx_intro_012.png, avr. 2010" height="469" width="227" /></p>
<center><a href="http://developer.download.nvidia.com/shaderlibrary/packages/blinn_bump_reflect.cgfx.zip">Liens direct vers le CgFX</a></center>
<p>Et modifiez les lignes:</p>
<pre class="c c"><span style="color: #993333;">struct</span> appdata <span style="color: #009900;">{</span>
...
<span style="color: #202020;">float4</span> Tangent <span style="color: #339933;">:</span> TANGENT0<span style="color: #339933;">;</span>
float4 Binormal <span style="color: #339933;">:</span> BINORMAL0<span style="color: #339933;">;</span>
<span style="color: #009900;">}</span><span style="color: #339933;">;</span></pre>
<p>Par:</p>
<pre class="c c"><span style="color: #993333;">struct</span> appdata <span style="color: #009900;">{</span>
...
<span style="color: #202020;">float4</span> Tangent <span style="color: #339933;">:</span> TEXCOORD1<span style="color: #339933;">;</span>
float4 Binormal <span style="color: #339933;">:</span> TEXCOORD2<span style="color: #339933;">;</span>
<span style="color: #009900;">}</span><span style="color: #339933;">;</span></pre>
<p>Ensuite, modifier le profile de compilation du vertex program (à la fin):</p>
<pre class="c c">VertexProgram <span style="color: #339933;">=</span> compile vp40 std_dp_VS<span style="color: #009900;">(</span>...</pre>
<p>Par:</p>
<pre class="c c">VertexProgram <span style="color: #339933;">=</span> compile arbvp1 std_dp_VS<span style="color: #009900;">(</span>...</pre>
<p>Et pour finir, nous modifions le profile de compilation du fragment program:</p>
<pre class="c c">FragmentProgram <span style="color: #339933;">=</span> compile fp40 blinn_PS<span style="color: #009900;">(</span>...</pre>
<p>Par:</p>
<pre class="c c">FragmentProgram <span style="color: #339933;">=</span> compile arbfp1 blinn_PS<span style="color: #009900;">(</span>...</pre>
<p>Lancez Maya, chargez votre CgFX shader, relinkez les images, créez une pointLight et entrez son nom dans le shader et paf :sourit: :</p>
<p><img src="https://www.fevrierdorian.com/blog/public/billets/cgfx_intro/cgfx_maya_ati_radeon.png" alt="cgfx_maya_ati_radeon.png" style="display:block; margin:0 auto;" title="cgfx_maya_ati_radeon.png, mai 2010" height="403" width="616" /></p>
<center>Ça marche! :laClasse:</center>
<p>Ayé! Vous avez du bump! Bougez votre lumière, vous verrez!</p>
<p>Vous remarquerez que la couche rouge de la normal map doit être inversée pour que le bump soit correct. Ça se fait facilement (Mais ça, nous en parlerons dans <a href="https://www.fevrierdorian.com/blog/post/2010/08/28/CgFX-Des-shaders-temps-r%C3%A9el-dans-le-viewport-Maya%21-Part-5">la dernière partie</a> de <a href="https://www.fevrierdorian.com/blog/post/2010/04/26/CgFX-Des-shaders-temps-reel-dans-le-viewport-Maya-part-1">mon tuto</a> sur les shaders CgXF).</p>
<center>:longBar:</center>
<h5>Conclusion</h5>
<p>J'espère que ce petit billet aidera les utilisateurs de Maya possesseurs de carte ATI qui ne comprennent pas pourquoi les Cg shaders ne fonctionnent pas sur leurs machines (c'est assez décourageant, surtout que c'est vraiment sympa de programmer ses shaders).</p>
<p>N'hésitez pas à laisser un commentaire si vous avez des questions.</p>
<p>A bientôt!</p>
<center>:marioCours:</center>
<center>:longBar:</center>
<h5>Liens</h5>
<p>Comme d'habitude, je vous donne quelques liens qui m'ont aidé à faire ce billet.</p>
<p><a href="http://www.blacksmith-studios.dk/projects/downloads/bumpmapping_using_cg.php" title="http://www.blacksmith-studios.dk/projects/downloads/bumpmapping_using_cg.php">http://www.blacksmith-studios.dk/pr...</a></p>
<p><a href="http://joshbeam.com/articles/cg_pixel_shaders_in_opengl/" title="http://joshbeam.com/articles/cg_pixel_shaders_in_opengl/">http://joshbeam.com/articles/cg_pix...</a></p>
<p><a href="http://www.ofusiontechnologies.com/tutorial5_part1.html" title="http://www.ofusiontechnologies.com/tutorial5_part1.html">http://www.ofusiontechnologies.com/...</a></p>Crash et Freeze avec Maya 2009urn:md5:72cd9b8a8d8825ece7f45e563e602e7c2009-11-22T21:58:00+01:002013-07-26T22:39:20+02:00NarannCrashs et bugsamdaticrashfrfreezegeforceitmayaMAYA_NO_PARALLEL_DRAWnvidiaquadro<p><img src="https://www.fevrierdorian.com/blog/public/billets/mayaFreeze/maya_freeze.png" alt="maya_freeze.png" style="float:left; margin: 0 1em 1em 0;" title="maya_freeze.png, nov. 2009" height="150" width="150" />En voila un problème qui énerve tout le monde (surtout les animateurs en fait ^^ ). Sous Maya 2009 persiste un bug avec les cartes NVIDIA (Enfin, elles semble plus concerné que les autres car je n'ai pas trouvé de post d'utilisateurs parlant de ce problème avec une carte AMD/ATI).</p>
<p>Dans certains cas très particuliers (lorsque vous bougez la timeline, que vous faite du skining, que vous utilisez des shaders CGFX), Maya freeze. Un processeur bosse à fond et la mémoire ne bouge plus d'un iota.</p>
<p>Dans ce cas, inutile d'attendre, ça ne changera rien, vous avez perdu votre travail et êtes bon pour "killer" votre Maya en pestant contre les ITs et vos abominables conditions de travail... :nervous:</p> <p>Pour commencer, sachez que ce problème n'apparait que sous Maya 2009 (peut être avant aussi je ne sais pas) et qu'il semble avoir été résolu le SP1, voir <a href="http://usa.autodesk.com/adsk/servlet/ps/dl/item?siteID=123112&id=13379167&linkID=9242258&CMP=OTC-RSSSUP01" title="en">ici</a>.</p>
<p>Il peut être difficile de changer de version en cours de production. Cependant, il existe une autre façon de solver le problème: L'utilisation de la variable d'environnement: MAYA_NO_PARALLEL_DRAW.</p>
<p>Le premier réflexe <del>qu'on a</del> que j'ai eu a été de mettre la ligne suivante dans le Maya.env de la production actuelle (qui est sensé faire la même chose que les variables d'environnement Windows sauf qu'il les charge au démarrage de Maya):</p>
<pre class="bash bash">MAYA_NO_PARALLEL_DRAW = <span style="color: #000000;">1</span></pre>
<p>Mais cela ne fonctionne pas.</p>
<p>En effet, il faut mettre la variable d'environnement dans Windows:</p>
<p><img src="https://www.fevrierdorian.com/blog/public/billets/mayaFreeze/maya_freeze001.png" alt="maya_freeze001.png" style="display:block; margin:0 auto;" title="maya_freeze001.png, nov. 2009" height="233" width="347" /></p>
<p><img src="https://www.fevrierdorian.com/blog/public/billets/mayaFreeze/maya_freeze002.png" alt="maya_freeze002.png" style="display:block; margin:0 auto;" title="maya_freeze002.png, nov. 2009" height="81" width="164" /></p>
<p><img src="https://www.fevrierdorian.com/blog/public/billets/mayaFreeze/maya_freeze003.png" alt="maya_freeze003.png" style="display:block; margin:0 auto;" title="maya_freeze003.png, nov. 2009" height="77" width="194" /></p>
<p><img src="https://www.fevrierdorian.com/blog/public/billets/mayaFreeze/maya_freeze004.png" alt="maya_freeze004.png" style="display:block; margin:0 auto;" title="maya_freeze004.png, nov. 2009" height="98" width="173" /></p>
<p><img src="https://www.fevrierdorian.com/blog/public/billets/mayaFreeze/maya_freeze005.png" alt="maya_freeze005.png" style="display:block; margin:0 auto;" title="maya_freeze005.png, nov. 2009" height="154" width="371" /></p>
<p>Si au prochain démarrage de Maya vous avez:</p>
<p><img src="https://www.fevrierdorian.com/blog/public/billets/mayaFreeze/maya_freeze006.png" alt="maya_freeze006.png" style="display:block; margin:0 auto;" title="maya_freeze006.png, nov. 2009" height="72" width="284" /></p>
<p>C'est que vous avez réussi :laClasse:</p>
<p>Normalement Maya ne devrait plus freezer. :sauteJoie:</p>
<p>Bon courage!</p>
<p>Comme d'habitude, voici en vrac, les liens qui m'ont aiguillé:</p>
<p><a href="http://forums.cgsociety.org/showthread.php?t=735272" title="http://forums.cgsociety.org/showthread.php?t=735272">http://forums.cgsociety.org/showthr...</a></p>
<p><a href="http://forums.cgsociety.org/showthread.php?t=766873" title="http://forums.cgsociety.org/showthread.php?t=766873">http://forums.cgsociety.org/showthr...</a></p>
<p><a href="http://chrisevans3d.com/pub_blog/?p=399" title="http://chrisevans3d.com/pub_blog/?p=399">http://chrisevans3d.com/pub_blog/?p...</a></p>
<p><a href="http://thnkr.com/wiki/index.php?title=CGFX_Shader_crashes_Maya" title="http://thnkr.com/wiki/index.php?title=CGFX_Shader_crashes_Maya">http://thnkr.com/wiki/index.php?tit...</a></p>
<p><a href="http://usa.autodesk.com/adsk/servlet/ps/dl/item?siteID=123112&id=13379167&linkID=9242258&CMP=OTC-RSSSUP01" title="http://usa.autodesk.com/adsk/servlet/ps/dl/item?siteID=123112&id=13379167&linkID=9242258&CMP=OTC-RSSSUP01">http://usa.autodesk.com/adsk/servle...</a></p>
<p><a href="http://images.autodesk.com/adsk/files/autodesk_maya_2009_sp1_release_notes.pdf" title="http://images.autodesk.com/adsk/files/autodesk_maya_2009_sp1_release_notes.pdf">http://images.autodesk.com/adsk/fil...</a></p>
<center>:grenadelauncher:</center>
Astuce Rapide - Résoudre le bug d'affichage Maya sur les Geforces 9600 GTurn:md5:3be728bf1c9bc1656fa063b3699cc2112009-10-14T21:01:00+02:002013-07-26T22:39:45+02:00NarannCrashs et bugs3ddriverfrgeforcehardwaremayanvidiaviewport<p><img src="https://www.fevrierdorian.com/blog/public/billets/bug_affichage_gf9600gt/Nvidia_GeForce_logo_01.png" alt="Nvidia_GeForce_logo_01.png" style="float:left; margin: 0 1em 1em 0;" title="Nvidia_GeForce_logo_01.png, oct. 2009" height="150" width="150" /> Chaque série de carte graphique de la gamme "gamer", quel que soit le constructeur, à ses petits problèmes avec les softs professionnels tel que Maya. Et pour cause, les drivers ne sont ni testé, ni adapté aux spécificités de nos logiciels préférés. Il n'est donc pas rare de voir des plantages, bugs d'affichage et/ou autres soucis qui peuvent nous faire méchamment grincer des dents (Je pense au jeune graphiste qui lâche ses maigres économies en s'achetant une machine tout neuve pour faire de la 3D et n'arrive pas à bouger un viewport...) :nervous: . Au travail nous avons un petit poste d'appoint qui me sert surtout à scripter. Cela dit, il m'arrive d'ouvrir des scènes Maya avec et de me retrouver face à ces problèmes. Je pense avoir trouver la solution et quand je vois à quel point ça peut être rageant, je vous propose un "quick-post" qui, je l'espère vous aidera. ;)</p> <p>Personnellement, j'aime bien recommencer avec les options par défaut:</p>
<p><img src="https://www.fevrierdorian.com/blog/public/billets/bug_affichage_gf9600gt/bug_affichage_gf9600gt001.png" alt="bug_affichage_gf9600gt001.png" style="display:block; margin:0 auto;" title="bug_affichage_gf9600gt001.png, oct. 2009" height="494" width="626" /></p>
<p>On valide:</p>
<p><img src="https://www.fevrierdorian.com/blog/public/billets/bug_affichage_gf9600gt/bug_affichage_gf9600gt002.png" alt="bug_affichage_gf9600gt002.png" style="display:block; margin:0 auto;" title="bug_affichage_gf9600gt002.png, oct. 2009" height="227" width="381" /></p>
<p>Maintenant on passe l'Optimisation threadée en Désactivé.</p>
<p><img src="https://www.fevrierdorian.com/blog/public/billets/bug_affichage_gf9600gt/bug_affichage_gf9600gt003.png" alt="bug_affichage_gf9600gt003.png" style="display:block; margin:0 auto;" title="bug_affichage_gf9600gt003.png, oct. 2009" height="128" width="555" /></p>
<p>On oublie pas de valider:</p>
<p><img src="https://www.fevrierdorian.com/blog/public/billets/bug_affichage_gf9600gt/bug_affichage_gf9600gt004.png" alt="bug_affichage_gf9600gt004.png" style="display:block; margin:0 auto;" title="bug_affichage_gf9600gt004.png, oct. 2009" height="154" width="345" /></p>
<p>Et votre viewport ne devrait plus scintiller-bugger-freezer quand vous le bouger! :sauteJoie:</p>
<p>C'est vraiment "rapide" comme billet mais ça peut dépanner.</p>
<p>Bon courage!</p>
<p>Dorian</p>Un max de textures dans le viewport Maya: La Solution!urn:md5:54865e3606837979c0c49f6830aa609b2009-01-18T18:24:00+01:002013-07-26T22:43:40+02:00NarannInfographie 3D - Boulot3dcompressionddsDirectDraw Surfacefrmapmayanconvertnvdxtnvidiaphotoshops3texturexnview<p><a href="http://img262.imageshack.us/img262/9154/2281134222bd559a34e61dw7.jpg"><img src="http://img262.imageshack.us/img262/9154/2281134222bd559a34e61dw7.th.jpg" alt="" style="float:left; margin: 0 1em 1em 0;" /></a>Il arrive sur certains projets que les animateurs ou le réalisateur veuillent voir les textures dans le viewport Maya. Le réflexe est d'appuyer sur la touche "6" du pavé numérique pour les afficher. Ce genre de manipulation est souvent imprévisible dans la mesure oû les textures peuvent être de très grandes tailles (ce qui prend du temps à mettre dans la ram, sans garantie de succès) et faire minablement planter Maya. Ne reste alors qu'une seule alternative:</p>
<ul>
<li>Pleurer</li>
</ul> <p>Nan je déconne! :D Il existe une solution alternative et intéressante : les textures <a href="http://en.wikipedia.org/wiki/DirectDraw_Surface">DirectDraw Surface</a> (ou DDS). Sans rentrer dans les détails, je vous explique déjà comment Maya fait quand on lui donne, par exemple, un BMP (on rit pas, je prends un cas simple).</p>
<h5>Forcément, si tu prends un BMP, c'est lourd!</h5>
<p>Héhé... Sachez que, que ce soit un JPG, un TGA, un BMP, Maya ouvre la texture, la décompresse, la lit et place tous les pixels dans la mémoire de la carte graphique pour l'afficher. C'est énorme et très lourd à supporter pour la-dite carte qui dans un logiciel de 3D fonctionne très différemment que dans un jeux vidéo où le calcul des tailles des textures est millimétré. L'astuce que je vous propose consiste à utiliser un format de fichier texture que la carte graphique connait... le format DDS !</p>
<h5>Dintendo DS!</h5>
<p>Le format DDS, c'est quoi ? Pour faire simple disons que c'est un peu le JPG de la carte graphique. C'est la société <a href="http://en.wikipedia.org/wiki/S3_Graphics">S3 Graphics</a> qui a développé les premières cartes supportant la compression-décompression des textures en hardware (la <a href="http://en.wikipedia.org/wiki/Savage_3D">Savage 3D</a>). Cette technologie fut ensuite implémentée dans Directx (6.0) et se propagea très rapidement (les possibilités offertes pour l'époque étaient révolutionnaire pour le jeux vidéo). La compression est destructive (on s'en fout pour un viewport vous me direz), mais l'image est stockée compressée dans la mémoire et décompressée "à la volée". Il y a plusieurs façons de créer une image dds à partir d'un autre format. La plus simple (mais vous allez voir qu'on est limité par cette simplicité) étant selon moi d'utiliser <a href="http://pierre.g.pagesperso-orange.fr/xnview/frxnview.html">XnView</a> : On ouvre, "Outils/Convertir" puis DDS (Il ne génère cependant pas les <a href="http://fr.wikipedia.org/wiki/MIP_mapping">mipmap</a>). J'ajouterai une dernière chose, c'est que ce que XnView fait, <a href="http://pierre.g.pagesperso-orange.fr/xnview/fr_nconvert.html">nconvert</a> le fait aussi :D . Il est donc possible de convertir ses images en ligne de commande (pratique en production).</p>
<p>Voici la ligne de commande BAT:</p>
<pre>
nconvert.exe -out dds -o "monFichier.dds" "monFichier.bmp"
</pre>
<p>Simpliste non? Et bien en fait pas tout à fait ! Il faut savoir une chose quand on fait ce genre de manipulation, c'est que les images doivent avoir des tailles puissance de 2 (512x512, 1024x256 est possible aussi). En jeux vidéo, cette contrainte est primordiale et est donc prise en compte dès le début du projet. En précal', les softs gérant assez bien ce genre de problèmes, on se fout un peu de savoir si les textures sont carrées et (ou) puissance de quoi que ce soit. Il faut donc être rigoureux là-dessus. Si vous ne le faîtes pas, Nconvert va prendre automatiquement la première puissance de 2 (128, 256, 512 etc...) supérieure à la résolution de l'image et remplir le reste de noir. Ce qui rend la position de l'image par rapport à ses uvs faussée. La technique consiste donc à déformer l'image (ça peut sembler paradoxal mais quand on y réfléchit et qu'on teste un peu, c'est logique) en la resizant manuellement dans la taille du "bloc multiple" le plus proche. Personnellement et dans un souci de simplifier le tout, je mets toutes les images en 1024 par 1024 qui est un bon compromis (Cela dit, si vous avez le luxe de pouvoir resizer les maps au cas par cas ne vous gênez pas (C'est vrai que c'est dommage de resizer une map 1310x100 en 1024x1024, c'est vous qui voyez, faut pas se brosser non plus, c'est de la préviz). Voila donc une ligne de BAT possible:</p>
<pre>
nconvert.exe -rflag orient -resize 1024 1024 -rtype lanczos -out dds -o "monFichier.dds" "monFichier.bmp"
</pre>
<p><a href="https://www.fevrierdorian.com/blog/public/billet_dds/image01.jpg"><img src="https://www.fevrierdorian.com/blog/public/billet_dds/.image01_m.jpg" alt="image01.jpg" style="display:block; margin:0 auto;" title="image01.jpg, janv. 2009" height="448" width="448" /></a>
Bon, vous connaissez maintenant les grandes lignes de la manipulation.</p>
<h5>Pas d'alpha, pas de chocolat</h5>
<p>Si vous avez testé avec une image contenant un canal alpha, vous aurez peut-être remarqué que Maya l'interprète différemment (dans mon cas, l'alpha de mon image est censé être son inverse).
<a href="https://www.fevrierdorian.com/blog/public/billet_dds/image02.jpg"><img src="https://www.fevrierdorian.com/blog/public/billet_dds/.image02_m.jpg" alt="image02.jpg" style="display:block; margin:0 auto;" title="image02.jpg, janv. 2009" height="295" width="448" /></a>
L'alpha semble être interprété sur les bords. Je ne sais pas si le problème vient de Maya ou XnView mais il est bien présent. Il y a cependant plusieurs façons de le contourner.</p>
<h5>Nvidia Pawa</h5>
<p><a href="https://www.fevrierdorian.com/blog/public/logos/nvidia_logo_1_.jpg"><img src="https://www.fevrierdorian.com/blog/public/logos/.nvidia_logo_1__s.jpg" alt="logo nvidia" style="float:left; margin: 0 1em 1em 0;" title="logo nvidia, janv. 2009" height="186" width="240" /></a>
Heureusement qu'ils sont là ceux là. En effet, <a href="http://fr.wikipedia.org/wiki/Nvidia">Nvidia</a> propose pas mal d'outils destinés aux développeurs. Ceux qui nous intéressent sont les <a href="http://developer.nvidia.com/object/nv_texture_tools.html">textures tools</a> et plus précisément les <a href="http://developer.nvidia.com/object/dds_utilities_legacy.html">DDS Utilities</a>. Téléchargez les, installez les et allez récupérer le fichier "nvDXT.exe" qui est un convertisseur en ligne de commande (il est placé dans le dossier d'installation). Ce programme à bon nombre d'options que je ne vous expliquerai pas ici (je me contente de laisser les paramètres par défaut), je préfère rester concis (vous pouvez toutefois, si le cœur vous en dit, lire le PDF inclut).</p>
<p>Grosso modo, la ligne de commande est la même que pour nconvert:</p>
<pre>
nvdxt.exe -file maMap.tga -output maMap.dds
</pre>
<p><a href="https://www.fevrierdorian.com/blog/public/billet_dds/image03.jpg"><img src="https://www.fevrierdorian.com/blog/public/billet_dds/.image03_m.jpg" alt="image03.jpg" style="display:block; margin:0 auto;" title="image03.jpg, janv. 2009" height="448" width="448" /></a></p>
<p>Sympa n'est-ce pas? ;)</p>
<p>Je viens aussi (en direct live!) de me rendre compte que les images ayant des tailles qui ne sont pas des puissances de 2 passent très bien ! (Un petit warning mais la conversion se fait)</p>
<p><img src="https://www.fevrierdorian.com/blog/public/billet_dds/image04.gif" alt="image04.gif" style="display:block; margin:0 auto;" title="image04.gif, janv. 2009" height="69" width="352" />
<a href="https://www.fevrierdorian.com/blog/public/billet_dds/image05.jpg"><img src="https://www.fevrierdorian.com/blog/public/billet_dds/.image05_m.jpg" alt="image05.jpg" style="display:block; margin:0 auto;" title="image05.jpg, janv. 2009" height="338" width="448" /></a></p>
<p>Bon, je suis pas sûr que ce soit très propre tout ça, je vous donne aussi la commande qui resize l'image en 1024 par 1024:</p>
<pre>
nvdxt.exe -prescale 1024 1024 -RescaleKaiser -file maMap.tga -output maMap.dds
</pre>
<p>Encore une fois, pour une explication des options, lisez le PDF. J'ai aussi l'impression que l'option -prescale ne fonctionne pas sur des images de grandes tailles (8192 par 8192 par exemple).</p>
<h5>Houai, mais n'empêche que ça pue tes lignes de commande toutes noires!</h5>
<p>Ne vous inquiétez pas! Nvidia a pensé aux <del>attardés</del> personnes n'étant pas à l'aise avec les applications en ligne de commande (Je rigolais hein? Je me sers beaucoup de l'outil qui va suivre car il est plus pratique pour visualiser ce qui se passe dans l'image). Ainsi, ils ont sorti un <a href="http://developer.nvidia.com/object/photoshop_dds_plugins.html">plug-ins Photoshop</a> qui permet également de créer des normal maps à partir de maps de bump (en niveau de gris).</p>
<p><a href="http://developer.nvidia.com/object/photoshop_dds_plugins.html"><img src="http://developer.nvidia.com/docs/IO/20926/TextureCompression.jpg" alt="" style="display:block; margin:0 auto;" /></a></p>
<p>Une fois de plus, je ne vais pas m'étaler (l'objectif étant de sortir des dds, pas de tout vous expliquer, la documentation Nvidia est d'ailleurs très bien faite et je vous invite à la lire si le sujet vous intéresse).</p>
<p>J'espère que ce billet vous aura servi ou vous servira à l'avenir. N'hésitez pas à tester chez vous et à laisser un commentaire si vous avez rencontré des problèmes, si vous pensez que je suis trop vague dans mes explications ou que vous avez la conviction que j'ai écris une énormité.</p>
<p>Pour ceux qui ont déjà utilisé les dds en production, je serai également intéressé de connaitre les limites de ce format ou les contraintes qu'il peut générer.</p>
<p>A bientôt!</p>
<p>Dorian</p>
<h5>MAJ 2011 - 09 - 11 <a name="maj_20110911"></a></h5>
<p>Bon, ça fait un moment que ce billet est écrit mais je fait une MAJ car j'ai pas mal potassé le sujet depuis et j'ai fait deux vidéos.</p>
<p>La première (septembre 2010) présente Maya affichant 4 maps dds de 8k. Mais pour être honnête, je soupçonne que ce n'était la bonne solution car c'est Maya qui envoi les maps dans le GPU:</p>
<iframe width="580" height="356" src="http://www.youtube.com/embed/aVghteicCGM?hd=1" frameborder="0" allowfullscreen></iframe>
<p>Après <a href="http://area.autodesk.com/forum/autodesk-maya/autodesk-maya-2012/cgfx-and-dds-textures-in-gpu-memory/">m'être acharné</a> à trouver de l'aide sur Area, j'ai finalement obtenu une réponse.</p>
<p>Mais il fallait que je test pour être sur. C'est donc chose faite: Pour profiter correctement du format dds, il faut utiliser un shader cgfx. Dans l'exemple qui suite, Maya peut afficher, sans broncher, 9 maps dds de 8k.</p>
<iframe src="http://player.vimeo.com/video/28788662" width="579" height="315" frameborder="0" webkitAllowFullScreen allowFullScreen></iframe>
<p>Et encore, là j’utilisai une compression DXT5 (qui prends le double de place que la DXT1). Donc à priori (il faut que je retest), je dois pouvoir afficher 18 maps dds de 8k dans le viewport Maya :baffed: .</p>
<p>La grande classe! :laClasse:</p>