As seen here there is a tutorial which i found a few years back actually, on how to construct a velvet material shader. It’s a tutorial for Arnold renderer, but you can easily translate it over to cycles.
Notice you turn the secular to zero, its not needed as the shader is based on the sheen value in order to get a great fabric shader. But we don’t have sheen roughness, if you alter the roughness nothing will happen because we are not using any specular…
Here is a render for a velvet shader i’ve been tweaking for an entire day, and the chair i had to re model about 3 times i’m quite proud of it now.
The sheen is too rough i think it needs to be sharper to catch better highlights.
Of course i did try the velvet BSDF but it has only limited options and no sheen roughness…
So what do you guys make of it? The velvet BSDF had SSS node mixed in with the exact same settings including radius values. But in the end it looks flat and not realistic.
Basically the challenge is, can you make a more accurate velvet material using the principled BSDF than the Velvet BSDF… And if so then can the Principled BSDF be improved further with something like a roughness control for the sheen? And is Velvet BSDF now obsolete?
Update, i can now control the roughness of the sheen, using layer weight into an RGB curves node. The same way you can get angled roughness for any material to get the Fresnel effect.
Interesting. let me try it with angled roughness plugged in.
It no longer seems to work… Does this mean that Principled BSDF is not handling Fresnel properly?
Angled roughness (as in less rough the more incident the view-angle is) might help, but I think it’s not the solution.
The problem with fresnel I believe it’s aknowledged (but is kept because acceptable?)
The fact is that working with interiors and with the realistic sun texture high values I find myself lowering the specular down to .1 to have believable rough surfaces. Making proper PBR nodegroups with plain diffuse and glossy shaders (and roughness driven fresnel) still gives more accurate results.
hmmm. Seems Cylces might not be the be all end all for realistic rendering. Andrew Price did a big render engines comparison a while back, and seemed to agree each engine had its merits and some perform better than cycles for Arch Viz…
So we should request an upgrade, because Blender is about being the best tool for all 3D graphics jobs…
That is true if you limit your shading acumen to what is provided by the Principled node (as in, not even bothering to build custom shaders with the building blocks also found in Cycles). The reason is what Disney stated in the original paper, the priority was artist directability and not absolute physical correctness.
Using the individual components meanwhile allow for materials that look pretty real while also being energy conserving.
…is isotropic. For this to work for proper velvet we need an anisotropy control; controlling hue or lightness depending on the nap direction compared to some reference direction (i.e UV.y). The closest thing we can do in Cycles is using two sets of diffuse/velvet shaders with normals pointing in slightly opposite direction, and we can’t go completely nuts with it either as it will introduce shading artifacts.
Normal 1 = CombineXYZ[0.5, 0.25, 1] → Normal Map → Shader set 1 on a UV grid.
Normal 2 = CombineXYZ[0.5, 0.75, 1] → Normal Map → Shader set 1 on a UV grid.
If you make it different hues (like in some velours), like i.e. red and somewhat purple, it can look convincing enough. But velvet or velour with high intensity changes (bright red vs very dark red) - let’s just say you’ll have a hard time setting that up and look good.
Principled’s sheen adds sheen, it doesn’t constitute as a proper fuzz shader. If you look up sewing tutorials, you’ll see that nap direction is of high importance - mess it up and two adjacent pieces of fabric will have significant variations in hue or intensity. Our velvet shader is, roughly said, nothing more than a glossy shader that subtracts light on the reflection.
That’s not a wrong assumption. For fabrics, it’s in fact so rough and don’t follow the physics anymore of that of a flat surface, you could probably go all the way to 0.01 or even completely off. Fresnel everywhere? Yes, on flat surfaces where there is no “holes for light to disappear into” - in such surfaces expect loss of specular energy. Fresnel doesn’t and cannot make up for this. Roughness doesn’t and cannot make up for this. Lookup microscope pictures of surfaces and discover a world where light rays can actually “get swallowed” and nothing can ever be reflected back to the viewer. You can simulate this effect by modelling “pores in a surface” and array the hell out of it - it won’t be as bright as a regular surface trying to mimic the same properties.
This is what i ended up with… If i set the sheen up high approx 4 on one principled shader and mix it with a velvet shader with low sheen and use a Fresnel node as the mix factor it gives the effect of a roughness control for the sheen so i can get a sharper more velvet like sheen.
I’m more willing to believe that the furnace-test-failing problem present in Principled shader is the reason why I have to lower the specular. Of course the .5 rule for dielectrics is generic and depending on materials specular may see variations, being fabrics one kind that needs it towards low values.
Principled will “break” on furnace test regardless of specular, even if completely zero’ed out. Roughness 1 energy will be gained. Roughness 0 energy will be lost. Roughness 0.5 is pretty accurate. Yeah you can play with the specular value, that’s what it’s there for. It’s an artistic choice. Spec 0.5 is basically IOR 1.45, which is pretty close to all dielectrics, and looking up “fabric IOR” would take you to around 1.45. But looking at the molecular structure under a microscope of fabric, rubber, or any porous material, it will have many tiny holes in it where specular energy is “lost”. Roughness will only account for a rough surface that spreads out the specular reflection but the total energy is maintained. Roughness only portrays an uneven surface, not a surface full of holes. So you adjust specular to account for it (IOR), even though looking up IOR dictates a much higher value. Even a custom PBR fresnel accounting for roughness may cause a stronger reflection at roughness 1 on a black surface.
Btw, you can test this easily. In a white background furnace test, add suzanne instead of a sphere, a few subdiv levels, and smooth shading. Now add only a multiscatter GGX glossy node with full roughness - multiscatter preserves energy. When rendered observe how the eyes area gets darker due to rays escaping into geometric features. Specular energy is lost. This can happen also on a microscopic scale. But we represent it as a flat surface. But we can still observe the overall effect as a loss of specular energy. Renderers don’t sample details this small, i.e. we can’t do anisotropic shading on a regular glossy simply by modifying the normals.