Cycles Principled BSDF violating energy conservation?

can anyone reproduce this on any other engine that uses pbr or some variation of it? Vray and arnold have their own shaders which do not exhibit this behavior.
I never posted a bug report, and as @StefanW is on the thread, he maybe could do that if it really looks like a bug?

Also if the implementation is buggy, it would mean a quite radical change in render results - if it gets changed / fixed… not sure if this is even feasible until some future major release?

Arnold exhibits the same behavior.
But it seems to use Oren Nayar for the diffuse instead of Lambert so it looks less wrong.

1 Like

A strange Issue. It seems, that As you move roughness away from 0.5 in cycles, this thing happens and is most visible both at 0 and 1 roughness.

One more intresting thing:

When you change specular to 0 and have a roughness of 0 this happens. :thinking:

In Eevee everything seems to work as expected.

I mean the frenel effect is a thing (https://www.youtube.com/watch?v=CfeBz_8JBL8) and it makes surfaces, that are curved away from the camera more reflective, but the implementation in Cycles seems to have a few Bugs.

It seems like even according to Disney, this isn’t meant to be entirely physically accurate. If you want close to accurate, the specular value shouldn’t change from the default value. The energy conservation isssue is concerning though, the fresnel effect should only change the mix between specular and diffuse reflections.

what is offputting is, thjat is only happens in cycles and the effect isn’t there, when roughness is at 0.5. It only occurs when movint towards 0 or 1 roughness and at 0 specular and 0 roughness, it even makes the rims darker, so there seems to be a bug…

Specular adjusts specular reflectance at F0 for dielectrics, but despite the mapping being linear (0-1) in the UI, it correlates to something like a 2% - 8% raw value being fed into the renderer, as values outside of this range don’t exist for dielectric surfaces found in the real world. If the UI lets you go outside of 0-1, you’ll be getting physically undefined behavior so I wouldn’t be surprised to see energy conservation go out the window.

Energy should be conserved if specular stays within a linear range.

FWIW, specular is really only used in the cases of materials like water, rubies, gemstones, prisms, and other related materials. 0.5 (correlating to ~4%) is very close to correct for the vast majority of dielectrics.

Metals do not use the specular attribute. Since their specular reflectance varies by wavelength, it is controlled through the base color node.

Another note is that default GGX does lose energy at increasing roughnesses if not properly compensated. Multi-scatter GGX fixes this issue. I haven’t tested Blender to see if they are compensating for high-roughness GGX energy loss or not, but try the multi-scatter GGX if you have problems.

Edit: Just tried and regular GGX loses energy like crazy. Full metal, white env, adjust roughness to see. Use multi-scatter. Even though multi-scatter seems to lose energy as well…