"Principled v2" feedback/discussion thread

I would need an Apple Silicon supported branch.

Here’s a version of the Principled v2 branch for Apple Silicon. It may be a bit buggy, both from in-development code, plus some janky things I did to build it. Note: This build is based on the Principled v2 branch from 5ish months ago. This means you will be missing features that were changed or added in Cycles from the last 5 months.

Unfortunately, this crashes every time I open. No worries. I’ll wait until it lands in master :slight_smile:

I’m just curious, given that PV2 is now being scheduled for 4.0, not knowing how far off that is, would it be a feasible thing to at least take the energy conserving code that’s currently working and use that in an updated current Principled BSDF? Many of us are anxious to see this enter production given the importance of energy conservation in modern renderers.

Hi! Mind sharing where you read that it is now schedule for v4? I had high hopes for it to come in v3.6 :cry:

1 Like
2 Likes

Ah I see. Thank you for your reply. Cheers!

The 4.0 release schedule begins in little less than two weeks already. 4.0 - blender - Blender Projects Although the final release won’t be before November, test builds will be available as usual already before.

4 Likes

The new code for energy conservation will replace the current code for the better.
But you can render now with energy conservation using GGX Multiscatter

No, I’m not seeing that multiscatter GGX differs much from GGX in 3.5, at least in this example. I have the last build with PV2 from about 5 months ago and when compared, PV2 clearly shows energy conservation going on, whereas GGX and mGGX are pretty much the same.

3 Likes

I can’t tell you much. What should I see?

Look at the tops of the yellow, white and blue slabs. The GGX and mGGX versions are too bright, because the glossy specular reflections are simply added to the underlying diffuse component and so they violate energy conservation. The PV2 looks darker which is correct because of the albedo scaling, PV2 only lets energy to the underlying diffuse that isn’t reflected from glossy. Look especially at the white slab with the sphere sitting on top. Given the incidence angle it reflects too much light with GGX/mGGX.

1 Like

I think that is the effect of enhanced fresnel calculations. When I hear energy conservation (regarding GGX multiscatter) I think of the uncorrect GGX behaviour that pops up when you raise the roughness, and get a darker color.

No, that’s energy preservation you’re thinking about.

Hello! Would you mind explaining the difference? In my native language they are synonyms but I don’t know all the nuances in English and I’m really curious about it. I googled it and I couldn’t find the difference in this context. Genuine curiosity here.

energy conservation - materials do not create energy
energy preservation - materials do not lose energy

5 Likes

Energy Conservation refers to a surface not reflecting more light than what comes into it. For instance, if you have a material with a Base Color, and a Specular layer on top, the Specular layer first reflects a certain amount of light, and then the base color reflects the bulk of the light in the form of diffuse reflectance. The amount of light at any point on the surface reflecting off the Specular layer can’t also reflect off the lower diffuse layer, but that’s currently what happens. This is mostly going to be noticed at higher glancing angles, at lower face-on angles with a spec value of 0.5, only about 4.25% of the light will reflect off the glossy layer so we mostly don’t notice.

What Energy Preservation does is mostly going to be noticed on a very rough specular layer, or on transparent surfaces that are quite rough. The GGX mechanism allows a loss of energy when light is back scattered off microfacets since it only reflects one. Multiscatter GGX fixes this loss by scattering multiple times, but it’s slower. I believe this is solved in PV2 using a newer mechanism.

In general energy conservation is a much larger overall issue for surfaces that have multiple BSDF layers (diffuse+glossy, or metallic+coating).

I’ve got a video that shows examples of what’s going on if you want to watch it.

3 Likes

Ok, my apologies. Your explanation clarified it very well.
I mixed conservation/preservation and unintentionally hacked the thread :sweat_smile:

to conserve or to preserve are the same. Either way, E_out should be the same as E_in (except for whatever is absorbed due to your objects’ color).
You can most easily test for energy loss by maxing out roughness (technically you are best served with a diffuse shader in that case, but ideally GGX would sorta fall into looking diffuse by that time)
GGX will have a lot of energy loss whereas mGGX will not.

Another very good test for both energy loss and energy creation is the Furnace Test where you put a perfectly white (RGB = 111) sphere into a world that is a uniform white emitter (also RGB = 111). Ideally, your object should be invisible. If it’s darker, you are losing energy, if it’s brighter, you are gaining too much. This test should be relatively easy to do and pretty clear also for roughnesses below 1.

This should show you both the correctly handled Fresnel in PV2 and the difference that multiscattering makes for GGX

@lukasstockner97
I think keeping physically correct (saturation increase) result is reasonable especially when material relies heavily on roughness map and there are big differences in roughness values. In such cases lack of saturation increase will be very visible.
For example how to create “physically correct” plant leafs without principled node?

1 Like