Currently in Blender, there is a need for having groups of objects that behave as a single 'cohesive' object from the users perspective. The following operations when applied to one of these object groups should apply to every object in the group treating the entire hierarchy as if it was a single object.
- Applying Modifiers
- Assigning to Collections
- Setting scene visibility
Collections currently seem to be the most similar at face value to this concept of cohesive groups of objects but they solve a different problem of render and scene visibility and don't treat their children as a cohesive 'group' of objects from the standpoint of the above operations. Additionally, the same object can exist in multiple collections which would create issues with the above operations.
Similar to collections, object parenting (by default) treats all of its children as separate unrelated objects with the exception of Transformations. Some of the above operators (such as delete and duplicate) have alternative operators for applying them to the whole hierarchy, but these are not always entirely intuitive and discoverable. Others such as linking and applying modifiers simply have no suitable workflow available with parenting objects as it stands currently.
As the parenting use case of propagating transformations from one object to another is already satisfied by constraints in a much more clear, explicit, and controllable manner. Therefore I propose changing the default behaviour of objects in a parent / child relationship to treat that hierarchy as a first class citizen from the standpoint of all operations in Blender where it makes intuitive sense.
- Transforming a parent object will also transform all of its lower hierarchy of objects. [No change from current behaviour]
- "Copy / Paste / Duplicate / Delete" of a parent object will also apply to the entire hierarchy by default. [Change from current behaviour]
- Changing the collection of a parent object (by dragging / dropping or Shift+M) will also impact the entire hierarchy of the selected object. [Change from current behaviour]
- By default clicking the visibility icons in the outliner and using the hide or isolate operators will hide the whole hierarchy. Shift+Click could still be repurposed to hide just the single object without affecting the hierarchy in the outliner.[Change from current behaviour]
- Applying modifiers to a parent object will also apply them to all children in the hierarchy. See sub-section on hierarchical modifiers for additional details.[Change from current behaviour]
- Linking a parent object (both locally and file linking) will also link its entire hierarchy. See sub-section on hierarchical linking for additional details.[Change from current behaviour]
Modifiers applied to a parent object will also impact all of its children. Note that this does NOT mean that applying a modifier to a parent will apply a separate copy of the modifier to the children in the hierarchy. This is an important distinction as changes to the modifier on the parent should immediately be reflected on all the children as well. In addition to that if you remove a child from the group, it should no longer have the parents modifiers applied to it. Therefore the modifier stack will have to be modified to apply to all children without actually being added to each child.
Linking objects should also link all of their children as well as the hierarchy. Take a simple object hierarchy with a parent object "Parent" and a child object "Child" for example. If I link "Parent", any changes to "Child" should also be propagated to all linked instances. In addition, if I add a second child "Child2" then this should also be replicated in all linked instances of parent. Likewise, if I delete a child from the hierarchy, then it should also be removed from all linked instances.
Hierarchical Library File Linking:
There is the additional use case of linking in groups of objects from other .blend files. Doing this should also maintain the hierarchy as defined in the separate .blend file. Adding / Removing objects from the linked hierarchy in the Library .blend file should also automatically be propagated over to the "Master" file. In addition to this, adding "Library Overrides" to the parent object in the "Master" blend file should still maintain the whole object hierarchy and cause all child objects in the hierarchy to maintain their parent relationship to the overridden object.
A pass should be done on all existing operators to determine which other ones should operate on full object hierarchies, and which should just operate on individual objects.
|Old Behaviour||New Behaviour|
Old Scene Migration:
Naturally, people who are using object linking, modifiers, and library overrides in previous versions of blender will probably not want their object hierarchies to behave this way by default upon opening their scenes in a newer version of blender, so care will have to be taken to provide a reliable upgrade path. I propose that when opening scenes saved on a version of blender before these changes that all existing objects that would be impacted by this change (objects with modifiers on them that also have children, or linked objects with children) are automatically converted to have their object hierarchies replaced with child constraints.