"Principled v2" feedback/discussion thread

Your mockup definitely is easier to read :+1:

1 Like

Yea this is a general issue in the UI, but I wholeheartedly agree, this would go a long way for readability and is applicable to all nodes. Also would do the same for dropdowns and booleans, and perhaps unindent the panel titles as well to communicate hierarchy

I agree this is an issue. Actually beyond the text misalignment paper cut, I find it very difficult to understand the hierarchy: panel titles really look like sub-items to me. Probably because of 1. the sockets 2. the indentation 3. the highlighted slider background. That’s a lot of conventions to break:

  • TRANSMISSION
  • ALPHA
  • NORMAL
    > Subsurface

Aligning text does make it a bit better, but it would be strange for other nodes to have this indentation if they are not using panels. And it seems important that the indentation is consistant across different nodes.

How about making a kind of collapsible super socket ?

image

Basically turning the > symbol into a socket, that could also indicate if there are connections even if the panel is collapsed.

1 Like

one difference here is that the types may vary. The sheen parameters in the above, for instance, take both colors and scalars depending on the parameter.

Might not actually be a big deal tho

Right - what i imagine is a kind of higher level socket that could take different inputs. Maybe it could also be useful for Geometry Nodes (when lists/arrays are integrated?). Eventually you could plug things into it, for instance plugging a float input into the Specular super-socket would connect it to the Specular Factor, and a Vector Input to the Tangent Input.

Visually, it’s would work just like an item list (with no indentation):

  • Item 1
    • Sub item 1
    • Sub item 2
  • Item 2
    • Sub item 3
    • Sub item 4

As a more general UI concept, it would also help avoid having to set up all these kind of sockets manually:

First of all, sorry for not paying attention to this thread :sweat_smile:

Regarding the Panel UI discussion: Yeah, there’s still room for improvement. As far as I know, there’s still work planned on this, but I don’t really know enough about the UI area to contribute much there.

Good point, thanks for catching that!

To address it, there’s actually two options, and I’m not sure which one is better:

  1. Use versioning: Detect any Principled BSDF nodes with fixed (non-connected) Specular and Transmission=0, compute the corresponding adjusted IOR, set the IOR input to that, and reset Specular to 0.5. For the example case of Specular=0, this would result in an IOR of 1.0 regardless of what the original IOR was.
  2. Implement the Specular input as an IOR adjustment, not as a F0 multiplier: In the original 3.6 code, the specular reflection component completely ignored the IOR input, and instead computed its own IOR based on the Specular input. In the current 4.0 code, it uses the IOR input, but tweaks F0 based on the Specular input. Instead, we could do what e.g. OpenPBR does: Compute an adjusted IOR based on both the IOR and the Specular input, and then use that for both specular and transmission. That would naturally result in the shader using IOR 1.0 if Specular=0, it would be compliant with OpenPBR, and it would integrate nicely with e.g. the Nested Dielectrics in the future. The downside is that the Specular slider would affect refraction, which might be unintuitive.

I’m leaning towards 2), especially since we should rename the Specular input anyways to reduce confusion, so we could make it clear that this is just a legacy/alternative way to tweak IOR.

Any opinions?

Also, side note: Depending on the material, a more realistic approach to get rid of the specular highlight might be to just turn the roughness up to 1.0.

EDIT: Actually, here’s a PR for approach 2), seems to work nicely: #112552 - Cycles: Change Specular input on Principled BSDF to affect IOR - blender - Blender Projects

10 Likes

Ok, sounds intriguing. I will test this first thing in the morning. My only concern is that it functions similar to how the current 4.0A is because it’s fairly logical from a backward compatibility and forward looking approach. I had a discussion with a user who was upset that things were changing from the 3.6 methodology and I told him that he could continue to adjust spec/reflections via the specular channel if that’s what he wanted to do (and because he has a lot of old files that he doesn’t want to break in 4.0).

In 4.0 doesn’t setting the IOR to 1 create a fully diffuse material. I don’t think we need to muck things up linking the specular slider with refraction. Seems like just a slight knowledge adjustment for blender user. “instead of spec 0 IOR 0 for diffuse only”. Or am I wrong about this

Yes, setting the IOR to 1.0 will remove all specular reflections from opaque materials.

I did some more visual exploration for ways to improve the paneling to produce something that’s perhaps more visually clear.
In the attached mockup, all the text is aligned unless a section is expanded where then the sub-entries are indented. All the bars are aligned. For expanded panels, I bolded the name. To me that’s what lets me glance at the panel and know there’s an active area of the node. It’s where I’ve put my attention and so the expansion is highlighted until I collapse it.

For expanded entries, I removed the redundant section name since for instance, Subsurface is states twice in a row, one being a section marker the other a functional entry whose purpose is actually scalar, so I’ve called that Intensity.

I would also remove the darkening behind expanded entries and would use the same background color throughout. I think the darkening just add visual clutter.

7 Likes

