Specular in Principled BSDF is (still) broken?

I said this, only Principled BSDF node has not this Fresnel problem.

And for GGX, look below. Left Principled BSDF, Right VSHADE. Roughnes = 0.8. Which look correct?

Left looks like washed white. GGX can not produce good results with high roughness values.

Disney shader good, but limited.

Perhaps one of the issues with using the Disney shader for realism-focused scenes, is that the aim was not so much a shader that perfectly obeyed material physics, but rather a shader that was artist directable.

In other words, yes, they took the effort to make the result look plausible in a scene, but user-made group nodes using the basic components can still produce superior results if realism is the aim. Some argue that we should get rid of the basic components and make people use bulky workarounds with tons of principled nodes instead, but this thread is another argument as to why that is downright shortsighted.

Which looks correct? Define correct. This is a subjective observation. There is nothing wrong with lowering specular to match an observed behaviour; i.e. the rubber of a rubber tire has microgeometry in the rubber itself that causes shadowing (darkening the specular term - this can be tested in a furnace test using microdisplacement - not same results as when just modifying normals). Be an artist, observe and adjust rather than “this is rubber” based on numerical values that don’t behave properly.

Here is a furnace test of a manual setup on the left which doesn’t break energy conservation, and principled which reflects more light than it receives breaking energy conservation. But again, this is nitpicking and not something I even consider for normal work. At the bright rim, I measure 1.34 (RGB value) which is significantly boosted from the surrounding 1.00 white.


https://google.github.io/filament/Filament.md.html#materialsystem/improvingthebrdfs/energylossinspecularreflectance

2 Likes

Correct is physically correct. I am always get real world values from academic documents. This is correct. What is your real world values?

For dielectric raw wood, real world Roughness value must be approximately “0.8”. And for dielectric materials, reflection color must be “1.0, 1.0, 1.0”. But with Principled BSDF, result is invalid. If you use Specular Workflow, then you can change Specular value, but if you work with Metalness workflow, you can change Roughness value and Glossy color “1.0, 1.0, 1.0” for dielectrics (except fabrics).

This from Arnold Render documents:

Controls the glossiness of the specular reflections. The lower the value, the sharper the reflection. In the limit, a value of 0 will give you a perfectly sharp mirror reflection, while 1.0 will create reflections that are close to a diffuse reflection.

When you increase Roughness value, surface looks white washed, not like Diffuse reflection. Principled BSDF must calculate this, but it does not do that. It uses classic Diffuse + Glossy mix technique.

If you don’t need physically correct result, only need artistic results, then you do not need PBR.

If you say, no, this is correct, then not comment.

I was talking before about comparing to Renderman rather than Arnold. I have used both. I would sooner compare Renderman’s principled shader to Cycles’ version. Arnold uses the Arnold Standard Surface shader which is not the same thing at all. So if you are going to compare Cycles Principled to anything compare it to the Disney shader it was modeled after.

Principled BSDF.

The Principled BSDF that combines multiple layers into a single easy to use node. It is based on the Disney principled model also known as the “PBR” shader, making it compatible with other software such as Pixar’s Renderman® and Unreal Engine®. Image textures painted or baked from software like Substance Painter® may be directly linked to the corresponding parameters in this shader.

This “Uber” shader includes multiple layers to create a wide variety of materials. The base layer is a user controlled mix between diffuse, metal, subsurface scattering and transmission. On top of that there is a specular layer, sheen layer and clearcoat layer.

It uses PBR yes. But it is designed to be a plausable shader. Not a physically correct shader.

The PxrDisney shader is a “catch-all” shader, designed to be flexible and dynamic in a production shading pipeline. The shader is based on the Disney “principled” BRDF by Brent Burley; it is “principled” rather than strictly physical. The principles that Disney followed when developing this model were:

  1. Intuitive rather than physical.
  2. As few parameters as possible.
  3. Parameters are zero to one over their plausible range.
  4. Parameters are allowed to be pushed beyond their plausible range where it makes sense.
  5. All combinations of parameters should be as robust and plausible as possible.

Blender:

# Principled BSDF

The Principled BSDF that combines multiple layers into a single easy to use node. It is based on the Disney principled model also known as the “PBR” shader, making it compatible with other software such as Pixar’s Renderman® and Unreal Engine®. Image textures painted or baked from software like Substance Painter® may be directly linked to the corresponding parameters in this shader.

