Du métal plus métalique?
Par Narann le dimanche, 18 mars 2012, 22:15 - Infographie 3D - Boulot - Lien permanent
Hello tous!
Comme j'en bouffe tous les jours en ce moment j'ai décidé vous faire partager le très intéressant billet de Master Zap: Making Better Metal with mia_material.
Ceux qui l'ont déjà lu en long en large, passez votre chemin, je ne fait que répéter les dires du maitre.
Les autres, avec un peu de chance, vous allez apprendre quelque chose aujourd'hui. :hehe:
Un bon metal, c'est d'abord une bonne map HDR
Avant de commencer, aller récupérer une des magnifiques image HDR de sIBL Archive.
Elles sont toutes sous licence Creative Commons Attribution-Noncommercial-Share Alike 3.0, ce qui veut dire que vous ne pouvez pas gagner d'argent avec et que si vous les utilisez (comme ça va être le cas ici) il faut citer l'auteur et partager votre travail à l'identique.
Pour le choix de l'image. J'ai toujours eu une préférence pour Factory Catwalk:
Et go Maya!
Comme d'hab', ouvrez Maya, mental ray, preset Production:
Filter en Triangle:
Puis on créé une IBL:
Et on y met notre hdr:
Créez une sphère et appliquez lui un mia_material_x:
Virez le highlight (je le fait car je ne peux pas plus le supporter personnellement):
Pour avoir une colorimétrie correct, on applique une correction gamma:
createNode mip_gamma_gain; setAttr "mip_gamma_gain1.gamma" 2.2; connectAttr -f mip_gamma_gain1.message perspShape.miLensShader;
Et voila:
Bon, pour faire du métal, a priori, on met la color en blanc et le weight a zéro, la reflectivity a 1.0 et on coche la case Metal Material:
Comme on est des graphistes :smileFou: on met aussi de la couleur:
Le centre de la sphère semble sombre ça ne ressemble pas vraiment à du métal. :reflechi:
Si vous connaissez un peu le mia_material, vous savez qu'il existe un paramètre dans l'onglet BRDF pour donner les deux valeurs extrêmes de reflection quand la surface est face à la camera et quand celle ci est complètement perpendiculaire (0/90 Degree Reflection). Avec un autre paramètre qui définit la courbe pour passer d'une valeur à l'autre.
Pour faire du metal à priori, il suffit de monter la première valeur (0 Degree Reflection) à une valeur proche de 1.0:
Bon, et bien en fait, vous n'y êtes pas complètement. :sourit:
Là vous avez fait un bête miroir jaune... Dans le fond c'est assez proche du résultat final. Mais un des grand challenge du "Physical Based" c'est bien que ce n'est plus simplement une question d'oeil. :redface:
Et pour avoir un comportement de métal plus réaliste, il va falloir regarder du coté de Fresnel (si si).
Donc vous cochez la case:
Maintenant, ce que vous allez faire, c'est mettre l'index de refraction (oui oui, reFRACtion) a 25:
La différence est assez subtile (comparez avec le Keep image de Maya) mais le second se rapprochera beaucoup plus d'un métal physiquement correct, notamment sur les bords.
En fait, pour le métal, la courbe qui définit la valeur de reflection en fonction de l'angle de la surface par rapport à la camera est très particulière (voir sur le billet de Zap). Quand elle se rapproche de 90 dégrées, elle descend pour remonter en flèche.
Quand à la théorie. Je doit avouez ne pas maitriser la chose (Master Zap non plus d’ailleurs):
Metals are indeed not refractive, and are indeed not dielectrics (meaning, electrical insulators). They are Conductors, and for some baroque reason these are also considered to have an "Index of Refraction".
Comme je suis du genre curieux, j'ai fait un peu de recherche (d'un niveau bien trop élevé pour moi) et j'en ai conclu que (Attention, grand moment de mathématique a trois francs six sous :dentcasse: ):
- L'index de réfraction est le "ralentissement" de la lumière quand il entre dans un "milieu" (un material).
- Cet index dépend de plusieurs paramètres dont la perméabilité diélectrique (material conducteur, ou pas). En effet, la lumière est une onde électromagnétique (Maxwell is watching you) donc (et c'est ça qui est fou!) la conduction d'un material joue un rôle dans la "déformation" de la lumière qui le traverse.
- Les coefficients de Fresnel intervenant à l'intersection de deux milieux ayant des indices de réfraction différent (toi tu rentre déformé comme ci, toi tu rebondie déformé comme ça) explique la relation qu'il y a entre l'index de réfraction et la reflection d'un material. En gros, lors d'une "transition" entre deux milieux ayant des index de réfraction différent, il y a une reflection qui se forme.
Perso, ça donne envie d’être physicien. J'imagine la révolution que ça a dut être dans la physique optique ça. D’ailleurs, si un physicien passe dans le coin et que je me suis complètement planté, qu'il se fasse un plaisir de m'insulter violemment dans les commentaires, je suis tout ouïe à une explication clair du phénomène. :seSentCon:
Bref:
Fresnel + index de refraction sur un material 100% opaque = variation de la reflection.
Liens
Parce que je serai ravis de savoir si vous avez mieux compris que moi. :baffed:
- Équations de Maxwell
- Indice de réfraction
- Permittivité diélectrique
- Perméabilité magnétique
- Coefficients de Fresnel
Je vous invite aussi a regarder ce PDF pour Maxwell Render (auteur: Roch).
Sur ce pdf, on voit que la reflection varie en fonction d'un curieux paramètre nomme Nd (Quand il passe a 10, on voit très clairement une reflection). Et d’après Wikipedia, Nd correspond a l'index de réfraction d'un medium dont la longueur d'onde est de 589.592 nanomètre (La raie de Fraunhofer D du spectre solaire. Le sodium... Et oui, ça renvoi loin et je vois pas pourquoi cette valeur la en particulier...).
En espérant vous avoir apporté quelque chose...
A bientôt!
MAJ 20 Mars 2012
Suite au commentaire de Tristan, j'ai demandé sur le forum de mental image d’où sortait ces index de refraction bizarre (25, 40, 50 etc...). rlevenne explique clairement qu'il s'agit d'un hack pour imiter la courbe de reflection du métal mais que les valeurs ne représentait rien mathématiquement parlant. Apparemment, le mia_material utilise l'approximation de Schlick pour calculer la BRDF. Cette approximation est rapide mais ne gère pas les index de réfraction complexes. Pour faire un métal physiquement correct, il faut une autre information: L’Extinction (la valeur k sur cette page). C'est un paramètre que Maxwell expose. Bref, si vous êtes intéressé, lisez le post. :sourit:
Commentaires
Poor google translate struggles with stuff like "Oaaah De l'or qui briiiiille!" but fortunately I also have Olivier translate!
I don't understand the super high IOR values Zap mentions. Follow me through this short journey of discovery.
First of all, something which Zap doesn't mention is that IOR is dependent on the wavelength. If we go here http://en.wikipedia.org/wiki/Red we can see that red wavelength is ~0.7µm. So follow me now to http://refractiveindex.info/?group=... and we put in 0.7µm and get the IOR value for gold 0.16111. Very different from 25! Green wavelength IOR for gold is 0.48 and blue is 1.3.
I don't understand more than this, but I know that these values work in the shaders I use to produce something which looks correct. Maybe it just comes down to different shaders systems interpreting values in a different way, but it would be interesting to know exactly the situation. What do these values do in mental ray?
Hi Tristan,
This is a really good question! I've asked on the mental image forum Hope they will answer soon! :)
EDIT: Tristan, just go to links I gave in the last paragraph. The answer is there! :D
Thanks for following up! That is interesting to know, mystery solved! I tried to reply yesterday on the mental ray forum but I am stuck waiting for a moderator to approve my post (I guess because it's my first one there).
Did you read this thread, posted by Kzin?
http://www.xsibase.com/forum/index....
More related interesting info.
Something else which I have been reading about and testing since your initial post (I mentioned it briefly in my first reply) is taking in to account that IOR is wavelength dependent. I did a test with gold, and when doing it this more correct way the result is more saturated yellow color when facing camera and less saturated on grazing angles. I'm not sure how you could replicate this in MR though!
I've read the Kzin post but it seems to use the same hack for his shaders:
"-> specify IOR: 3 or smaller for things like plastic, 10+ for things like metal"
What "algorythm" (or approximation) did you use during your gold tests to handle the K factor?
Was using the proprietary pyhsical shader stuff here at work, which accept the K value, and also colors for IOR and K. I didn't really understand why before, but thanks to all this now i do!
Merci pour le billet très intéressant. Je rajoutes juste, que seuls les métaux peuvent avoir une réflection colorée. cf ce célèbre billet très intéressant sur la lumière : http://forums.cgsociety.org/showthr... (post #3)
Et comme un autre site le dit mieux que moi : "Le cas des métaux colorés comme l'or ou le cuivre est légèrement différent. Les grandes longueurs d'ondes du visible sont bien absorbées et réémises en totalité par les électrons, comme on l'a vu précédemment, cependant, les courtes longueurs d'onde ne sont pas réémises comme les autres couleurs. Ces métaux ont alors des couleurs chaudes (jaune ou rougeâtre comme l'or et le cuivre).
Lorsqu'on regarde une très fine feuille d'or par transparence, on peut voir que les faibles longueurs d'onde qui n'ont pas été réfléchies ont traversé le métal, ainsi, la lumière transmise est dans le bleu et la feuille d'or apparaît bleu-vert."
Ca vient de là : http://culturesciencesphysique.ens-...
Waouw! Super commentaire! Merci beaucoup pour ces précieuses informations!
Le liens sur la couleur est excellent! Je vais m'empresser de lire ça!
Merci beaucoup! :)
Je vais essayer d'apporter ma pierre a l’édifice:
La valeur ND de maxwell correspondrait selon cette page de l'aide (1) tout simplement a l"indice de réfraction du matériau. la notation nd ayant été choisie pour indiquer de c'est l'indice de réfraction a la longueur d'onde 589.3 nm (selon ce doc). En effet les indices de réfractions d'un matériau varie en fonction de la longueur d'onde de la lumière (ce qui nous permet de voir de beaux arcs en ciel ou des raies d’interférence quand de l'essence flotte sur l'eau).
L'utilisation de cette longueur d'onde est donc juste une convention...
Au risque de faire un hors sujet j'ajouterais bien une erreur que j'ai plusieurs fois vu en 3D avec les indices de réfraction: quand vous faites un verre d'eau il y a 3 changements de milieux différents: air-verre, air-eau et verre-eau. La meilleure solution est alors de faire 3 objets, un pour le verre (mais sans la partie en contact avec l'eau), un pour la surface de l'eau, et enfin un pour la surface faisant l'interface verre-eau.
1) http://support.nextlimit.com/displa...
Merci beaucoup pour le lien, il est très intéressant. :)
En effet, Nd semble être la norme:
Pour le verre d'eau, j'avais en effet lu ça dans la doc MR:
http://docs.autodesk.com/MENTALRAY/...
Ça semble logique mais je n'ai jamais teste:
http://www.3dtotal.com/index_tutori...