Will Eevee support cycles velvet shaders?

One thing that has delayed my switch to 2.8 is the lack of velvet shader support in Eevee. A number of my custom assets make heavy use of that. I’ve searched around, and I can’t find a clear answer on whether or not there are plans to support it eventually?

Basically that tells me if I should wait, or if I’ll have to bite the bullet and just redo my materials.

If it isn’t going to ever support velvet, that’s fine, though it occurs to me to ask… is (or will there be) a material node that can detect which engine is being used, so I could make a material that used velvet in cycles, and something else in Eevee?

In the shader output node you can select whether that should be applied for cycles, eevee, or both (the default).

I don’t know if velvet in eevee is planned , but it looks simple to emulate.

There isn’t a node that detect engines, but you can set the material output to be for eevee cycles or both

Maybe you should make a velvet node that is both cycles and eevee compatible

Gotcha. That’s certainly do-able, It’s just good to know what to expect. Thanks!

I’m finally making the switch to 2.8, now that I’m done with a large animation project. I’m converting my character assets over, which means making an eevee alternative to the cycles velvet shader. Unfortunately, almost all of my googling on how to do that ultimately leads to the same video, which has apparently been taken down!

Could someone point me in the right direction? Maybe I’m missing obvious search terms or something, but I can’t find a darn thing that is of any help

The Velvet shader in cycles is quite crap. All it does is putting a dark spot at facing angle. But look good how velvet looks. I took a lot of pictures before and found out:

  • On grazing angle there is less saturation. I don’t know why exactly but I can imagine that for example a facing angle you are looking deeper into the hairs and you might see bounces there or whatever explanation there is. Fibers on grazing angle might look lighter. There you see probably the tiny hairs not appearing to have so much color because they are thin and catching light (translucent?). Anyway never mind that much the explanation, but just look at velvet.

  • A bit darker only but more saturation on facing angle.

Here the most basic node setup, but you have to add textures (no bump but normal).

Update: the sheen slider that it meant to simulate fabrics does similar. But this simple node setup give more control.

To me it appears to be an “inverse glossy” - dark spot instead of hot spot, light dependent. To mimic this, try a high roughness white glossy via shader2rgb via “normalization multiplier” via color ramp then finally multiplied with the velvet color (then some mixture with diffuse and possibly a facing colored glossy similar to specular tint effect of principled).

With “normalization multiplier” I mean you want to get the output under control prior to feeding it into a color ramp due to its clamping and non-extrapolation behavior.

Not saying this creates realistic velvet material, but seems to mimic the velvet shader more. I’m not sure what the velvet shader actually does, anyone code literals here that can read the velvet closure code? What makes the velvet shader good or bad? I am not able to get anywhere close using the principled sheen parameter (at least alone).

I wondered this for years because they always said: A material can be or dielectric or metal. Metal have tinted specularity, dielectrics not. And I wondered why satin looks so metallic.

But anyway, do you want to show a node-setup? I (or we?) might easily mis-interpret your explanation, it feels like “Did I understand that well?” :grinning:

That is generally true. But in case of satin and stuff like that we’re not coloring speculars to simulate the material properties, but to simulate what happens when the non modelled tiny hairs absorb, color and retransmits the light. The property of satin does not do this afaik, we do it to fake the hair shading we can’t afford doing for real.

It got too late yesterday, and the scene was originally a furnace test for something else so the “normalization multiplier” I was using was kinda out of whack. I’ll see if I can rebuild it sometime with a more normal setup.

I think you are the first in 2 years and 11 months providing useful feedback.
Blender’s solution to this, we can see it on the hair-shader :
On the left we sure pure metalic and on the left translucent material.

I ever had another theory and that is this:

I came to the idea that the microstructure causes light to bounce around. That indirect light is colored giving the appearance that a material has coloured specularity, so it looks a bit metallic. (Forgive me my lack of using scientific terms).

I posted this years ago on Blender stack exchange:

Here is the general idea. In this case, I really have no idea what I’m doing. I don’t care about physics, I just think it looks kinda sorta similar:

For sure there is an important facet of velvet you are showing.
I miss two things, when looking at the viewport render.

  • Though fabrics appear to have a kind of tinted reflections, there are also some colourless reflections. Here they are completely missing. I think if you could add a tiny bit, that would make look better I believe.

  • I am quite sure I see in a lot of fabrics a kind of sheen. That is; at grazing angle they loose saturation. Most saturation is in facing angle.

I am curious how that looks like with your shader.

