Le linear workflow dans Maya
Par Narann le mercredi, 7 avril 2010, 22:33 - Infographie 3D - Boulot - Lien permanent
Beaucoup de monde parle du linear workflow (Ou "workflow linéaire" pour anglicisme. Ou encore "bosser en linéaire" pour du "pur" français...). Je ne pouvais donc pas ne pas faire un billet là-dessus. Mais aux vues du nombre de fois ou le sujet est traité sur internet, une énième explication serait superflue. Dans ce billet, je vous propose plutôt une sélection de liens intéressants (que je commenterai) qui parlent du sujet. Vous verrez qu'il y a plusieurs méthodes pour bosser en linéaire (en fait, il n'y a qu'une seul méthode mais plein de façons de l'appliquer). Je finirai avec "ma méthode à moi" (qui je pense, est la plus simple). :seSentCon:
Les liens
http://www.mayalounge.com/viewtopic.php?f=26&t=1558
La discussions sur le Linear Workflow sur Mayalounge (Donc 100% français :franceHappy: ). Conversation très intéressante.
http://www.mentalray.fr/index.php?option=com_content&task=view&id=22&Itemid=36
Première partie de l'article est très intéressante. En français aussi.
http://www.xsi-blog.com/archives/133
Commence par une explication du standard sRGB puis une explication mathématique de comment passer du sRGB à un RGB linéaire. Ensuite un exemple en image. Pour finir sur un exemple très parlant de l'application d'un gamma 0.45 à une texture.
http://www.djx.com.au/blog/2008/10/22/mip_gamma_gain-and-mentalrayswatchgen/
Une comparaison entre l'utilisation du node standard "Gamma Correct" de Maya et le node mip_gamma_gain de mental ray.
http://www.pixelcg.com/blog/?p=622
Un petit tuto vidéo très bien fait sur l'utilisation du node mip_gamma_gain. En version HD ici (nécessite un compte)
http://www.gijsdezwart.nl/tutorials.php
Billet assez technique mais avec des schémas très explicites pour savoir "où" placer son gamma 2.2 et/ou 0.45.
http://mymentalray.com/wiki/index.php/Linear_color_space
Une explication par le "maître mental ray" (Mister Zap Anderson) sur le linear workflow et pourquoi, si nous ne travaillons pas en linéaire, "2+2=10". Son explication est ancienne (Aout 2007) et pourra sembler flou maintenant (la 3d, précalculé et temps réel, a fait un bon en avant en à peine deux ans), mais sa réflexion avait déjà beaucoup d'avance. :sourit:
http://www.fxguide.com/qt/1576/linear-workflow-discussion
Un podcast ou Master Zap explique le workflow linéaire, les problèmes qui se posent, etc... Très intéressant (il faut s'accrocher pour bien tout comprendre, c'est de l'américain, c'est technique et ça va vite).
http://www.djx.com.au/blog/2008/09/13/linear-workflow-and-gamma/
L'avis et les méthodes d'un blogueur assez connu sur CGTalk. Je trouve qu'il pose de bonnes questions et aborde pas mal de points (des paramètres de rendu jusqu'au format de fichier).
http://www.creativecrash.com/3dsmax/tutorials/rendering/c/linear-workflow-in-3dsmax-and-vray
http://www.aversis.be/tutorials/vray/essential_gamma_01.htm
Hop hop hop! Deux "tutos-explications" + images mais pour 3DsMax et Vray ce coup ci.
http://kobayashystips.blogspot.com/2009/09/linear-workflow-in-softimage.html
Petites subtilités intéressantes sous XSI.
Et pour finir, une image qui explique assez bien le principe:
Je vous propose aussi quelques liens en vrac...
- http://www.lightwiki.com/SG_CCTools_-_For_Color_Management_and_Linear_Workflows
- http://mysite.verizon.net/spitzak/conversion/index.html
- http://www.lysator.liu.se/~zap/lwf/main.html
- http://www.mayalounge.com/viewtopic.php?f=26&t=1564&start=20
- http://3dlight.blogspot.com/2008/09/linear-workflow-for-maya-mental-ray.html
- http://harrybardak.co.uk/sRGB.htm
Ma méthode
Arrivée ici vous l'aurez compris, en gros, il faut appliquer un gamma gain en entrée (1/2.2 = 0.45) et en sortie (2.2) "de vos yeux"...
Pour résumer, on applique un gamma:
- En entrée (sur les textures, les couleurs entrés manuellement)
- En sortie (sur notre camera)
Le node mip_gamma_gain
Pour faire cette opération, on utilise un node mental ray de la famille des nodes de production (mip): le mip_gamma_gain (cf , page 27). Ce node est un peut chiant embêtant à utiliser dans l'hypershade. En effet, il est considéré par Autodesk comme "internal", sous entendu: Caché, non supporté.
Il n'apparait pas dans l'hypershade par défaut
Pour le réafficher, veuillez suivre la procédure indiquée dans ce billet
car il "détruit" la preview
Comme le lien donné plus haut, on peut changer ça. Il faut aller dans:
C:\Program Files\Autodesk\Maya2009\scripts\others\mentalrayCustomNodeClass.mel
Et ajouter:
if ($nodeType == "mip_gamma_gain" ) return "rendernode/mentalray/material:shader/surface:swatch/mentalRaySwatchGen";
Juste avant le dernier return:
return "";
C'est loin d'être parfait et on ne peut qu'espérer un meilleur support de ces nodes de la part d'Autodesk. Personnellement, dans la pratique, je ne trouve pas ça gênant.
En effet, les shaders mia ne sont pas concernés:
Pas de problème donc pour les mia (Je n'utilise que ça :hihi: ).
A noter que le problème n'est QUE dans la preview l'hypershade. Même si vous utilisez un Lambert avec mip_gamma_gain, le rendu fonctionnera.
Pour les entrées, il faut juste connecter la sortie de notre "entrée" (l'outColor d'un node de file par exemple, ou, dans notre cas, l'outColor de notre ramp) à notre node mip_gamma_gain:
Et de configurer le mip_gamma_gain comme suit:
Soit vous mettez directement 0.45 et vous ne cochez pas "reverse", soit vous mettez 2.2 et vous cochez "reverse"... L'effet est le même: 1/2.2 = 0.454545
A l'identique, si vous voulez utiliser une couleur, il faut faire comme ça:
De cette façon, vous êtes sûr que ce que vous voyez (et qui est "gammaïsé" par votre écran) est bien ce qui est dans la scène.
La dernière étape (maintenant que tout ce qui entre est "dégammaïsé"), est de "regammaïsé" la sortie.
Comme indiqué dans (ben ouai, il faut lire! ^^ ), le node mip_gamma_gain peut être utilisé comme une lens:
Configuré comme suit:
Voila, vous êtes maintenant prêt à "bosser en linéaire".
Testez avec les nodes de mip_gamma_gain et sans. Ici j'ai une areaLight avec un Decay en Quadratic, des ombres et une intensity de 1000.
Sans
Nous voyons que la lumière s'atténue vite. Quand on n'est pas au courant de l'existence du workflow lineaire on pense que c'est parce que "c'est comme ça que ça diminue la lumière dans la vraie vie"... En fait non...
Avec
Ici la lumière s'atténue "vraiment" de manière Quadratic. Votre œil remarquera peut-être aussi que c'est "plus réaliste" que la précédente (ormis le material, qui reflète mais ça c'est moi... :baffed; ). Maintenant vous allez réellement pouvoir utiliser une atténuation Quadratic dans vos scènes et avoir des rendus plus réaliste sans avoir l'impression que: "ça crame et deux mètres plus loin, on voit plus rien..."
Conclusion
Voila! C'était ma méthode, mais on peut bosser en linéaire de différente façon. Un exemple, certains préfèrent ne pas appliquer la lens mip_gamma_gain quand ils font le rendu de leur scène mais uniquement à la fin du compo! Ce qui est tout à fait logique.
En espérant que ma modeste contribution au workflow linéaire (parmi les milliers de billets qui en parle) vous aura aiguillé un peu ou donné des idées.
Bonne continuation et surtout: Bon rendu! :banaeyouhou:
Dorian
EDIT: Je me permet de poster un lien vers un forum ou j'explique deux trois choses:
Commentaires
Dommage que ta methode arrive un peu tard.
L'integration du nouveau Color Managment de maya 2011 automatise tout ce processus.
Il ne sera plus necessaire de modifier le gamma de chaque texture Maya l
Merci qd mm :)
Oui, j'avais vu ça. C'est une très bonne chose! (Quand on voit la misère que c'est).
Je vais m'y pencher dès que j'aurai un peu de temps. Ce Maya 2011 à l'air plus qu'intéressant. :)
Nzo, le color Managment de 2011 c'est de la merde a partir du moment ou il ne prend pas en considération le colour swatches. Du coup, ça sert à rien et c'est fais a moitié, comme d'hab.
Je rajoute ensuite qu'il faut que tu rendes tes images en 32bits float (ou 16) avec effectivement sans ton lens a la fin de ton rendu.
Ceci n'est pas une méthode, mais ceci EST la méthode obligatoire.
Car ensuite tu ouvres tes imagines linearisés dans Nuke (ou autre). Comme tes pass (qui ne prennent pas le lens d'origine) qui seront aussi linéarisés.
Pour Vray, tu as juste a coché Linear workflow dans les render globals, ensuite tu mets ton gamma a 2.2, et avant ton rendu final, tu coches : don't affect color. Ceci permet de faire un calcul "linear" sans appliquer le gamma 2.2 sur ton fichier (vu que tu l'ouvrieras en linear dans ta compo).
Je rajoute que tu ne dois pas tout gammaté. Le diplace bump ou autre ne doivent pas etre gammaté.
Ainsi que les reflections color, refraction color, etc etc.
http://forums.cgsociety.org/showthr...
Bon, encore un échec pour Autodesk coté Color management alors... Après les passes: Les couleurs (je ris tout seul!).
Merci pour les informations. Je n'ai pas encore eu l'occasion de faire beaucoup de compos en linéaire. Et la seule fois ou je l'ai fait, j'ai sortie mes rendus gammatés en 2.2 en 32bit float que j'ai dégammaté (1/2.2) en entré de mon compo, fait ma tambouille puis regammaté en 2.2.
Je n'avais pas remarqué de problèmes (sur mes passes, mes effets toussa) et, je pense, que ça revient au même. Mais oui, c'est plus "logique" de bosser en linéaire jusqu'au bout...
Pour les textures de displaces/bump/value map, je n'ai pas abordé le sujet tellement ça semblait évident mais oui! En effet, il ne faut pas gammater les values maps, ça n'a aucun sens! :)
Alors, en revanche, concernant les reflections/refraction color, je comprend ce qu'explique djx, mais je pense que son interpretation est à nuancé. Je m'explique:
Pour la reflection/refraction du mia, il y deux type de valeur, la couleur, et la valeur (0 à 1). Et il fonctionne sous le même principe que, par exemple, la diffuse, ç savoir: couleur*weight. La valeur (weight, reflectivity, transparency) est un mutiplicateur de la couleur (Color) donnée.
Il suffit de tester:
Pour la diffuse: (Color en niveau de gris 0.5 et Weight à 1) = (Color en niveau de gris 1 et Weight à 0.5)
Pour la reflection: (Color en blanc 1 et Reflectivity à 0.5) = (Color en blanc 0.5 et Reflectivity à 1)
Pour la reflaction: (Color en blanc 1 et Transparency à 0.5) = (Color en blanc 0.5 et Transparency à 1)
(Ça marche tant que qu'une des valeur est l'inverse de l'autre)
Partant de là, on peut considérer que Weight, Reflectivity, Transparency (et surment d'autres), sont bien des multiplicateurs le leur Color respective.
Donc, si la logique qui consiste à dire que: Si une map de reflect color (parce qu'elle contient "aussi" du niveau de gris, et donc, de la valeur de reflection) ne doit pas être gammaté, alors la map Color de la Diffuse (map "classique") ne doit pas être gammaté non plus, car elle contient des valeur de son Weight dedans...
Je sais pas si je m'exprime bien (c'est pas un sujet simple non plus ^^). Je ne dis pas qu'il à tord (car la question existe réellement et c'est vraiment interessant qu'il la pose), mais je ne dis pas non plus qu'il à raison (sa solution n'est pas 100% bonne non plus car au final, on ne gammate pas la couleur de notre spécu, choisi sur nos écrans gammaté, ce qui revient à avoir une mauvaise colorimétrie sur les couleurs de nos spécus).
The ultimate solution (celon moi), serai de VRAIMENT diviser la valeur de la couleur, (le Weight, Reflectivity, Transparency, etc...) de la Color elle même...
En gros, on aurait:
- Une map de Color "parfaite", qui, si elle est désaturé au max, devient un niveau de gris ou chaque pixel à une valeur RGB de 0.5 (gamme moyenne parfaite donc). Elle n'aurai donc aucune incidence sur "la visibilité". C'est cette map qu'on dégammate.
- Une map de valeur (Weight, Reflectivity, Transparency, etc...) en niveau de gris (0 à 1), qui elle, n'est pas dégammaté.
Je pense que c'est ça... :)
Car d'un point de vu fonctionnement, que ce soit Diffuse, Reflection, Refraction, c'est le même principe: Color + Multiplicateur.
Enfaite pour les reflections, ça reflecte quoi ? Le diffuse de l'object qu'il y a autour.
Hors, si l'objet autour est déjà gammaté, on va pas remettre un gamma sur la reflection color car ça fera un double degammatage.
Après je pense comme ça, ça se trouve ce que je dis est faux. Mais d'après moi c'est comme ça.