Page MenuHome

Instanced objects get their viewport display color ignored (by design)
Open, NormalPublic

Description

Blender Version
Broken: 022ad416702d
Worked: 022ad416702d~

Short description of error
Instanced objects get their viewport display color ignored.

This is by design, as you can see in rB022ad416702d:

DRW: use object color from instancer

Otherwise it's impossible to set the color of instanced library objects.
Follows convention of instancer controlling draw options.

Exact steps for others to reproduce the error

My issues with the design
The original commit seems like a workaround for the fact that the override system is not implemented yet.
I find this too arbitrary and I would favour the flexibility of having a per-object granular viewport display object color instead (i.e., revert the mentioned commit).

Details

Type
Design

Event Timeline

Dalai Felinto (dfelinto) changed Type from Bug to Design.Apr 23 2019, 4:35 PM

Viewport display settings in general are inherited from the instancer, and it's really important to be able to do this for big scenes where you want to e.g. show just bounding boxes. It's arguable if object color is such a viewport display setting or not, I don't have a strong opinion on that.

To my knowledge, neither the library nor view layer override system design can efficiently handle this case. They rely on making actual copies of datablocks, but for instancing it's important that this does not happen and that instances use only little memory.

It is possible to have a lighter override system that is implemented in Eevee, Cycles and other renderers, where the extra memory cost would be just the changed properties. And as far as I know that's what the draw manager is sort of doing for this case. But the current override system design does not account for it, so it won't automatically solve this.

While this case is border-line, I think in general it makes sense to use the instencer unless there is a strong reason not to.

  • Axis & Name: don't inherit since you typically only want to see the axis of the object your instancing, applying recursively would show a lot of noise.
  • In-Front: Should be controlled by the instancer because you might want to show a prop ontop over the backdrop without having to go in an edit multiple collections to adjust something you most likely want to change temporarily at the object level.
  • Color could be either, however we already have display colors for materials, and currently color manipulation is performed on the scene selection, eg:
    • Copy color to select.
    • Select same color.

      The result of both of these actions is less useful if the colors you're adjusting aren't used.

      Object colors are useful as a way to set your own local color identifiers, if the instanced objects colors are used there isn't an obvious way to select objects and set their color, it could end up being quite complicated especially with nested groups, or impossible - for shared objects.

Note that we should check on each of these options, currently 'in front' isn't using the instancers options.

Look at my suggestion on RightClickSelect, it's looks related:

https://blender.community/c/rightclickselect/Hzcbbc/

It's about ability to set random color per:

  • Collection (all objects in same collection have same color)
  • Object (all objects have different colors, but GP layers and objects in instance have same color)
  • Object parts (objects, objects in instanced collection, GP layers have different colors (like right now))