Collections visibility settings - Design Task #53493

Closed
opened 2017-12-06 22:02:33 +01:00 by Dalai Felinto · 14 comments

Problem


There are few scenarios to consider when thinking about the collection options:

Instanced group

  • We have an instanced group, but we want the duplicator (the empty) to be invisible, while the instanced object to be visible.

Dupli vertices

  • We have dupli vertices, but we want only the duplicated object to be visible.

Support simulation objects

  • Some elements need to be part of a simulation (e.g., collision boxes, or hair emitters), yet invisible in the final render.

Reference objects

  • We have objects in the scene that should never be rendered in the final image, yet they are important as reference for modelling and animation.

Invisible to the camera

  • Some objects must be invisible to camera rays (e.g., walls).

Light that contributes to the scene but is not visible

  • We want lamps to lit the scene, however we don't want to see their own drawing and manipulators in the viewport.

scenarios.jpg

Proposed solution


  • Collection objects are either enable and visible or invisible altogether.
    • No option to exclude from light pipeline (e.g., object that is invisible but still cast shadows or is in light probes). So if we hide an object, it is out of the pipeline. Even for lamps.
      • Imagine an invisible collection with a lamp and an override to change the lamp energy. Should the override affect the lamp even if the collection is invisible? Better to keep things clear and no longer treat lamp as a special case.
    • The distinction between "enabled/disabled" and "visible/invisible" is no longer relevant. So we unify them under the "enable".
      • The reason for the original separation was:
        • We wanted to allow users to hide objects if the last evaluated collection with that object was hidden (see D2878).
        • Lamps and mesh objects could cast shadow/light to the scene even if hidden (see D2851)
      • Without these patches (since they were not well received), there is little motivation for the separation.
    • No different visibility flag for render and viewport.
      • We can still have a separation between F12 and viewport, but unless we enforce hide_render in the object level, which I don't think we should. to have it in the collection level makes little sense.
  • Hair emitters, duplicators, and similar will need a per-object option to be invisible.
    • The option should be the same for all these dupli-parents, for consistency.

Groups


There is still one scenario where the visibility control for render and viewport may be required: group instancing.
When you instance a group and have a highpoly object to be used for the final render, but also a lowpoly to be used only for the viewport.
For this case (group collections) we will implement a viewport and render collection options.

Example of solution applied to the presented problems


See the scenarios above and their respective image for reference.

Collection override for workspace "Only Render"

  • We add an override for the "Only Render" option, which will be moved to workspace.

Use object duplicator visibility option to hide duplicator

  • Technically we could use this option for (1) as well.

Separate simulation support objects from the rest of the simulation

  • Create a collection for the collision-only objects, and another one for the rest of the simulation. And control their visibility differently in the view layer used for the final render.
  • You can also have different collections, one with only the objects for the final render, and one with all the simulation objects. You then use a different collection (or same collections with different visibility options) for the simulation view layer and the view layer used for the final render.

Different collections

  • Separate hidden collections for reference objects or if they are linked in, and instanced as a group, use static override to edit the group collections visibility.

Disable camera ray visibility for the wall objects

  • For engines that support it only, however we can extend all the built-in engines to do so.
  • Same as 1 (collection override for workspace "Only Render")
