The poorly understood Specular slider of the Principled Shader

The Principled Shader has this one slider called “Specular”. Turns out A LOT of people don’t understand what it really does, and use it the wrong way. So far, I think I’ve seen at least 5 Blender addons and commercial assets where the slider is used incorrectly. So, for the sake of helping clear up the confusion, here’s an explanation of the Specular slider. (I originally posted it on Right-Click Select. Links have been stripped because I’m a new user here.)

====================

  • The light reflected off a material is a combination of diffuse and specular reflection. Metals have no diffuse reflection (= black diffuse color). All their color is in the specular reflection. For non-metals, it’s almost the other way around: They have very little, uncolored specular reflection (2-5%), the rest is diffuse reflection.
  • In the spec/gloss PBR workflow, the diffuse and specular reflection each get their own map. Blender’s Principled Shader on the other hand follows the metalness workflow, which basically means that diffuse and specular reflection are combined into a single map, known as “base color” or “albedo”, and the metalness map is used as a mask to extract diffuse and specular reflection.
  • This “2 maps in 1 map” approach works because almost all the color information is either in the diffuse reflection (in the case of non-metals) or in the specular reflection (in the case of metals). So you can have one map that represents both, plus a metalness map that tells the renderer for any given pixel whether that pixel’s color represents a diffuse or a specular color.
  • Now, recall that non-metals aren’t just all diffuse reflection, they also have a small amount of specular reflection. But this information is neither in the base color map nor in the metalness map. So what if you want to adjust it? That’s what the specular socket of the Principled Shader is for.
  • To be precise, moving the value of the specular socket in the [0, 1] range will give you 0-8% specular reflection, which is the typical range for most non-metals. The default value of 0.5 will give you 4% specular reflection.
  • There’s also a formula in the Blender docs that tells you how to calculate the correct value for the specular socket from a known IOR value.

Now that we’ve cleared up what the specular socket does, here’s how you should NOT use it:

  • No, you can NOT plug a specular map from older, non-PBR workflows into this socket. These are most likely totally different things.
  • No, you can NOT just plug a specular map from the spec/gloss PBR workflow into this socket. (Recall that the range [0, 1] of the specular socket corresponds to 0-8% of “actual” specular reflection!)
15 Likes

Wow, I sincerely appreciate the effort you put into this explanation but it doesn’t make things much clearer for me. From what I understand of (real life) materials, reflection is just reflection - whether it’s diffuse or specular comes down to a difference in roughness, and that we had diffuse and specular in the first place is because renderers used to have more approximate models in place, that today are obsolete.
What I don’t understand in your explanation is the nuance between diffuse and specular in today’s renderers. Would you care to rephrase that one please ? It would be most appreciated !

Hadrien

Not sure I understand the question, but… Specular reflection is when light hits the surface and bounces right off. Diffuse reflection is when light goes into the material, gets scattered around and is finally reemitted. That’s the physical model PBR is based on. This is not just something the graphics people dreamed up.

Perhaps it becomes clearer if you look into the following PBR resources:

Because it is needed. Specular re-emission is extremely costly in a path tracer - try an interior scene bouncing light around substituting diffuse with rough specular. I’ll even substitute the glossy indirect for diffuse indirect to reduce energy loss rather than render with caustics on. Why do we have diffuse? It’s a fast approximation to volume - a very high density volume should look identical to diffuse at the fraction of the time.

It’s basically about efficiency - solving the rendering equation as fast as possible by splitting it into parts, trading off some accuracy in the process.

So what about non-metallic, highly glossy materials, then? Say obsidian, most gemstones I guess (ruby, emerald & such). Or silicon maybe, those polished waffers from integrated circuit production are about as reflecting as non-metals get, I guess.
Would you be supposed to push the specular-value beyond 1 here, as the Blender docs seem to suggest:

  • diamond: ior = 2.417, specular = 2.15

Since materials with reflectivity above 8% do exist, the field allows values above 1.
And everything else non-metallic apparently shiny is for the clearcoat-value (e.g. ceramics)?
Would appreciate some more insight, if I may ask.

greetings, Kologe

Gemstones and semiconductors (silicone) are kind of exceptions to “the normal range of plausible values” that 0-1 gives.

My original post above was just a barebones introduction to PBR to explain the Specular slider in the simplest way possible. I left out a lot of detail along the way, such as the fact that there are actually 3, not 2, classes of materials: Metals, dielectrics and semiconductors. The third class is not represented in standard PBR, and this includes silicon. If you really want to know all the details, go check out the PBR resources I linked to above, that’s what my explanation is based on.

Thank you very much for your explanation.

Sorry i have some questions.

so if i draw a monster in to substance painter,Material setting i use the PBR-metal-rough set.

now i draw basecolor、rough 、height、normal map, but not included specular map,and the monster preview effect in the Substance painter is what I need.

Then what image should i give to the specular channel in blender?:persevere:

I have recently encountered this problem.

It will make my monsters too reflective or faint

Nothing? In most cases, you shouldn’t plug anything into the specular socket, in fact usually you shouldn’t even be touching the specular slider. That one is “experts only”. I don’t know about the reflectivity problems, maybe try adjusting the other parameters, e.g. roughness.

ok,thank you!

It is equal to saying that I should let Specular be at the default value 0.5, just adjust the roughness?!

I will try,thank you!

Yep. Run the roughness texture through an RGB curve or a ColorRamp or something. Don’t touch the Specular slider unless you really know what you’re doing.

1 Like

Thanks CarlG, I know that, as I explained in my previous post - I was asking about the reason for using specular when I can get seemingly all I need from the roughness input ?

It’s there for “artistic control”. If the reflections are too much and there is too much hazzle adjusting the roughness map (which may be shared among assets), simply tweak it.

You can also mask in a 0 value to completely shut off specular reflections. I use this all the time on flat simple planes to simulate cracks in floorboards which (when combined with near black diffuse) doesn’t reflect any light at all.

Here is an example quick brick based wooden floor board setup, with no respect to roughness, where I use the brick mortar fac output to reduce specularity to 0 in the fake cracks. The roughness input adds full roughness to the crack, but as you can see if you unplug the specular it becomes all muddy even if the diffuse is now also black. I think the fake cracks looks very similar to the real crack between the two full 3d boards.

1 Like

NO - it is not.
reflection has

  1. one or many directions
  2. absorbtion
  3. transition (into material)
  4. intensity
  5. color shifting

excellent stuff:

1 Like

see it simple ?
specular input – amount of reflected light rays (~intensity)
roughness input – amount of diffusion of lightrays (~diffusity)

I was thinking about specular problem with principled shader but I still have doubts.

Let say I will have real world 0-1 specular input. So if I understand it correctly I need to multiply it by ?yea by what? to get principled shader working well. Will we follow metalic workflow then? I don’t understand how then metalness value can be used if I give the principled shader right spec values. And how do I bake this texture for an example sketchfab. Texture won’t work with metalic workflow and bake will not be possible I suppose as it gives values from 0 to 1 even if we use only 0-8% of the range. So I don’t have any idea how to benefit from this knowledge.

I have the problem with rendering of the metal as it is always too dark.

I can simply switch to specular workflow what I’m going to test, but as we are talking about principled shader I have these two questions:

  1. It is unbakeable, right?
  2. What for metalness will be used?