Add panels to Principled BSDF node #112314
No reviewers
Labels
No Label
Interest
Alembic
Interest
Animation & Rigging
Interest
Audio
Interest
Automated Testing
Interest
Blender Asset Bundle
Interest
BlendFile
Interest
Code Documentation
Interest
Collada
Interest
Compatibility
Interest
Compositing
Interest
Core
Interest
Cycles
Interest
Dependency Graph
Interest
Development Management
Interest
EEVEE
Interest
Freestyle
Interest
Geometry Nodes
Interest
Grease Pencil
Interest
ID Management
Interest
Images & Movies
Interest
Import Export
Interest
Line Art
Interest
Masking
Interest
Metal
Interest
Modeling
Interest
Modifiers
Interest
Motion Tracking
Interest
Nodes & Physics
Interest
OpenGL
Interest
Overlay
Interest
Overrides
Interest
Performance
Interest
Physics
Interest
Pipeline & IO
Interest
Platforms, Builds & Tests
Interest
Python API
Interest
Render & Cycles
Interest
Render Pipeline
Interest
Sculpt, Paint & Texture
Interest
Text Editor
Interest
Translations
Interest
Triaging
Interest
Undo
Interest
USD
Interest
User Interface
Interest
UV Editing
Interest
VFX & Video
Interest
Video Sequencer
Interest
Viewport & EEVEE
Interest
Virtual Reality
Interest
Vulkan
Interest
Wayland
Interest
Workbench
Interest: X11
Legacy
Asset Browser Project
Legacy
Blender 2.8 Project
Legacy
Milestone 1: Basic, Local Asset Browser
Legacy
OpenGL Error
Meta
Good First Issue
Meta
Papercut
Meta
Retrospective
Meta
Security
Module
Animation & Rigging
Module
Asset System
Module
Asset System
Module
Core
Module
Development Management
Module
Grease Pencil
Module
Modeling
Module
Nodes & Physics
Module
Pipeline & IO
Module
Platforms, Builds & Tests
Module
Python API
Module
Render & Cycles
Module
Sculpt, Paint & Texture
Module
Triaging
Module
User Interface
Module
VFX & Video
Module
Viewport & EEVEE
Platform
FreeBSD
Platform
Linux
Platform
macOS
Platform
Windows
Severity
High
Severity
Low
Severity
Normal
Severity
Unbreak Now!
Status
Archived
Status
Confirmed
Status
Duplicate
Status
Needs Info from Developers
Status
Needs Information from User
Status
Needs Triage
Status
Resolved
Type
Bug
Type
Design
Type
Known Issue
Type
Patch
Type
Report
Type
To Do
No Milestone
No project
No Assignees
7 Participants
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: blender/blender#112314
Loading…
Reference in New Issue
Block a user
No description provided.
Delete Branch "Alaska/blender:principled-panels"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Add panels to the Principled BSDF node to organize
and reduce the size of the node.
Layout inspired by previous work from @LukasStockner
Feel free to add any other reviewers that you think should be involved (Pablo Vazquez? Dalai Felinto? Members of the EEVEE or UI team?).
Also, my time zone is roughly 12 hours out from Amsterdam. So if there's a small adjustment you want to make, feel free to make the change and just commit it.
I'm not sure if you want to wait for a fix for #112233 to be committed first before committing any UI changes for built in nodes.
Here's a look at how the layout compares.
LGTM!
I think Roughness and IOR should be in the Specular panel, with that panel first and expanded by default.
Metallic and Transmission probably as well. When there are more transmission settings Transmission can move to its own panel.
My logic behind the placement was that the default-visible options are the ones that users will typically want to adjust.
Things like Anisotropy etc. are fairly specific, so most users won't need to touch them. If we place e.g. Roughness in the Specular panel, everyone will have to open the it, which then also shows lots of "niche" options like Anisotropy.
Also, keep in mind that Roughness and IOR affect Specular, Transmission and now technically also Subsurface.
Ok, fair enough, that logic makes sense.
Does anyone have any opinions on the order of panels.
At the moment it's
Subsurface -> Specular -> Sheen -> Coat -> Emission
but the order could be changed based on how people view things.For example, the order could be based on the order of material layering in the Principled BSDF?
Subsurface -> Specular -> Emission -> Coat -> Sheen
Or the order could be based on the frequency of setting use? For example many people will continue to use the
Specular
slider to control the reflectivity of an object, even though IOR is now the main way of doing that. So maybe the order should be:Specular -> Subsurface -> Coat -> Sheen -> Emission
orSpecular -> Subsurface -> Sheen -> Coat -> Emission
We can change the order after committing. But I just wanted to quickly bring this up in case anyone had strong opinions about it.
I like the idea of ordering it based on layering, just feels intuitive to me. But I don't really have a strong opinion.
I agree the order is fine.
I've shifted Coat before Sheen to match the layering inside the Principled BSDF.
I haven't shifted emission. For me, the panel ordering feels off from a visual stand point when doing that.
I have updated the images in the comment above to reflect the changes.
Also, a fix for the hidden links is being worked on: #112326
Add panels to the Principled BSDFto Add panels to Principled BSDF nodeNow that we have panel, I think the sockets should be renamed because otherwise it would be too verbose. For example all the coat-related stuff can have the coat prefix removed, and coat and be rename as Intensity (Scale? Factor? Strength?). Emission should be rename to Color instead.
We can use
name
/identifier
for this purpose, for examplecoat.add_input<decl::Color>("Tint", "Coat Tint")
Instead of renaming Coat to Intensity, I'm thinking maybe we can have a representative socket for the panel so that you see the value even when it's collapsed, no additional Intensity bar needed. For Emission it could show the color instead. It should be technically possible. @LukasTonne @dfelinto
Weizhen Huang referenced this pull request2023-09-14 15:11:26 +02:00
The easiest way to support this would be a flag in
PanelDeclaration
to show the first contained socket as the header instead of just the name and toggle button. The drawing code would take care of drawing the socket in the panel header location, without changes to the underlying data. It would make some data redundant like the panel name and description, but that seems acceptable.Agreed. Also moving enums into panels would be good.
Unfortunately this would not work for the Python API, as for some legacy reason it's actually the name that is used in
node.inputs["Coat Tint"]
. That's something we need to resolve at some point.But even if we do, perhaps it would still be better to keep the full name, and have a mechanism to shorten it just for display inside a panel. In general for properties we tend to give them the full name without assumptions about how they might be shortened in the UI. That way the names still make sense when you look at them in isolation for keyframing, API docs, exposing the individual socket as a node group input, etc.
The simplest trick would just be to strip the panel name from the socket names automatically. It seems the most convenient, also for user defined node groups to do this automatically.
Even for this case it could be automatic and just check if name of the panel and first socket are equal.
But if it turns out control over this is needed, there could be flags for stripping prefixes and putting the first socket in the header.
I think it would be better to stick with existing UI conventions and only do this for boolean sockets.
Showing arbitrary buttons in the header raises a lot of questions and adds noise.
Hm yes, I was only thinking about how this would work in the node editor. But in panels in the properties editor it would look rather out of place, and we better keep them consistent.
Just double checking, should I shorten the names of parameters (E.G. Rename
Coat IOR
toIOR
), or is this still a design decision being discussed?There is also a issue with this. The properties editor does not display panels (@LukasTonne not sure if this was an oversight, purposeful design, or a known limitation). So if we simplify all the names, we'll end up with a confusing Principled BSDF in the properties editor like the one shown below (E.G. There's multiple
Intensity
,Roughness
, andIOR
sliders with no indication of what they control).Just as a side note. The Principled BSDF in the properties editor kind of looks messy with the pull request in it's current state. Mainly due to the
Normal
,Tangent
, andCoat Normal
parameters being mixed in with all the other parameters.We do want to shorten them, but for reasons I mentioned earlier and other reasons you found, we can't really do it by just shortening the name.
I'll look into a better shortening mechanism and improvements to the material properties editor next week.
The fix for links not showing up is merged now - I think we can just merge this as-is and handle the short-name topic (and panels in the property editor) as a follow-up?
Yes, we could merge this and refine the UI in main.
Should the SSS type menu (Random Walk, etc) be left outside the subsurface panel? does it affect anything except subsurface?
No, it would be good to put those options (or enums as Brecht mentioned) in the panel too. But currently they are managed separately from the sockets and always appear at the top of the node.
See #112591 for various panel UI improvements discussed here.