"Principled v2" feedback/discussion thread

Any updates on this? :smiley:

4 Likes

Try setting the shader’s tangent using a tangent node.

3 Likes

Ok, that’s exactly what I was looking for. I had no idea that Tangent input controls anisotropy. Thanks!
Maybe it would make sense to put tangent next to other anisotropic controls for Principled v2?

4 Likes

I still like the old ui’s short horizontal arrangement, open that item only to show the content belonging to the inside。

1 Like

Hi,

Quick update: Sorry for the silence, I’ve been quite busy over the last few months and haven’t had much time to work on Principled v2.
I’m back in action now, though, so expect things to happen again :slight_smile:

I just held a presentation at BConf 2022 about Principled v2 - background, theory and current state. You can find the slides here, I’ll link the video once it’s up.

30 Likes

Great presentation Lukas, thanks for all the hard work through school.

I’m glad to see that thin film went through “could be cool” to “oh yea, let’s do that”. As well as nested dialectrics being decently considered too.

The project is in good hands. Cheers

2 Likes
13 Likes

New version of the branch is online, including basic iridescence support - no metal yet, just dielectric specular and transmission support.

Here’s a soap bubble as an example (1100nm thickness, Film IOR 1.33, Base IOR 1.0):

39 Likes

Thank you for working on this.

I tested the Principled v2 branch earlier today and experimented with the iridescence just to see how it worked. And one thing stood out to me when testing it. It’s not clear to new users that the film thickness is in nano meters and as a result it may need to be turned up to large values to get noticeable results.

I’m not sure whether you want to add a “nm” unit to the input field or if it’s better to document this in the Blender manual (once this change is merged with master)


The “Thin Film” settings are also exposed if you use the old GGX and Multiscatter GGX Principled BSDF models while doing nothing. I can’t remember if your plan is to get rid of the old models entirely or keep them around for “compatibility”. Hence why I’m reporting the issue.

2 Likes

Thanks for your great work. Would you like to go to the site blenderartists and create a post testing Principled V2 so that artists can share the images they render with your fork?
I have done some tests, do you see if they are helpful?

2 Likes

I’m unsure if the following is expected or not but high-roughness values are resulting in very dark materials? I don’t have a good external renderer to compare against but the MaterialX viewer application does seem to think similar materials should not be as dark.

Order of materials: Metal, Metal v2, Metal+Clearcoat, Metal+Clearcoat v2, Diffuse, Diffuse v2
Sweep Roughness from 0 … 1 in 0.125 increments:

Iridescence also seems to be problematic at higher roughness:

3 Likes

Hi everybody, where can we find the last build of principled v2 ? Thanks !

I’d like to know that too. Can’t find it in the branch builds or over at GraphicAll. It probably still needs to be built for public downloading?

I hope the new Principled V2 build is merged with the latest master build of Blender, so we can use Principled V2 together with Path Guiding.

As a user feedback to this video,

I think we should keep old principled bsdf for sure ,or maybe a dropdown to choose principled v1 vs v2 on top of other dropdowns related to ggx multiscatter ggfx or just naming new princpled bsdf as v2 is okay too, many softawares keep old one with naming legacy so we can also do that too

2 Likes

After reading the concerns about consistence with other nodes , dissaperance of sockets etc. So this just an alternative solution if design of collapsable menus will be an issue.

For instance, in the collapsable header example in old mockup, adding extra header title will cause longer node if someone uses all the features without collapsing any header, so headers will occupy even more space when they are not collapsed.

I think long node wont be too bad (or not much) by this olternative approach:

Princpled BSDF can be long by default when new material is created,
But on N properties panel , there can be extra options as we always had (EX: displacement type bump or true displacement etc) , these extra options can exist to disable or enable some parts of principled bsdf regarding anisotrophy, , transmission, emission, clearcoat, sheen , subsurface scattering , so, those dropdown headers for different sections can instead be checkbox on properties panel, then users can reduce principled bsdf as they want, so it wont cause any inconsistency compared to other nodes in UI there will be less confusion and it will also not make unnecessary space if we use other alternatives like PRORENDER’s box enabling approach to add new options or collapsable extra grouping headers making it longer in Octane,

Also, those settings can be preserved while copying pasting principled bsdf that can make things easy.

Plus, the area regarding the checkboxes for extending or shortening principled bsdf can have presets functionality (like in properties render setting panels for light paths,) so for example preset is dialectric, u choose it there only checkboxes related to principled bsdf are checked and this way blender can come with presets for making users be more aware of which sections in principled bsdf they need for a specific material type

Or this option might also be placed on NODE tab on N panel rather than OPTIONS tab on N panel if it fits better

(Note: In the edited screenshot images I provided, I know its not new principled BSDF, I just tried to explain the idea, I didnt use the new branch to show this)

If you are on windows system, you can use this one I built temporarily.

2 Likes

It will most likely become available on Blender Builds - blender.org in the near future.


The Principled v2 Branch of Blender has been updated to be based on the latest master and now has Path Guiding built in.

1 Like

Good point, I’ve added a wavelength unit type (also applies to the Wavelength node).

Fixed.

Looks good, thanks! Seems like the thickness is not consistent, though, I’ll look closer into that.

Thanks, should be fixed now.

Also fixed.

I’ve started a build on the buildbot containing the fixes above.