Problem **** There are few scenarios to consider when thinking about the collection options: # Instanced group * We have an instanced group, but we want the duplicator (the empty) to be invisible, while the instanced object to be visible. # Dupli vertices * We have dupli vertices, but we want only the duplicated object to be visible. # Support simulation objects * Some elements need to be part of a simulation (e.g., collision boxes, or hair emitters), yet invisible in the final render. # Reference objects * We have objects in the scene that should never be rendered in the final image, yet they are important as reference for modelling and animation. # Invisible to the camera * Some objects must be invisible to camera rays (e.g., walls). # Light that contributes to the scene but is not visible * We want lamps to lit the scene, however we don't want to see their own drawing and manipulators in the viewport. ![scenarios.jpg](https://archive.blender.org/developer/F1321780/scenarios.jpg) Proposed solution **** - Collection objects are either enable and visible or invisible altogether. - No option to exclude from light pipeline (e.g., object that is invisible but still cast shadows or is in light probes). So if we hide an object, it is out of the pipeline. Even for lamps. - Imagine an invisible collection with a lamp and an override to change the lamp energy. Should the override affect the lamp even if the collection is invisible? Better to keep things clear and no longer treat lamp as a special case. - The distinction between "enabled/disabled" and "visible/invisible" is no longer relevant. So we unify them under the "enable". - The reason for the original separation was: - We wanted to allow users to hide objects if the last evaluated collection with that object was hidden (see [D2878](https://archive.blender.org/developer/D2878)). - Lamps and mesh objects could cast shadow/light to the scene even if hidden (see [D2851](https://archive.blender.org/developer/D2851)) - Without these patches (since they were not well received), there is little motivation for the separation. - No different visibility flag for render and viewport. - We can still have a separation between F12 and viewport, but unless we enforce hide_render in the object level, which I don't think we should. to have it in the collection level makes little sense. - Hair emitters, duplicators, and similar will need a per-object option to be invisible. - The option should be the same for all these dupli-parents, for consistency. Groups **** There is still one scenario where the visibility control for render and viewport may be required: group instancing. When you instance a group and have a highpoly object to be used for the final render, but also a lowpoly to be used only for the viewport. For this case (group collections) we will implement a viewport and render collection options. Example of solution applied to the presented problems **** *See the scenarios above and their respective image for reference.* # Collection override for workspace "Only Render" * We add an override for the "Only Render" option, which will be moved to workspace. # Use object duplicator visibility option to hide duplicator * Technically we could use this option for (1) as well. # Separate simulation support objects from the rest of the simulation * Create a collection for the collision-only objects, and another one for the rest of the simulation. And control their visibility differently in the view layer used for the final render. * You can also have different collections, one with only the objects for the final render, and one with all the simulation objects. You then use a different collection (or same collections with different visibility options) for the simulation view layer and the view layer used for the final render. # Different collections * Separate hidden collections for reference objects or if they are linked in, and instanced as a group, use static override to edit the group collections visibility. # Disable camera ray visibility for the wall objects * For engines that support it only, however we can extend all the built-in engines to do so. - Same as 1 (collection override for workspace "Only Render")
Author
Owner

Changed status to: 'Open'

Changed status to: 'Open'
Author
Owner

Added subscriber: @dfelinto

Added subscriber: @dfelinto
Dalai Felinto changed title from Collection Settings - Proposal to Collections visibility settings 2017-12-06 22:07:26 +01:00
Dalai Felinto changed title from Collections visibility settings to Collections visibility settings - Design Task 2017-12-06 22:09:15 +01:00
Dalai Felinto self-assigned this 2017-12-07 01:20:56 +01:00

Added subscriber: @spockTheGray-4

Added subscriber: @spockTheGray-4
TysonTom commented 2017-12-07 09:18:08 +01:00 (Migrated from localhost:3001)

Added subscriber: @TysonTom

Added subscriber: @TysonTom
TysonTom commented 2017-12-07 09:18:08 +01:00 (Migrated from localhost:3001)

This comment was removed by @TysonTom

*This comment was removed by @TysonTom*

Added subscriber: @ideasman42

Added subscriber: @ideasman42

Added subscriber: @mont29

Added subscriber: @mont29

Overall looks sensible to me…

Some questions/remarks:

  • "Only Render" means the object participates to render result (be it cycles, eevee, etc.), but not the overlays in 3DViewport, right? So int the end, per object, we'd have an absolute ON/OFF status (from 'compilation' of enabled/disabled flags from all collections an object lays in), and an "Only Render" option that sort of amends the ON status, if I understood correctly?

  • So only #5 (the invisble-to-camera one) actually needs a custom, specific flag & handling?

  • About #3: Not sure we need two collections for the physics in fact… Wouldn’t that collection layout do the expected work? That way, we can still use a single collection for a whole simulation (as far as simulation code is concerned).
    One collection gathering all objects involved in simulation, both visible and invisible ones, set todisabled**. This is the collection you feed to simulator.
    One collection gathering all visible objects involved in simulation, set toenabled**.

Overall looks sensible to me… Some questions/remarks: * "Only Render" means the object participates to render result (be it cycles, eevee, etc.), but not the overlays in 3DViewport, right? So int the end, per object, we'd have an absolute ON/OFF status (from 'compilation' of enabled/disabled flags from all collections an object lays in), and an "Only Render" option that sort of amends the ON status, if I understood correctly? * So only #5 (the invisble-to-camera one) actually needs a custom, specific flag & handling? * About #3: Not sure we need two collections for the physics in fact… Wouldn’t that collection layout do the expected work? That way, we can still use a single collection for a whole simulation (as far as simulation code is concerned). **One collection gathering all objects involved in simulation, both visible and invisible ones, set to**disabled**. *This is the collection you feed to simulator.* **One collection gathering all visible objects involved in simulation, set to**enabled**.

