Page MenuHome

Unify Shading settings
Closed, ArchivedPublic

Description

Blender includes a vast set of shading options that changes the appearance of the 3D View.

The Issue
The problem is that these options are scattered somewhat randomly in the UI. The main Shading menu only includes a small list of items, while others appear in the 3d View Properties (n-key).
Making matters worse, some of the settings in the n-key editor (Matcap) override the shading setting, and others only appear in Edit Mode (Hidden Wire)
When using the Blender Internal renderer, Solid Texture appears tucked away in the n-key area too.
This scattering and appearing/disappearing of shading options depending on modes is confusing, unclear, and you waste time and screen space by wading through the n-key panel to find the correct shading option. It's a mess.

Here's a concrete list of issues:

  • Hidden Wire is only available inside Edit Mode, and only when viewport shading is set to Shaded
  • Matcap is only available when viewport shading is set to Solid
  • Shadeless (Texture Flat) is only available when viewport shading is set to Texture
  • Hidden Wire, Matcap, Shadeless, Texture Solid, Backface Culling is placed far away from from the Viewport Shading menu, been though they are intricately linked
  • Viewport Shading options have very complicated relationship to one another. Many shading options only appear in certain special circumstances.

Proposed solution
Consolidate shading options into a single menu. Remove Shading panel in 3D View properties. Make shading options easy to find and understand, with clean names and icons.

Shading options differ slightly between Blender Internal and Cycles, reflected here:

Details

Type
Design

Event Timeline

William Reynish (billrey) set Type to Design.
William Reynish (billrey) raised the priority of this task from to Needs Triage by Developer.

Scott: Those are render specific options, not related to 3D View shading.

This makes sense to me.

  • For Cycles you're missing "Material" draw mode, and it also supports the "Texture Flat" and "Texture Shaded" distinction (assuming this is texture draw mode + shadeless option).
  • Hidden wireframe is not a draw mode I think, you have one object with wireframe and the others would still be shaded some way? The other objects could always be shaded solid, maybe that's ok, I'm not sure.
  • "GLSL shading" we need to find a better solution for eventually, for Blender Internal it's basically a draw mode, for the Blender Game Engine it's the shading system you use for your game.

@Brecht Van Lommel (brecht): You're right, forgot about Material shading mode.

About GLSL, perhaps it can be considered more of a preference - is it something you'd want to change while working on a project? Could be moved to prefs.

I don't quite get the thing about Hidden Wire - how do you mean the other objects will be shaded? I presume if you pick Hidden Wire, all the objects will simply use that, like so:

Wireframe:

Hidden Wire:

In the release notes there is a screenshot with the wireframe over a solid shaded object, to do retopology:
http://wiki.blender.org/index.php/Dev:Ref/Release_Notes/2.69/Modeling#Viewport:_Hidden_Wire

The option seems to only work in edit mode and only affects the object being edited.

@Brecht Van Lommel (brecht):

That's correct, that's how it works currently, but I think it should be a general setting. Most of the time, you'd want to apply to everything

If you only want it on one object, the shading override in Object Properties can be used, just as with other shading options.

That way, Hidden Wire can be used in all sorts of cases, not just for retopology, and the shading options stay nice and succinct.

@William Reynish (billrey), these are mostly all great and I completely agree on unifying things into a single menu.

Regarding Hidden Wire. The name is a bit misleading, and problems needs something more specific, but setting that aside, it only works in Edit Mode (as designed) and only works on the selected object (as designed). The reason for this is it's primarily used for retopology so that you can draw the active object over another object and see both clearly.

What you're suggesting, with multiple objects, is also a very useful feature, but they're separate. Before changing anything, I would rather work with @Campbell Barton (campbellbarton) on the Retopology Mode proposal I've been slowly working on.

Since both Hidden Wire and MatCap only work on the active object, it may be better to split the Shading menu that you've suggested above into two sections. One Global section, and one Active Object section.

Hi, Read over the post and generally like the proposal and think most important issues have been raised...

Some comments:

  • We should assume viewport drawing options wont change in behavior ... (lots of stuff relating to the viewport can be improved - but thats really another project), That is - unless we want to postpone updating the menu until other areas are refactored (think months/years).
  • Adding matcap's here could be a bit awkward- (this isnt typical menu use), but worth investigating IMHO.
  • Relationship lines are listed in one of the proposal's mockups, Not sure this fits? - its not a shading feature and IMHO belongs next to All Object Origins and *Only Render**.