17 Likes

For some reason when inputting a value with a keyboard, it uses pm not nm, so to get visible results you need to type something like 500 000.

Also there is no longer a separate transmission roughness control. Do you still plan to add it? It would be quite useful when making certain frosted glass materials.

When rendering with the Metal GPU backend, there are some errors that result in the kernel not compiling, and some warnings (which may be useful to investigate). You can find them below. Sorry for not having file names and line numbers.

Just for reference, this is a commit from an Apple Engineer fixing the pointer type must have explicit address space qualifier error in Cycles when initially adding Metal to Cycles: rBa0f269f682da

Error messages
program_source:120817:53: error: pointer type must have explicit address space qualifier
    float cosTheta1, float eta1, float eta2, float2 *R, float2 *phi)
                                                    ^
program_source:120817:64: error: pointer type must have explicit address space qualifier
    float cosTheta1, float eta1, float eta2, float2 *R, float2 *phi)
                                                               ^
program_source:130633:48: error: pointer type must have explicit address space qualifier
                                         float *reflect_pdf)
                                               ^
program_source:132563:70: error: pointer type must have explicit address space qualifier
sheen_v2_eval(float3 N, float3 V, float3 L, float3 H, float r, float *pdf)
                                                                     ^
program_source:145512:52: error: pointer type must have explicit address space qualifier
                                               int *offset)
                                                   ^
program_source:145564:49: error: pointer type must have explicit address space qualifier
                                            int *offset)
                                                ^
program_source:120517:7: error: value of type 'bool __attribute__((ext_vector_type(3)))' (vector of 3 'bool' values) is not contextually convertible to 'bool'
  if (F82 == one_spectrum()) {
      ^~~~~~~~~~~~~~~~~~~~~
program_source:120836:10: error: no matching function for call to 'sqr'
    *R = sqr(make_float2(rx, ry));
         ^~~
program_source:3564:26: note: candidate function not viable: no known conversion from 'float2' (vector of 2 'float' values) to 'float3' (vector of 3 'float' values) for 1st argument
ccl_device_inline float3 sqr(float3 a)
                         ^
program_source:4441:28: note: candidate function not viable: no known conversion from 'float2' (vector of 2 'float' values) to 'const float8_t' for 1st argument
ccl_device_inline float8_t sqr(const float8_t a)
                           ^
program_source:6520:25: note: candidate function not viable: no known conversion from 'float2' (vector of 2 'float' values) to 'float' for 1st argument
ccl_device_inline float sqr(float a)
                        ^
program_source:120871:15: error: no matching function for call to 'sqr'
  float2 Rs = sqr(T121) * R23 / (one_float2() - R123);
              ^~~
program_source:3564:26: note: candidate function not viable: no known conversion from 'float2' (vector of 2 'float' values) to 'float3' (vector of 3 'float' values) for 1st argument
ccl_device_inline float3 sqr(float3 a)
                         ^
program_source:4441:28: note: candidate function not viable: no known conversion from 'float2' (vector of 2 'float' values) to 'const float8_t' for 1st argument
ccl_device_inline float8_t sqr(const float8_t a)
                           ^
program_source:6520:25: note: candidate function not viable: no known conversion from 'float2' (vector of 2 'float' values) to 'float' for 1st argument
ccl_device_inline float sqr(float a)
                        ^
program_source:120878:14: error: no matching function for call to 'average'
  float3 I = average(R12 + Rs) * thin_film_sensitivity(0.0f, 0.0f);
             ^~~~~~~
program_source:3589:25: note: candidate function not viable: no known conversion from 'float2' (vector of 2 'float' values) to 'const float3' (vector of 3 'float' values) for 1st argument
ccl_device_inline float average(const float3 a)
                        ^
program_source:4451:25: note: candidate function not viable: no known conversion from 'float2' (vector of 2 'float' values) to 'const float8_t' for 1st argument
ccl_device_inline float average(const float8_t a)
                        ^
program_source:120950:23: error: pointer type must have explicit address space qualifier
    MicrofacetExtrav2 *extra = (MicrofacetExtrav2 *)bsdf->extra;
                      ^
program_source:120950:51: error: pointer type must have explicit address space qualifier
    MicrofacetExtrav2 *extra = (MicrofacetExtrav2 *)bsdf->extra;
                                                  ^
program_source:121063:21: error: pointer type must have explicit address space qualifier
  MicrofacetExtrav2 *extra = (MicrofacetExtrav2 *)bsdf->extra;
                    ^
program_source:121063:49: error: pointer type must have explicit address space qualifier
  MicrofacetExtrav2 *extra = (MicrofacetExtrav2 *)bsdf->extra;
                                                ^
program_source:130720:7: error: value of type 'bool __attribute__((ext_vector_type(3)))' (vector of 3 'bool' values) is not contextually convertible to 'bool'
  if (F == one_spectrum()) {
      ^~~~~~~~~~~~~~~~~~~
program_source:145307:7: error: value of type 'bool __attribute__((ext_vector_type(3)))' (vector of 3 'bool' values) is not contextually convertible to 'bool'
  if (tint != one_spectrum()) {
      ^~~~~~~~~~~~~~~~~~~~~~
program_source:145457:34: error: pointer type must have explicit address space qualifier
  bsdf->extra = (MicrofacetExtra *)extra;