Three Different icons to hide objects in Viewport. Why?

Blender has three buttons that do the same thing.
A tick (Exclude from Render layers) on Collections, an eye (hide), and a screen (Disable in viewports).
Why exactly? Why can’t it just be a single “hide in viewport” button instead? In what occasions it is required to have one button on, but not the other?

One difference i’ve seen between them is that the Tick also disables rendering (In other words, excludes from the render layer)… So why not use the “Disable in render” button instead? Render layers could contain the status of this button instead… Though they contain the status of the eye icon… weird. Why do collections have all three of these “hide” icons?

For the user, the “Disable in viewport” button doesn’t seem any different than the eye button, except that you can’t hide/unhide with “H” or “Alt+H”… Couldn’t find a difference between them apart from that.
I assumed it has something to do with excluding an object from physics simulation calculation, but nope… no difference there either…

I’ve been using blender since ~2.4, and it only had the one “hide” button before 2.8, and that worked completely fine.
I think it would make perfect sense if this was simplified and only the eye icon was kept, and It also did all the things the other two did (if there’s a difference… but i couldn’t find it).
Perhaps collections could keep the “Tick”, as it worked like that on layers before collections were a thing… But then there seems to be no point in having the eye, the monitor, and the disable in renders buttons for them too…

Imagine an object, that you use as an boolean object for the boolean modifiyer of an other object. You always want to see this object in the viewport, because your animating it for example. But you never want to see this boolean object in the final render so you disable it in the render (camera icon). Now you work on an other part of you project and the boolean mod slows you viewport down and you want to disable the boolean object, what you can do by clicking the display icon (but the boolean will still work in the final render). And when you just want to make it invisible but do not want to disable it’s effects on other element of you project, you just switch the eye icon.
When you work on bigger projects you will understand the importance of these features.

I completely get why there are two different icons for “Hide in viewport” and “Hide in renders”.
My issue is with there being three “Hide in viewport” icons that seemingly do the same thing.

So the “Screen” icon disables modifiers, where this object is linked to? All I ever do is disable the modifiers… if so, why does it also hide the object, and not called “Disable in modifiers”?
Ok, maybe such a function is useful if there are multiple objects with modifiers that all link to that one object… Pressing one button is faster than disabling multiple modifiers… But just checked. Nope. It doesn’t do that. It just hides the object.

Modifiers used to have the eye icon instead of the screen icon. No idea why that’s changed. It does the exact same thing!

The screen icon does not disable modifiers, that was just one example of many things it does.
The names allready tell you each use:
Disable in viewport (disable the funktion + make invisible)
Hide in viewport (only make invisible)
Disable in renders (hide + disable in renders)
As I said: When you work on realy complex scenes you’ll see the use of these differences.
The screen by the way does not disable the modifier! It disables the object that is used for the mod…

But however I don’t understand the problem…when you don’t see any sense to these icons you can just not use them :slight_smile:

“Disable in viewport (disable the funktion + make invisible)”
What function?.. All it does is make the object invisible. Just like the eye icon does… And just like the tick icon does (except that it also disables the collection in renders… which is what the “Disable in renders” icon does).

I do make big projects and I do use the “Hide” and “Hide in renders” icons a lot.

I have collection with physic objects - low poly cloth, collidiers etc. These objects drive meshes in other collections which I want to render. I need those physic objects to be hided but still do their job. So I hide physic collection in viewport and in render but leave “display” button on, so they are invisible but still working.

The physics work the same whether you press the eye icon or the screen icon. I checked. No difference.

The screen : is a property of the object. Get brought along when you link in an asset (such as a character). Is either on or off in every place the object/collection is used.

The eye : is a property of the viewlayer, targeting the object/collection. That means it acts as a sort of visibility override, on a per-viewlayer basis. This makes it so you can have different viewlayers with different objects to work with.

oh. I see… It worked the same, because the frames are cached.
But when it’s not cached, when the eye icon is used, the physics simulation calculations are still happening, but if it’s the screen icon, it doesn’t…
Would make sense then to call that icon “Disable physics/animation”, and it doesn’t make sense that it hides the object… Makes more sense to use the eye icon for that…

… Though this does not apply to to rigid body physics??? Eye icon, or screen icon, same result…

Hm. Just checked if I disable physic collection physic kinda working, if I disable collection containing colliders cloth don’t react to collision objects on that collection.

Sorry: I must admid, that I mixed somthing up here: The Disable in Viewport does not effect things like boolean objects like you said FreeMind…that’s strange because I’m sure I have used it that way last year in a terribly complicated scene for a client.

…but it absolutely would make sense to make the button also effect things like boolean objects :disguised_face:

“Eye icon is an override for the specific view layer” explains a lot.
Though, to me, this design seems to be a bit of a mess… Back when the screen icon didn’t exist, what couldn’t you do that you can do now?

Perhaps they could be renamed to make more sense:
Eye Icon - Item Viewport Visibility override for view layer
Screen Icon - Item Viewport visibility.

Well… Why have visibility as an object property at all?.. It can simply be a view layer property and that’s it… It’s just for the viewport anyway.
And then have a button “Disable All physics”, which would do the one extra thing the screen icon does…
Funny thing is, disabling physics uses the eye icon in the physics tab!

I have feeling that disable in viewport kinda bugged. Cause it’s seems like physic aren’t disabled completely even if there isn’t cache physic is working, but without collisions. At least i have such behavior right now. It’s strange…

I tryed it now with a particle emitter an a collision object. You can turn of the collision object with disable in viewport. That seems useful to me. But as CYNIC78 said the cache has to be erased perfectly for it to work. Cache clearing in some cases doesn’t work well in blender on general…

Nice discussion, I learnd a lot, thanks :slight_smile:

Found another thing that the screen icon can do, that the eye icon can’t: You cannot animate the eye icon.
No idea why.

I think there is no need to animate the eye icon, becuase the effect of invisibility is allready inclouded in the disable in viewport…or not?

It’s not tied to the animation system precisely because it is viewlayer-dependent : if you were to control other parts of your scene through this property, (using drivers for instance) and suddenly you went and switched viewlayers, all of that wouldn’t work anymore, right ? because the visibility state of your object changed. It’s not a “reliable” property, you should see it as a convenience function to locally hide objects in order to work more comfortably.

I completely agree, this whole thing wasn’t thought-through. The first clue should be that everybody keeps asking the same question (and rightfully so) about the eye and the monitor. Tooltips and documentation should be improved at least. Also we now have an overrides system in place that could do exactly this : override visibility (or anything else, imagine that) on a per-viewlayer basis.

The way I see it, the issue is a bit wider : there is no “recommended workflow” in Blender. You have to figure out your own, but the software design does not make any specific path more obvious than the other.
See : right now collections are mostly meant for render management… but everybody wished you could move objects with them. Now you can move objects when they’re parented… but visibility is not inherited between parent and child objects ! so you’re forced to use two different systems (collections and parenting) when most of the time a single one could do the trick. Viewlayers are useful for working with a subset of your data… so naturally you think of using them for rendering, -but you can’t override materials or toggle object renderability with them ! Overrides are really cool for animation, and they mostly work, so you wish you could use them for shot variations, or even multiple shots in a single set… that calls for a cooperation with viewlayers, but overrides only work at the scene level ! Etc…

1 Like