I'm claiming this tasks (if someone else prefers to do, I'm happy with that too)

@Jonathan Williamson (carter2422):
You are right that Hidden Wire only works on the selected object in Edit Mode. But why would that be the case? It's a very useful shading mode, and having it only work in Edit Mode, under certain circumstances (when set to Solid) is needlessly complicated - and it's limiting too. By making it a general settings, it's both simpler and more powerful.

Currently, to use Hidden Wire, you need to do this:

  1. Select the specific object you want to see,
  2. Enter Edit Mode,
  3. Set the shading mode to Solid, and then
  4. Open the N-key panel,
  5. Turn on Hidden Wire.

5 steps!

Users need to be aware of all these cases to be able to use it. On top of that, if you want to use Hidden Wire to make it easier to clear up the display of multiple wireframe objects (probably where it's most useful), you can't do that, and you have to manually join all the objects, the go through the 5 steps again.

Making it general, and putting it in the Shading menu, it'd be one step: switch to Hidden Wire. That's it :)

@Campbell Barton (campbellbarton):
Re: Relationship Lines: Completely agree, it doesn't fit here. I went in and removed it but forgot one mockup.

Regarding change in behavior, it's somewhat linked IMO. For example, some shading settings (say,.Matcap), only work on the active object. But why would that be the case? it seems simpler and more useful for it to apply globally. Say you have a character made up of multiple objects that you want to view using matcap view. Currently you can't do that, Having Matcap only work on the selected object is both more complicated (it works different from other shading settings) and less powerful too.

If users want a special case where Object A has a different shading mode from Object B, the shading override in Object Properties can always be used.

@William Reynish (billrey), "Making it general, and putting it in the Shading menu, it'd be one step: switch to Hidden Wire. That's it :)"

That kind of thinking and philosophy is something that I feel needs to not just be applied to the shading options but throughout blender as a whole. Over all, very well said and I agree with you on the belief that its unnecessarily complicated.

The use of matcaps should probably also apply either on a global scale or via a material (thus allowing for multiple matcaps in one scene). If its through materials, it also opens up the possibility to maybe bake some of that detail into a bitmap (ala zbrush/custom maya cgfx shaders). That difference can perhaps change how its presented to the user.

Self Evaluation:

Thinking about it more, I don't really think Render Only should be part of the shading menu either. Best keep these separate, so that:

Shading: How the items are shaded
Display: Extra items on the screen, such as Relationship lines, Grid etc.

Like so:

Not entirely sure about Backface Culling - is it shading or display?

@William Reynish (billrey)

I think the Render Only should stay. It is used quite often enough to warrant the toggle being in prominent position tied to shading. Render Only could perhaps use a renaming however since there is already a "rendered" mode. Maybe "Visualize" or something along those lines, anyways thats just some feedback. Ideally, at least from my POV, I think it would be more effective to have a properties toggle that can exist in the menu itself, bringing up a floating panel similar to that of F6 after an operation is used.

For example:

This could also reduce the clutter of the side panels. Just some food for thought.

@DataDay (DataDay): I don't understand the point of that panel. What is it for, what does it solve, why is it enabled from the shading menu?

DataDay (DataDay) added a comment.EditedDec 19 2013, 2:36 AM

@William Reynish (billrey)

Quick question first? During your use of Blender, have you ever used the F6 hotkey to pull up a floating properties/editor panel? If so then this will make a bit more sense.

To answer your question, the point was to:

  • 1) show that such a method for input exist in Blender
  • 2) that not all properties or toggles need be displayed at all times, even within the N panel.
  • 3) important and often used viewport rendering options can still be in an accessible menu without sacrificing the additional controls or options that go (or could go) along with them.

My reasoning is this:
Render Only shows only what's being rendered in the viewport in real time, this includes an assortment of information, from normal maps to spec maps, there's the possibility of AO or even a background image or sky...ect, it hides verts and edges but it doesnt need to necessarily. Thus having a property box pop up can let the user say whether they only want the diffuse map to be shown in render only mode, or if they want the verts to be present. This can be used for an eventual screen grab or playblast.

In short, Render Only can expand upon much more in the way of shading options that is currently available. Since it is already used quite a bit from my understanding, and in conjunction with the shading options, keeping it in the same and easy to access vicinity seems wise.

