Library Override (parent task) #53500
Labels
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
39 Participants
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: blender/blender#53500
Loading…
Reference in New Issue
No description provided.
Delete Branch "%!s(<nil>)"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Deprecated task, please see #73318 (Library overrides).
This task is here to explain current design behind lybrary overrides in #bf_blender_2.8, and to keep track of known limitations and TODOs.
Reminder: “library override” only allows overriding linked data. Since those do not change, we can evaluate library overrides once (when loading .blend, or re-loading a library). This could also be named 'partially localized data-blocks'. On the other hand, “dynamic override” would allow overriding local data, and would be handled by the depsgraph evaluation to generate final data.
This is not finalized project, but most (all) core concepts, API and code are expected to be final. Lots remain to be done mostly in adding overridable status to many more properties, and… stress-test all kind of complex corner cases!
Right now, only a few properties are overridable, among which object's and bone’s loc/rot/scale, you can test the code by:
You may also note that non-overridable properties remain grayed-out in UI.
Finally, at least basic support of animation override is done and working (i.e. being able to add, or replace, animation of the local overriding ID).
TODO's for 2.81
Those are known tasks that should be addressed before we go into 2.81 beta phase (i.e. we create the release branch).
TODO's for 2.82:
TODO's for 2.83:
TODO's for 2.90:
TODO's for later:
Technical Details
Here is a summary of how library overrides work.
Some way to hook the auto-override creation when someone changes an override's property (done as part of undo step creation currently).
RNA changes.
The way RNA properties are compared was heavily rewritten to allow much more complex behavior. Aside from override-specific topics, this brings real comparison (and not only-equality one), and more importantly, the ability to have a custom callback for custom comparison process.
Override Creation
This is merely making a local copy of the linked datablock, and generate an empty override structure for it.
Auto-generating override operations
User can define/control overriding of properties by hand, but we also generate them automatically, by making some RNA-based comparison between reference and local IDs. RNA comparison code has been extensively enhanced to support that. Auto-generation is currently performed each time an undo step is generated.
Override at .blend saving
We save local override 'as is', along with its override operations list. In case some operations are differential (add, sub, multiply), we compute and store the other operand in another datablock (storage one). This simplifies/sanitize write code (and most importantly, avoid having to temporarily modify real ID data during save process!), and also allows to get the 'overridden state' of the ID even when opening in an older Blender unaware of overriding process.
Override at .blend loading
Once we have loaded the whole .blend file and all its libraries, we go over whole Main database and apply overrides. To do that without having to recreate, and remap, and rename whole IDs, we edit a copy of linked (reference) ID, and then swap its content with local one.
Known TODOs, Issues, etc.
This is not feature complete! By far… Only basic operations are implemented, several areas remain fuzzy, etc. However, core concepts and code should be mature enough to be merged in blender2.8, where ongoing development can go on. Also, current state is enough and needed for Asset Engine project.
Code Working on DNA
Mainly operators, but can be also a few buttons using low-level access to data…
This is a bit of a hairy issue, since overriding data-blocks are essentially local ones, any operator can go playing on their data with any knowledge about what they should be allowed to do!
A first half of the solution is done, which is adding a post-operation check to try to restore data from reference when needed (added as part of the auto-override generation in undo step).
This does not solve everything though, we cannot undo all changes from RNA. So second part of the solution will unfortunately be to add checks to operators. We probably can limit this to a general check over a datablock (at least for a start), to forbid some operators to work on overriding ones completely.
But reaching a full and perfect control on the situation here is likely to be very difficult and long, if possible at all… So question is, to what point can we accept to have some changed data in local overrides that shall not be different from their reference? Knowing that a save & reload of the .blend file (or a manual 'resync' from linked references) will restore things to their correct status?
Override Templates & Locked Override
Those features are partially implemented, but require more work to be usable by users. They are not high-priority currently, and are not being actively worked on.
IDProperties
#54652
Non-trivial cases - Rigged chars
While a lot of tests were done, and a lot of issues fixed, current code should not yet be considered fully ready to replace proxies.
Non-trivial cases - Materials
Non-trivial cases - Nodes
Added subscriber: @mont29
Added subscriber: @spockTheGray-4
Static Overrideto Static Override (parent task)Added subscriber: @DuarteRamos
Added subscriber: @MauricioMarinho
Added subscriber: @SamGreen
Added subscriber: @Josephbburg
Added subscriber: @rollin
Added subscriber: @item412
Added subscriber: @carlosmu
Added subscriber: @Scaredyfish
I've been testing this a bit, and it works great! I've noticed shape keys don't seem to be overridable. Is this a limitation, or just something not implemented yet?
@Scaredyfish Thanks for testing! Shape keys are planned, yes, but not for 2.81, they are likely to give some "interesting" issues. ;)
That's good to know. Thanks for the info!
Added subscriber: @reed2000
Added subscriber: @satishgoda1
Added subscriber: @MarcelLegindi
Added subscriber: @jiku
Added subscriber: @Mets
I didn't want to submit a bug report for this(but let me know if I should), since I know this is work in progress, but it seems that the new Armature constraints don't play along well. I see it is indicated in the UI when a target ID is overriden, by a turqoise color. This doesn't seem to be the case for Armature constraint, so I guess that's meaningful to you.
I'm super excited for this system and hope you can find time to fix the above thing, and make custom properties work for 2.82. I think that's basically all we would need to let this replace linking. And then if you figure out how to add shape key support... we will throw you a party at the studio.
I've been using Library Overrides on a game character Armature to mostly great effect (some crashing, see below).
One issue I've had is when I needed to rename an attachment bone. When the rig updates in the animation scenes the animation still has the old name - how would it know to change I guess? Is there or would there be some smart way to re-target to the new name?
Also when exporting to FBX if the curve properties can't be found the animation export is broken completely.
So after deleting the old properties and saving the scene, the scene crashes on opening. I think it's dues to the library linking as I can move the blend file so it can't see the linked filed and it opens without crashing, but with errors about the missing link file. I've reported it as a bug here https://developer.blender.org/T70695
Lots of other things to add to this system I know, I hope it gets some more love soon as it has the potential to be really great.
One thing I found with the current capabilities is that whilst I can set TRS keys as an override, in the Graph Editor I can't set the value of a key in the properties panel.
@Mets please make report(s), it’s waaaayyyyy easier to keep track of issues that way. ;)
@reed2000 Indeed I would not expect miracles if you rename some bones in your rig, when doing this on a regular local data-block the releated code already has to go in a rather complex 'check every reference to old name and remap it to new name' process, but this is essentially impossible to do on an override… So things like anim curves, drivers etc. will need manual fixing in those cases am afraid.
And I expect many fixing work, and do have some more improvements ideas for library overrides in the future. :)
Hey Bastien, understand on the name change issue.
Maybe an area for someone to write a tool at some point to find anim curves for missing bones and ask what to do with them (hmm maybe it exists somewhere - I'll have a hunt). Fix path by renaming or delete for example. Changes to rigs can happen quite often during game dev - often gets locked down when you finish the project!
Anyway Overrides/Referencing is great and something I used heavily back in my dark days as a Maya user, so I'm backing Library Overrides all the way. Look forward to future additions.
Added subscriber: @angavrilov
So, after playing with overrides for a trivial character (bouncing ball with a rig), I noticed a big issue that in my view makes the current implementation not very good for complex characters that are not 100% perfect and finalized.
The way overrides are applied for a character is by using a run-once operator that recursively overrides a collection with all its child collections and contained objects, patching references within the override set to refer to overridden objects. The initial result of this is perfectly fine, but it cannot cope with any new references between objects added to the library file after the override setup was already created, as well as new objects. This is because the handling of references between the objects was applied by the operator, and after that the override system itself has no idea that these objects are supposed to be inter-related.
Basically, in practical terms, after an override of a character is created in a scene, it is no longer possible to add new child objects to the character in the library, new constraints/modifiers to the child objects (that reference the armature), new drivers to child objects (referencing the armature, e.g. for new shape keys). All these references will require fixing in every scene that already has an override for the character.
Fixing this requires supporting deep overriding of collections at the override system level, rather than an operator. Something like:
Added subscriber: @luc
Added subscriber: @icappiello
Added subscriber: @anonym
Static Override (parent task)to Library Override (parent task)Added subscriber: @lrevardel
Removed subscriber: @luc
Added subscriber: @Pipeliner
Added subscriber: @lemenicier_julien
Added subscriber: @slumber
Added subscriber: @AditiaA.Pratama
Added subscriber: @LucianoMunoz
I don't think this is a bug per-se, but it would be very handy for library overrides to support NLA strips. I feel like this is a good use case for library overrides since the main advantage currently is the ability to link the same character multiple times, and the ability to mix a set of existing animations for those characters is a good feature.
Let me know if you want this logged as a bug, or if this is a harder problem that is not a priority.
Added subscriber: @davidandrade
Added subscriber: @eoyilmaz
Added subscriber: @breakingspell
Added subscriber: @jesusmabas
Added subscriber: @karlisstigis
Added subscriber: @Mantissa
Added subscriber: @filibis
Added subscriber: @DanielGrauer
Closed as duplicate of #73318
Removed subscriber: @carlosmu
Added subscriber: @mpocztowski
Added subscriber: @MattCurtis
Removed subscriber: @MattCurtis
Added subscriber: @Xury46
Added subscriber: @Gehrig
Added subscriber: @fldbots
When I started using Linked Object/Library Overriding I save a lot energy and achieved good structure for projects. Recently I removed also lighting objects from my scenes and the structure of files is are more clean. I use Radiance HDR maps that baking in another .blend file using panoramic camera. I think that the idea of lights autobaking is interesting feature. Is it possible to use the Panoramic camera output (linked .blend) as a input for the Equirectangular texture in World Shader Editor in a another file?
Added subscriber: @JohanTriHandoyo