This “Uber” shader includes multiple layers to create a wide variety of materials. The base layer is a user controlled mix between diffuse, metal, subsurface scattering and transmission. On top of that there is a specular layer, sheen layer and clearcoat layer.

Arnold:

https://docs.arnoldrenderer.com/display/A5AFMUG/Standard+Surface

Specular in Arnold Standard Surface plays a completely different role in the shader than it does in the principled shader.

So this is what I asked the OP what they were expecting from Specular in the Cycles Principled BSDF.

This has been my understanding of this over the last few years.

Both (Principled and Standard Surface) are build on the PBR concept but each are completely different implementations.

History of the standard shader:

We will primarily focus on the design of the surface shader,alSurface, examining the way itis structured in order to create a simple-to-use, physically plausible shader. We will cover the outputsit generates and how they are intended to be used within a visual effects pipeline. We will also lookat some of the tricks employed to reduce noise and render faster, even if it sometimes means breakingphysical correctness.

There is a need for a standard uber-shader parametrization with a well-defined set of parameters that can be tweaked to represent most real-world (as well as imaginary) materials. In this proposal we aim to fill this gap; one of our reference implementations is written in OSL [Georgiev2019].

Our proposed model follows closely the Arnold 5 Standard Surface shader, which has strong spiritual predecessors in Anders Langlands’ alSurface [Langlands2014] and Autodesk 3ds Max’s Physical Material [Andersson2016]. The alSurface shader has served as a de-facto standard in the industry for a while but is no longer actively developed. 3ds Max’s Physical Material in turn has been strongly inspired by Allegorithmic’s PBR shading model [McDermott2018], Disney’s Principled Shader [Burley2012], and general industry trends in several real-time 3D engines, and has been production proven with support by all major render engines for 3ds Max.

In this proposal, rather than providing parameters for every conceivable case, we intentionally try to boil the set of parameters down to only those that are most useful in practice. We also fix the combination of primitive reflectance models to ensure that the users work within the bounds of what is physically plausible as much as possible. We aim for the overall behavior to be simple, logical, intuitive, and understandable, so that the model covers most day-to-day use cases. For the few it does not cover, one may need to use a renderer-specific shader, or build a bespoke shading network.

https://autodesk.github.io/standard-surface/

Are you sure about that?Arnold uses the same microfacet roughness as Cycles,GGX.
https://autodesk.github.io/standard-surface/
https://autodesk.github.io/standard-surface/#closures/specularreflection

here you can see how the specular is mixed in the principled shader

I don’t know, I am not use Arnold. But this explanation is true for real life. And I am use GPU for render, for this reason I am not use OSL. And I know how mix this, and my VSHADE addon do this automatically with all setups. My Fresnel setup do this automatically, and with this, all Vshade nodes can do this automatically. But my method is different. I learnt this method from some technical documentation of game engines.

How does your Fresnel setup differ from the roughness based fresnel setup I showed above? It’s different from Disney, but not a whole lot and I have no issues using it instead. And based on what documentation specifically (when)? Game engines have evolved significantly. Although the “fake” ways game engines used to do IOR doesn’t differ significantly enough to bother us. Flipping back and forth through “fake” and real showed no observable difference.

What does this even mean, academic documents? If you try to be accurate (I’m not), unless you tweak to get as close to what a MERL BRDF dataset explorer shows, theoretical values may be pretty far off from the actual appearance. Match what you observe, don’t be a number slave. That advice is from shader authors (although I can’t find the reference right now).

I have no issues with this regarding Principled (I have other issues though). There is no such thing as Diffuse “reflection” - that is an effect of absorption - fresnel dictates the probability of a ray bouncing off specularly (lobe direction dictated by roughness) or penetrating the surface and getting re-emitted in a completely random (Lambertian, I’m ignoring the fancy stuff) fashion. Anything that bounces off specularly will (generally speaking) have white as color. If you want even less white to simulate surface “roughness” that is more complex than a variation of surface structure (i.e. rubber), then lower the specularity to below the theoretical IOR to increase the chance of penetration due to reflected ray going into the material rather than bouncing out like we do for normal maps.

If you have an issue with Principled, why not ask Disney for input?

1 Like

Yes, a little different from Disney code.

