Every single time I run into a problem modeling or visualizing something after some struggling I usually realize I didn’t have enough reference or did not observe the thing in detail enough. I think observation is enormously important in producing better artwork. I think that is what we are doing here. Observing, trying to understand, learning. It’s not math or science - none of us are mathematicians or scientists.
Oh, ok then
Complex approach is indeed highly complex, time consuming & rarely efficient enough to use it for a commercial project or make a thorough study (most often are in-house trade secrets).
It is also very scene specific since tear & wear makes huge differences in deterioration of matter thus creating different visual properties (most prominent in micro roughness & thin film) of same/similar materials from another location.
Archviz exteriors & Product Viz of what is to be used outside (in the field) - facades (glass & metals) get specific properties based on geo location - influenced by local weather & industry: UV radiation, acidic rain, smog, number of sunny days, angle of the sun, quantity of precipitations, wind strength & directions, extreme temperatures… Yes, do look around, observe… the Ground Truth Simulations (predictions) are too complex & expensive for mere mortals (profit dependent mind - Clients From Hell) to afford. Interiors are far less demanding.
Why it is good to also study & use (or at least offer) other options: CPU OSL (Thin Film by prutser) & engines as Ocean, Indigo, LuX, Maxwell & Mitsuba or simply knowing how to create an artistic visualization.
Finally, the client pays and sees what it believes to sell the product. So in the end it’s just a cheap pleasing Cycles art every day.
Great moony, a math, computer scientist or? … anyway love it
Iridescence on a leather sofa can make a huge difference in interior visualization. It does not have to be precise. Is it not an effect caused by thin film on a surface though and not by surface irregularities? There must be a cheep way to fake it.
I saw this video a few days back:
There are also a few threads dealing with iridescence and thin film effects:
Yup… Real leather used for furniture, car interiors & other products, by design has properties of thin film on most upper layer. To make a good leather & preserve it in mint condition, it must be treated with oils (or other special chemicals). Fine wood also.
In Cycles, most often i spice the mix with Layer weight, Colorramp and a pinch of noise.
Any of these solutions would go on top of microroughenss as coating, right?
Yeah I am familiar with this argument as well. Math is universal and can express everything, even what we consider artistic - I remember in film analysis class we were shown simplified graphs of several films’ paces/intensity as function of time (example) - most of them for the sake of the example were rather formulaic (buildup-confrontation-letdown-relief-whatnot). Now I’m not arguing in favor of math superseding all kinds of artistic input, not at all. I just like to talk about this kind of things.
Btw I love your tests guys. @burnin how would you go about modeling iridescence physically, in terms of surface geometry ? How does that work ?
Scratch that in the time it took me to write this @Moony posted all these links related to iridescence. Thanks !
Yes I think so. These solutions affect the colour of reflections - not the roughness - so I believe they should stack just fine.
For example - the node setup in the link below has the roughness slot free - so it should just be a case of plugging the micro-roughness node group into the roughness slot - and we are good to go.
did you see that one too
I would expose Normal input of the Layer Weight node so that you could plug in a bump map of low frequency if you needed to simulate say heated metals, where a layer of oxide varying in thickness sometimes forms so you can then simulate that varying thickness with a bump map if I understand it correctly. Anyway, problem solved with iridescence on top of micro-roughness. We can carry on with micro-roughness.
Yes I forgot to connect it. Layer weight has a normal input
Sure - here you go:
WavesTest.blend (527 KB)
Interesting - can you show the whole node setup?
Actually, diffraction grating iridescence is quite easy to implement in cycles (unless of course we want to have full spectral analisys, but that would only work with pure light sources anyway).
I already tried it (by highjacking the anisotropic shader, since adding a new node to blender is still above my programmer qualities), and it worked great, and not only that, it was super fast.
Also, a few tweakings and it’s possible to have multiple thin film layers with the same formula. Although I think it would be better if we could have a 2D color ramp to color the output vector (even if not mathematical correct).
It wouldn’t work for glass diffraction since that’s another type of phenomena, but most of interference situations could be addressed with it.
There are still some issues that I haven’t figured the best approach, specially because the main topic of this thread: Different types of roughness reflect different amounts of light (and how to implement this in order to give the artist the control).
Also, the common thin film setup we can find here and there in the forum, is only correct for 0.0 roughness. Just because we then know that the sin(Out,N) is the same as sin(In, N). As soon we add some roughness we loose control, because the output vector is unaccessable and there for we cannot calculate which interference is taking place.
Is there an easy way for us to use that?
While we’re on the subject of thin-film, the Arnold engine has just added this effect to their standard material feature-set (with good reference material)
Since Arnold is an RGB renderer, it might be possible to recreate it with Cycles nodes using nodes such as the color-ramp, RGB curves, color mix, and the math node. The docs. also state that this would be something you have in your tree before you create the glossy coat.
About (offtopic) PBR thin film interference, in case you had not seen it, here with OSL (CPU);