Download

Should I really use specular map or leave it at default 0.5 value?

Hi, I know this as been discussed MANY times but I would like to get a 2021 answer as I’ve read many opposite opinions, even from Epic.
They say that 0.5 should be left in most cases (which ones?) but their PBR documentation also gives many examples of constant specular values for skin, plastic, water, milk, etc.
Also, I’ve never seen any Epic content material (free Epic marketplace assets or learning projects) with unplugged specular pin, even for non realistic assets.
They always used non 0.5 constant, specular maps or derived from diffuse channel or rougness map.
I’m targeting “game realistic” rendering and I really don’t know how my specular buffer visualization should look like. Should it be grey with really small variations? Should I get some white or black materials? Can I still get PBR results with Metal/Roughness workflow and not specular workflow?

I’ve been using the metalness PBR lately and I’ve been just setting specular to one minus metalness. This seems to work OK. But I don’t know if it’s the right thing to do.

You mean you’re using an inverted metal map as specular map?

I really don’t understand how specular works in UE4. I don’t even understand why this input is here in a roughness/metalness workflow engine and if it has to be kept at default 0.5 value.
Leaving it at 0.5 makes 1.0 rough materials (that doesn’t exist in real world, not even for Vantablack) to reflect a lot of light. Everything looks washed out/dusty.
A landscape grass material set to 1.0 rough is unrealisticly reflective : https://80.lv/articles/alireza-khaje…-and-lighting/

Also, reducing the roughness of the material makes it look less washed out/dusty.

I never touch it, most people don’t when it comes to ‘‘normal’’ materials with texture maps. It’s just there for the sake of being there, it’s not meant to be used as a replacement for metallic maps like you’d do in an engine that has the spec/gloss workflow.

I only use the spec channel when I create glass/plastic materials (I usually crank it up), it’s pretty much useless otherwise, just leave it as it is.