I always read academic research documents. measured Roughness values, measured Specular values, measured Abbe values etc. You can find on academic sites.

Physically Correct is not calculate everything like real world. For this any CPU or GPU power has not enough. Physically Correct is result as close as possible like real world.

Fresnel, at the same time specifies how mix Diffuse and Glossy shaders. If you mix with right method, then your result will be right as possible as, also with high roughness.

I did not use Disney for my VSHADE setup. My setup interface similar to Vray, but some parts are different.

Different how? Using which game engine as reference? Close enough to me means starting off using cheat sheets then tweak, or going crazy and visually approach a MERL reference (I don’t bother). Cheat sheets sets you up in the correct ballpark, but (using Disney) for some materials (like rubber or other very rough surfaces) be prepared to lower the specular to force F0 reflections down if the material structure dictates it.

Example of these “academic research papers”? For PBR the most important map is the roughness map, so a “scientific roughness value” doesn’t make sense. Sloppy PBR work (and I usually do this myself to save map space) is when roughness (and bump) map is simply some derivative of albedo, when it should have unique roughness map to match the material.

Fresnel is used to mix Glossy/Aniso to whatever absorption setup you choose to use, not just Diffuse, and only that (I’m leaving out some stuff not needed here).

You can’t simulate some of the stuff Disney does using other shaders.

How? This is commercial product, I can not talk about all details.

For academy (for physics), you can not find PBR term. Academies be interested real world, not computer graphic world. I read academic documents and after that, I convert this values to computer graphic values. And sometimes I read game engine architectures, codes, and sometimes I produce some methods. These are not easy things and very very time consuming.

VSHADE is not a mediocre system, it is professional system. I did not get any negative feedback about that until today. And I developed this system, because I seen negative sides and difficulties of the Cycles and Eevee. And I contine developing. As I learn new things and produce new methods, I continue add these.

Don’t forget, Disney method only a method and it has positive and negative sides.

If you say: “I love setup very complex shader setups, and I can do anything myself, I know everything”, for sure you can use standard Cycles nodes. This nodes exist because of that.

Ok, I give up on getting links.

so specular is only broken at low/high roughness values? how does it compare with Maya at middle roughness values?

if this is the case then I’ll be clamping my roughness maps between ~0.1-0.9 to avoid those values

I watch a video by chocofur on youtube, turns out to use the specular correctly you need to plug a little conversion node into it which you input the desired IOR and it calculates the correct specular value. The principled shaders IOR will only do anything if you’re using a transmissive material. The same guy also has a cool angled roughness node setup, its kind of like fresnel, you can define the rgb curve and plug it into the roughness input it will make it so faces viewed at a sharp angle are much less rough compared to when viewed straight on.

Spec 0.5 is equal to IOR 1.5, and that’s close enough to any regular dielectric material. However, there are microstructures in some materials that causes loss of energy (incl specular energy) that say we should use those theoretical IOR values with a bit of care. Real life microstructures are a bit more complex than superflat theory or the level of detail we use normal modifications for. So in the rubber example, while rubber at 1.519 is visually identical to 1.5 theoretically, if you observe rubber to reflect less then just dial the spec down. At glancing angles, it will always reflect fully (as you’re seeing just the top of these microstructures at this point). IOR/Spec is a good starting point, but don’t be a number whore if real life observations don’t match. Yes, there are times when PBR metalness workflow cannot work good enough and you have to set it up manually, but ignore those for now.
Rubber IOR obtained from here, but use it as a guide and with care, there are reasons to deviate from theory. Using 1.5 or 1.519 is not what is going to make or break your rubber appearance - to match real appearance of some rubbers you might have to go as low as 1.1 even if this is well below water and some gases.

1 Like

I believe your messages match my experience;

I use textures from Quixel (best I can get), and still notice annoying amount of specular reflections at grazing angles when I add soil-, grass-, sand- materials on a flat plane. I don’t see another way than to turn down the specularity a bit (very often to around 0.25 - 0.33). Although 0.5 might be most plausible, still there is a big difference in the real world surface with all its micro-bumps in the real world and the perfect flat plane in Blender.
Therefore papers are useful as guidance, and knowledge to come to understanding, but at the very end we always check as artist the result and tweak, maybe breaking “the rules” a bit since a 3D scene is still far from similar to the real world.

1 Like

In what blender version it has changed “same issue that roughness used to have”?