Reference/Release Notes/2.81/Library Overrides

Blender 2.81: Library Overrides

Library Overrides is the new system designed to replace and supersede Proxies. Most types of linked data-blocks can be overridden, and the properties of those overrides can then be edited. When the library data change, unmodified properties of the override one will be updated accordingly.

It is considered as experimental, and current proxy system will be kept alongside for a few releases. Automatic conversion from proxies to library overrides is not planned, there will be a manual operator to do that, but results on complex characters are not guaranteed.

Compared to proxies, library overrides support:

  • Multiple independent overrides of a same linked data (e.g. a whole character).
  • Adding new modifiers and constraints, anywhere in the stack.
  • Overriding many more types of data-blocks, and selectively edit some of their properties (e.g. materials, textures...).
  • Recursively chaining overrides (i.e. link and override overrides from another library file, etc.).
'
There are still some known TODO's/issues that have to be fixed before we go in Beta release stage, otherwise this feature will have to be disabled by default for 2.81 release. Please check the Phabricator main task of the project, T53500, for more details.


Basic Usage

Creating an Override

There are two ways to create an override of a linked data-block.

Single Data-Block override

You can override a single data-block from two places:

  • The Outliner (it's in the context menu of IDs), in which case all local usages of that linked ID will be remapped to the new local override.
  • The ID button template in the UI (⇧ ShiftLMB Template-LMB.png on the "link" icon to the right), in which case only that specific usage will be remapped to the new local override.

Make Library Override Operator

This one operates in the 3D View, over linked objects or local empties instantiating a linked collection (typically, a linked character). It is very similar to the "Make Proxy" operator, and is found in the same sub-menu Object » Relations » Make Library Overrides....

Unlike the method described above, it will go through the whole hierarchy of collections and objects, and override all those needed to allow posing/animation of a character.

Proper Collections Layout Matters
For this operator to work properly, it is crucial that all the collections needed by the character are children of the root (linked) one. Otherwise, some won't be automatically overridden, and manual work will be needed to fix the override.


Editing an Override

Essentially, and override is edited the same way as a regular local data-block. You can use operators on them, edit their properties from various editors, etc.

There are some limitations however, most notably Edit mode is not allowed currently for override.

In most cases, as soon as you edit a property, you can see that it's overridden by it's teal blue outline/background (similar to the yellow/green/purple colors of animated/driven ones).

You can also animate overrides, animated properties just replace/supersede overrides then. Note that you cannot override-edit an existing animation, you'll have to create a new Action.

You can manually define or remove an override from the context right-click menu of the relevant property.

Controlling an Override

WIP…

Technical Notes on Implementation

Internally, overrides are local data-blocks that are copied from and keep a reference to their linked source. They also keep a list of locally modified properties (using RNA paths).

When saving the .blend file, both data-blocks (local override and linked source) are diff'ed, and all allowed differences are stored in the .blend file.

When reading the .blend file, linked source are duplicated again into local overrides, and then all the diffing data is re-applied on the overrides.

This implies that even if you modify a "forbidden" property, on next file reload it will be restored to the linked data-block's value.

Known Limitations and Issues

Many more things could/will be made overridable. Focus has been on making overriding of characters for posing/animation working first, as an initial real-life test case, and direct proxy replacement.

Since overrides are basically local data-blocks for most of Blender, especially for tools and operators, there are still a lot of cases that can lead to editing non-overridable properties. While those cases are being hunted down, remember that any forbidden editing will be reset to the linked data status on next file reload anyway.

Performances, especially of the "diffing" process (where Blender compares override and linked source data, and generate the needed data to store the overrides), can be a bit slow on heavy production scenes.

As with proxies, in case a link to a library is broken, using the Relocate feature (in the Outliner) won't work really well, bone shapes e.g. are likely to be lost... Some data are currently lost in the "place-holder" step of missing data-blocks.

Future Ideas

There are several potential future extensions/improvements to library overrides, which are currently not exposed to the user (though some are partially implemented):

  • Differential overrides (for scaling e.g., store the difference as a factor of the original value, instead of an absolute value).
  • Protected/locked properties: forbid (by default) to edit some properties in the override data-blocks.
  • Templates: define in the library files how a given data-block should be overridden by default (which properties should be overridden, which should be protected from modifications, etc.).