One other note about the top down organization that came to mind as I think out loud here. Could it make sense to order things like this:

  1. Core BSDF functions (base color, metallic, roughness, etc.).
  2. Sheen
  3. Coat
  4. Specular
  5. Emission
  6. SSS

My thought process is that since from a functional standpoint each of these material layers sits above or below each other from a reflectance standpoint, why not try and order them that way in the node? Strictly speaking you wouldn’t put the core BSDF at the top, but I think those are very handy up there. Otherwise the ordering seems haphazard to me.

It also makes me wonder why we couldn’t also put those core BSDF functions at the top inside their own panel and call it something like “Base”, with it being expanded by default.

1 Like

@Christopher_Tyler There seems to be two discussions going on here.

  1. How should the panels UI look? This is unrelated to the Principled BSDF and is instead a general UI discussion. Maybe @LukasTonne or someone else (@pablovazquez or @dfelinto) could create a UI feedback thread for panels and the ideas can be shared over there.

  2. How the Principled BSDF should take advantage of panels. This discussion is about the Principled BSDF “v2” work and should probably take place in this thread.


I proposed a similar idea in #112314 - Add panels to Principled BSDF node - blender - Blender Projects. Order the panels based on their layering inside the Principled BSDF.

Lukas Stockner liked the idea, but didn’t have strong opinions. Brecht didn’t have any strong opinions.

So I went with the order I did (the current ordering in main) because it mostly lines up with the layering inside the shader, and the node still looks visually pleasing.

There is still time for the order to be changed, so if people have strong opinions about what order they want, it can be changed.


Note: My order is backwards compared to yours. Here is my reasoning:

Users will mostly work from the top of the node downwards. So we should order the panels like that. Have the base layers of the material (Diffuse, Metal, Transmission, Subsurface) at the top of the node, and the top layers of the material at the bottom of the node (Specular, Coat, Sheen). That way as the user goes from the top of the node down to the bottom, they are layering materials on top of each other in the order they progress down the node.

Emission should sit between Specular and Coat. But I placed it at the bottom due to the “Visually pleasing” thing I mentioned earlier.

5 Likes

Agreed, a separate thread for the UI would be useful.

1 Like

I’m just curious, there a build with this change for testing?

Yo, got a few question and thoughts about the subsurface scattering updates :slight_smile:

Having a Subsurface and a Subsurface Scale slider feels like both of them are doing the same thing, except they are not. From my small testing the Subsurface slider sort of “fades” between whatever subsurface you have to just a default diffuse shader, while the Subsurface Scale slider actually scales it in a more physically correct way. Is my assumption correct? Because if that’s the case I think it should be more clear somehow what slider one should use if you want a more physically correct material.
It kind of feels like the Bump node where you really shouldn’t use the Strength slider since it just “fades” between full bump and no bump which is not the right way to do it, it just looks bad no matter how you arbitrary change that slider, and unfortunately almost everyone still uses that slider because it’s labelled in such a way that people think that’s the one to use (and also since you generally have to set the Distance to very low values to have any real effect since this value is in meter (which is not really clear either)).

And about that radius, this might be nit picking, but shouldn’t the input be an RGB one since that’s what you essentially is just multiplying the scale with in there? I mean if you change individual channels you clearly see that it is R, G and B that you are changing, not some X, Y and Z coordinate. I mean the way I use it is to just plug in a RGB node which I feel makes way more intuitive sense.

I also have a more general question about the three different SSS implementations.
Often when I use SSS I have objects that are different shell but should still act as one, so the only option for me there is to use Christensen-Burley. Not sure what the different options do under the hood, but is it possible to have all three of them being able to “melt” different shells together like this, with maybe an option to turn this feature on or off?

1 Like


sheen and emission combination
It must be so?

The Coat and Sheen layer of the Principled BSDF sit on top of the emission part.

1 Like

Inspired by the diagram created by Autodesk, here is the material layers of the Principled BSDF:


Horizontal “stacking” of components represents mixing and vertical stacking represents layering.

E.G. Diffuse and Subsurface Scattering are “horizontally stacked” meaning that you mix between them. While Specular Reflection is vertically stacked on top of Diffuse, meaning it layers on top of it.


A little bit of nuance is lost with this diagram (E.G. Emission is added to the material instead of mixed, with the exception of transparency where it’s mixed with that.)


Note: This layout is only relevant to the current state of the Principled BSDF. There are more changes coming in the future which may add more material types.

12 Likes

For people that prefer nodes, here’s a node tree representation of the layering of materials inside the Principled BSDF:

Sorry it’s not high resolution. The devtalk website automatically compresses and downscales the image. Here’s a link to a high res version of the image on Imgur: Imgur: The magic of the Internet

Note: This layout is only relevant to the current state of the Principled BSDF. There are more changes coming in the future which may add more material types, or use inputs in a different way.

20 Likes

Hello!
If we are grouping material options to respective panels, shouldn’t subsurface method move to subsurface panel?

2 Likes