But then, how can you stop rough materials from being so much reflective (like landscape materials : https://80.lv/articles/alireza-khaje…-and-lighting/ )
Also, I don’t know what most people do but If you visualize the specular buffer of any Epic content (and most marketplace assets), you will see that they tweak almost every asset specular, despite the fact that the documentation says that it should be untouched.

PBR theory says don’t touch it, but PBR implementation is limited on various fronts. sometimes this causes problems depending on the art style and expectations.
so by all means if you need to tweak the Specular do it - just make sure you don’t break the underlying purpose of PBR, which is making your art look good under varying lighting conditions

The Specular input is multiplied by 0.08, so the default value of 0.5 is a specular reflectance of 0.04% - an average for most non-metals. Not all of them though, because some unique surfaces like skin and water have a lower reflectance so it may be helpful to lower the spec value to somewhere around 0.25-0.3 for those. But it’s important to know what Specular actually does, because in most cases it won’t have a huge impact unless you’re using extreme values such as 0(or 0% reflectance, removing all specular) or 1(0.08% reflectance, not quite metal or gemstone). Otherwise, anything in the middle will really only control the visibility of reflections when looking at the surface head on and not at an oblique angle. And it only affects pixels that don’t have metalness, with a grayscale metalness value acting as a blend between spec input and metallic base color.

Anything else is purely a hack to provide micro- specular occlusion, such as multiplying a cavity map or AO by the spec value to reduce specular reflectance in those areas. Or even worse, generating an arbitrary spec map from some random texture.

Ok so am I wrong when I say that a 100% rough material should have 0% reflectance? I don’t get the relation between the two values and to me, they fight each other.
Like the example I posted earlier, how can a 100% rough material with default specular value can look like this?


It looks like a plastic/dusty surface

For normal static meshes, I don’t think we need to mess with the specular. But for landscape materials, we definitely have to change it.
We cannot set it to 0, then roughness values won’t work well.
I did something related to this recently. Check that out:

I also think there won’t be any changes related to this happening in the core anytime sooner. I don’t have inside information :D. But this is what I get from browsing the forum posts.

Basically, we need to change this:

Into this:

Also, I think we need to feed 1-x of Ambient Occlusion maps into specular.
I read somewhere that, PBR AO is not always working.
But that was some old content. Not sure that has been fixed lately.

Roughness controls the how sharp or diffuse a reflection is.
Specular controls the intensity of the reflection.

Unless you’re making vantablack, you should not be setting your material to 0% specular or 100% roughness. Everything has some amount of both.

The issue with sunlight hitting landscapes at steep angles is really a problem with normal/roughness mipmaps. As mips get higher they have lower resolution and their surface approximation gets worse. It’s perfectly fine to use the distance to control the specular to overcome this problem.

Another which I personally think is better, is to use a normal->roughness composite texture.

Yeah that issue with a low-lying sun isn’t really related to the spec value, it’s just that reducing the spec hides it. Composite roughness and sharpening mipmaps is the more “correct” way to reduce it, since it’s an underlying issue related to the microfacet shading model and mipmapped textures becoming flat values - at that point, it’s no longer a “micro” facet and the textures have little to no variation.

Thanks for sharing the actual problem. I didn’t know about composite texturing. That’s something interesting.
But in my case, I will stick with the distance-based specular control since I don’t have control over textures(I am building an asset for the marketplace). Users can use any material & it’s cool to stay this burden away from them.

Thanks again.

After a lot of reading, what I understand is that the problem comes from the fact that specular reflections are based on normals.
If you use a strong normal map with a lot of details in a material with a roughness of 1, it will be less shiny than a material with a roughness of 1 too but with a flat normalmap or having few details in it.

The problem is more noticable in the distance because, due to mipmaps, the normalmap is losing even more details.
Composite texture is not really helping here. It’s usefull for rougness map losing details in the distance because of its own mipmaps but it has nothing to do with the difference of shininess of two 1.0 rough materials, it just helps to keep detailed roughness map in the distance but doesn’t break specular like the normalmap do.

It’s not specific to landscape. It’s more noticable on landscape because it’s more flat than most meshes (I get almost no specular on grass meshes with a lot of blades unless I turn off “tangent space normal” in the material settings which breaks normals)

Composite roughness will only get you so far, it’s actually a great approximation for surfaces that behave more like actual “surfaces” but real-world grass has very complex geo which comes with a lot more interactions than just “relatively flat surface with height differences”. That’s why it starts it starts to break down at a distance when represented by a pure PBR flat texture.

Personally I’d use a combination of composite roughness + fading the spec based on view angle and/or distance. Composite roughness should be free anyway, so there’s no harm in using it as it does make your roughness on mipped surfaces with strong normals more correct. But landscapes are gonna need some specular hacks to look “correct” at a distance.

The composite texture attempts to store the lost normal map detail in the roughness texture.

From the composite texture documentation:

Yes but the problem is not roughness here. You can set your roughness to 1.0, you will still get some specular reflections.
Roughness is clamped to 1.0 (I mean that you can’t go above 1.0 which is 100% rough) internaly so composite texture won’t reduce those reflections, it just helps keeping details in roughness map.

And? As I said before, roughness has no impact on reflection intensity. Roughness is only an indicator of well… roughness… It determines how diffuse the reflection will be.

Consider a smooth piece of plastic, now scuff up one spot with a piece of sandpaper. The rough part becomes “dull” right? Is the scuffed spot less reflective? No, it is just looks different because the surface is rougher and the specular reflection is more spread out. Specular and roughness are independent properties, a 100% rough surface does not necessarily have 0 specular.

But perhaps we should back up a bit: What exactly are you trying to accomplish?

Are you trying to get rid of distant reflections? If so then reduce the specular intensity.

Are you trying to make materials look physically consistent at a distance? Then composite textures is the closest we have for approximating an accurate result.

That being said, this is not real life. In real life when you look out over a field it is full of individual leaves, grass blades, stems, twigs, whatever. Applying a grass texture to a heightmap is not going to produce the same visual effect. So if you want to reduce the specular for that material to get a result that makes more sense visually, then that’s fine, go for it. But this doesn’t have anything to do with what’s physically correct. It’s just a hack to compensate for the fact that your distant terrain is just a bunch of flat triangles with a texture slapped on it.

It also isn’t a universal rule that applies to all materials. For example you would want paved asphalt to retain its specular no matter how far away it is.

So design your materials accordingly, use reference, and tweak them to taste.

Roughness does however have an impact on reflection intensity based on the viewing angle. There are still plenty of features missing when it comes to reproducing accurate real world materials and their microstructures. Just because we’re currently slapping the PBR-term on things doesn’t necessarily mean that we will receive absolutely realistic results when abiding those current rulesets since the core shaders are still approximating some complex real world phenomena. This in turn occasionally leads to false assumptions, believing that some witnessed phenomena must be correct, when they aren’t.
What seems to be discussed here is a phenomenon that classic renderers fixed a couple of years ago by introducing systems such as GlossyFresnel. Would be nice to have something like that in place.