It kinda sorta ended up looking as a velvet material, which was not what I was going for. I was going for the same look and response as the velvet shader in Cycles. Turns out, the above is a complete mess and utterly wrong. That’s what I get from doing things from memory and not bothering to check. The whole “invert the color thing” is missing. I’ll have another go tomorrow, too late again :slight_smile:

Again, not trying to mimic crushed velvet, satin, or any fabric material, only the velvet shader output and how it responds to light. It’s not meant to be used on its own.

To get that is not that complicated I believe.

You mean, there should be such a reflection node (cynicat-ish, or whatever, kind of correct fresnel), right? I don’t think the Velvet shader’s output is meant to use as an input for something else (except mix-shader). It’s a shader.
I am pretty sure the velvet shader is pretty useless.

You see it here above in the screenshot. Basically it makes the facing angle darker. And Velvet doesn’t look like that. I think they were confused. Depending on what fabric exactly often it’s less saturated and maybe lighter on grazing angles.

Here a basic velvet shader (no textures) as described, the best I can do so far in EEVEE.:


1 Like

At least for everyone who don’t understand the underneath its variables…

Don’t get me wrong: I’m advocating for the hability for us to create our own closures!!

But some shaders need a good understanding of what their parameters mean…
The case of the Velvet shader is that most people just want to plug it in and have velvet!
I’d rather call it something like ‘micro filament shader’, and it serves a very good purpose to represent some scattering patterns of a specific orientation of each filament (expressed as sigma).

As @CarlG referenced, it’s not supposed to be used alone, because it mainly simulates a very specific BSDF. In real velvet, you have different orientations of the fibers/filaments, and also an ununiform pattern of predominant orientations.

Can you show it that the velvet shader is useful?
( The velvet shader needs to have a prominent place in the setup, otherwise it won’t count. )

I wanted to propose to check the source code, but why would I do that, I showed in screenshot how similar the velvet shader to a diffuse shader with a darkening at facing angle. This latter one is is obvious, way more than:

"micro filament shader’, and it serves a very good purpose to represent some scattering patterns of a specific orientation of each filament "

Please look (you didn’t, otherwise you wouldn’t even come to the idea to discuss this as is.) at the screenshot where I compare the real velvet shader with just a diffuse shader and layer weight. Doesn’t that look very similar? So similar that I am not scared of any scientific argument that we should use the velvet shader.

Also, the idea that velvet (or some fabrics under certain conditions) show desaturation at grazing angle is not a crazy idea: years later after my conclusion, the principled shader came into Blender with a sheen setting. And that does something that looks more where I am talking about then putting a dark spot at facing angle.

In the Blender manual I find the following about Sigma:

Variance of the normal distribution, controlling the sharpness of the peak. It can be thought of as a kind of roughness .

Let’s break that down:

  • Variance of the normal distrubution: In other words: facing angle
  • Controlling the sharpness of the peak: (very) similar to Blend as in layer weight node)
  • It can be thought of as a kind of roughness : The darker the spot , the rougher appears, was the idea.

I see elsewhere the velvet shader described as:

  • Velvet shader: You can think of it like a Diffuse shader, but with a big dark spot in the middle
  • Sigma: A sort of roughness value that controls the size of the dark spot, where higher values means the dark spot is smaller.

Let’s also break down the following:

scattering patterns of a specific orientation of each filament (expressed as sigma )

Orientation of the filament: Fibers, In velvet they are short, and pointing outwards similar to the normals we know in blender. And how light scatters in that circumstance.

So in other words you said; “The velvet shader serves a good purpose because it simulates how light scatters in fabric / velvet /”

Yep, and it does that by placing a beautiful dark spot at facing angle.
Actually quite a fun to break down so many scientific terms into nothing more than a black spot.

Isn’t it easier to say just Black Spot? And it much more clear for those who are learning Blender.

So, again, what didn’t I understand about the underneath its variables?

For those who wants a kind of velvet shader in EEVEE, experiment with this and your’re good to go:

1 Like

And here is the sigma:

Which you can describe as " scattering patterns of a specific orientation of each filament (expressed as sigma )"

Or I believe we will also understand you when you say Black Spot. Or if you want to go fancy: Black spot on facing angle.

Beautiful fabric but that looks more like satin then velvet

The velvet shader depends much more from the direction light is coming from than the Diffuse BRDF. Having a Layer Weight node just don’t do the trick, as it only uses the angle between the Incoming ray and the surface normal; not the outgoing ray!

But perhaps even better than look into the source code, is to read the papers where the reflectance/trasmission functions are explained.