Added subscriber: @fsiddi

Added subscriber: @fsiddi
Author
Owner

@mont29:

"Only Render" means the object participates to render result (be it cycles, eevee, etc.), but not the overlays in 3DViewport, right?

Correct. Exactly how we do in 2.79.

So in the end, per object, we'd have an absolute ON/OFF status (from 'compilation' of enabled/disabled flags from all collections an object lays in), and an "Only Render" option that sort of amends the ON status, if I understood correctly?

We will have no built-in "only render" option, but let users add a dynamic override for this if they need this granular control per collection.

So only the #5 (the invisible-to-camera one) actually needs a custom, specific flag & handling?

I'm not talking about a new flag here. Instead, talking about sticking to what we already have (per-object engine specific camera ray visibility control). Eevee can use that as well if we want.

  • About #3: Not sure we need two collections for the physics in fact… Wouldn’t that collection layout do the expected work? That way, we can still use a single collection for a whole simulation (as far as simulation code is concerned).
    One collection gathering all objects involved in simulation, both visible and invisible ones, set todisabled**. This is the collection you feed to simulator.
    One collection gathering all visible objects involved in simulation, set toenabled**.

There is more than one way to skin a cat. IF users want to have a single collection for the entire simulation, what you propose is perfectly sound. Otherwise they can go with what I suggest. But I will update the task to include your idea.

@mont29: > "Only Render" means the object participates to render result (be it cycles, eevee, etc.), but not the overlays in 3DViewport, right? Correct. Exactly how we do in 2.79. > So in the end, per object, we'd have an absolute ON/OFF status (from 'compilation' of enabled/disabled flags from all collections an object lays in), and an "Only Render" option that sort of amends the ON status, if I understood correctly? We will have no built-in "only render" option, but let users add a dynamic override for this if they need this granular control per collection. > So only the #5 (the invisible-to-camera one) actually needs a custom, specific flag & handling? I'm not talking about a new flag here. Instead, talking about sticking to what we already have (per-object engine specific camera ray visibility control). Eevee can use that as well if we want. > * About #3: Not sure we need two collections for the physics in fact… Wouldn’t that collection layout do the expected work? That way, we can still use a single collection for a whole simulation (as far as simulation code is concerned). > **One collection gathering all objects involved in simulation, both visible and invisible ones, set to**disabled**. *This is the collection you feed to simulator.* > **One collection gathering all visible objects involved in simulation, set to**enabled**. There is more than one way to skin a cat. IF users want to have a single collection for the entire simulation, what you propose is perfectly sound. Otherwise they can go with what I suggest. But I will update the task to include your idea.
Author
Owner

Removed subscriber: @TysonTom

Removed subscriber: @TysonTom
Author
Owner

Added subscribers: @pablovazquez, @PawelLyczkowski-1

Added subscribers: @pablovazquez, @PawelLyczkowski-1

Added subscriber: @antoniov

Added subscriber: @antoniov

Changed status from 'Open' to: 'Archived'

Changed status from 'Open' to: 'Archived'
Sign in to join this conversation.
No Label
Interest
Alembic
Interest
Animation & Rigging
Interest
Asset Browser
Interest
Asset Browser Project Overview
Interest
Audio
Interest
Automated Testing
Interest
Blender Asset Bundle
Interest
BlendFile
Interest
Collada
Interest
Compatibility
Interest
Compositing
Interest
Core
Interest
Cycles
Interest
Dependency Graph
Interest
Development Management
Interest
EEVEE
Interest
EEVEE & Viewport
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, Assets & 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
Virtual Reality
Interest
Vulkan
Interest
Wayland
Interest
Workbench
Interest: X11
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
Core
Module
Development Management
Module
EEVEE & Viewport
Module
Grease Pencil
Module
Modeling
Module
Nodes & Physics
Module
Pipeline, Assets & IO
Module
Platforms, Builds & Tests
Module
Python API
Module
Render & Cycles
Module
Sculpt, Paint & Texture
Module
Triaging
Module
User Interface
Module
VFX & Video
Platform
FreeBSD
Platform
Linux
Platform
macOS
Platform
Windows
Priority
High
Priority
Low
Priority
Normal
Priority
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
8 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: blender/blender#53493
No description provided.