In your mockup, you covered not just a pop up menu with viewport shader options, but the N panel as well. So with the F6 style floating window (which stays open as long as the mouse is on top of it), you can cover some of the stuff you would put in the N panel, or what could in the future be added to the properties of such a function.

It offers one alternative to solve a space and organization issue. I believe that kind of information, what the user wants displayed in the viewport, should exist within the general vicinity rather than having them hop around to different parts of the interface. Again this is just food for thought.

@William Reynish (billrey) - regarding changing behavior, Im not against changes/improvements here, my concern is scope creep - where some plan is made which includes - (eg - matcaps everywhere, hidden wire everywhere...) OK, maybe nice but this becomes larger project.

If we do that we should probably tackle the task from the perspective of planning/prioritizing viewport improvements in general rather then based on how they fit in a menu.

Hidden wire for eg, makes use of editmode face drawing, this would need many more changes to make it work everywhere.

@DataDay (DataDay) - Render Only 's purpose is unrelated to have improved viewport drawing, its purpose is to hide anything which won't be displayed in a render.

(viewport drawing can be improved at any time - thats great to work on, its just unrelated to render-only option)

DataDay (DataDay) added a comment.EditedDec 19 2013, 6:48 AM

@Campbell Barton (campbellbarton) I see..makes sense given the name then. Usage wise, it seems to act like a mode for visualization purposes. For example, thinking about how its used (maybe its just me), it works as a visual mode for texture painting and sculpting. Whats rendered in cycles or eve the internal renderer can look quite different from what the viewport displays.

What billrey is suggesting is, at least in my opinion, a good idea which can consolidate commonly used viewport shading/visualization options. You are right though, something like global matcaps and all that could and should become a separate task and weighed against other changes or development being made. Nice reminder to keep it simple/focused. =)

@Campbell Barton (campbellbarton): Fair enough, makes sense. It's just that, if some shading options apply to the entire view, while other options only apply to selected objects, that gets very confusing.

If you pick, say, Matcap (that currently only applies to selected objects), what would the rest of the objects be drawn as? Solid Shaded? But you've just selected Matcap instead of Solid Shaded :) The rest of the objects could just as well be drawn as Textured, or anything for that matter. So that's why it's somewhat linked I think.

Granted, I have no idea how the code is structure or how big a task it would be to unify these things.

Edit: As you say, we could split the task into several steps, for instance:

  1. Unify shading settings into single menu
  2. Make Matcap work globally
  3. De-couple Hidden Wire from Edit Mode, and make it apply globaly
  4. Update Shading Override (Max Draw Mode) with the same shading options as the Shading Menu

@William Reynish (billrey) - sure something like this can work. We can treat this as a first-pass to make viewport settings behave more logical (without large rewrite/refactor).

Just a note that this isnt quick/straightforward project (like updating a menu would be).

Great ideas @William Reynish (billrey)!

Matcaps totally should work global. When sculpting multiple objects most of users want to view all objects in same matcap. Also there should be option to dim a bit objects other than active, to see what we are working on.

Switching matcaps frequently is common practice because each matcap show different lighting and surface details. Choosing matcap in hidden submenu will be cumbersome so I propose to special dropdown menu button for this. Once matcap mode is set this button will spear next to shading button.

William Reynish (billrey) edited this Maniphest Task.

Here is a mockup from me regarding the display options:

Reasoning for this was already mentioned by Brecht during the Conference I think: Removing settings from the UI that are accessed only from time to time, but are persistently displayed.

Notice the "Textured" label on the Shading button - increases readability and discoverability. Fluid Designer has this label and I think it's a good idea.

The way such a popup with many checkboxes would work is described here.

A good quote regarding this from my doc: "This also mean that the interface manages itself more. Currently, this burden is placed on the user, who has to keep it tidy by opening and closing sidebars, collapsing panels and keeping them in order."

With a popup like this, it is certain that these settings will be closed when the user finished changing them. With the sidebar panel settings, the user has to think about collapsing the panels (2 of them in this case), and/or closing the n-sidebar.

In Edit mode, the Mesh Display options would be group in a similar button, labeled "Mesh Display", placed just to the right of the "Display" button. Moving into a proper layer system in the future, and removing the little square layers should give us more than enough space on the header.

No resolution or activity in over 3 months,
archiving, listed in the wiki.
Can re-open when we have time to handle this one.