Library Override (parent task) #53500
Closed
opened 2017-12-07 14:54:04 +01:00 by Bastien Montagne
·
53 comments
No Branch/Tag Specified
main
manifold
npr-prototype
blender-v4.2-release
blender-v3.6-release
blender-v4.4-release
remote-asset-library-monolithic
blender-v4.3-release
temp-sculpt-dyntopo
blender-v3.3-release
brush-assets-project
pr-extensions-tidy-space
blender-v4.0-release
universal-scene-description
blender-v4.1-release
blender-v3.6-temp_wmoss_animrig_public
gpencil-next
blender-projects-basics
sculpt-blender
asset-browser-frontend-split
asset-shelf
blender-v3.5-release
blender-v2.93-release
sculpt-dev
bevelv2
xr-dev
v4.4.1
v4.2.9
v3.6.22
v4.4.0
v4.2.8
v4.2.7
v3.6.21
v4.2.6
v3.6.20
v4.2.5
v3.6.19
v4.3.2
v4.3.1
v4.3.0
v4.2.4
v3.6.18
v4.2.3
v3.6.17
v4.2.2
v3.6.16
v4.2.1
v3.6.15
v4.2.0
v3.6.14
v3.3.21
v3.6.13
v3.3.20
v3.6.12
v3.3.19
v4.1.1
v3.6.11
v3.3.18
v4.1.0
v3.3.17
v3.6.10
v3.6.9
v3.3.16
v3.6.8
v3.6.7
v3.3.14
v4.0.2
v4.0.1
v4.0.0
v3.6.5
v3.3.12
v3.6.4
v3.6.3
v3.3.11
v3.6.2
v3.3.10
v3.6.1
v3.3.9
v3.6.0
v3.3.8
v3.3.7
v2.93.18
v3.5.1
v3.3.6
v2.93.17
v3.5.0
v2.93.16
v3.3.5
v3.3.4
v2.93.15
v2.93.14
v3.3.3
v2.93.13
v2.93.12
v3.4.1
v3.3.2
v3.4.0
v3.3.1
v2.93.11
v3.3.0
v3.2.2
v2.93.10
v3.2.1
v3.2.0
v2.83.20
v2.93.9
v3.1.2
v3.1.1
v3.1.0
v2.83.19
v2.93.8
v3.0.1
v2.93.7
v3.0.0
v2.93.6
v2.93.5
v2.83.18
v2.93.4
v2.93.3
v2.83.17
v2.93.2
v2.93.1
v2.83.16
v2.93.0
v2.83.15
v2.83.14
v2.83.13
v2.92.0
v2.83.12
v2.91.2
v2.83.10
v2.91.0
v2.83.9
v2.83.8
v2.83.7
v2.90.1
v2.83.6.1
v2.83.6
v2.90.0
v2.83.5
v2.83.4
v2.83.3
v2.83.2
v2.83.1
v2.83
v2.82a
v2.82
v2.81a
v2.81
v2.80
v2.80-rc3
v2.80-rc2
v2.80-rc1
v2.79b
v2.79a
v2.79
v2.79-rc2
v2.79-rc1
v2.78c
v2.78b
v2.78a
v2.78
v2.78-rc2
v2.78-rc1
v2.77a
v2.77
v2.77-rc2
v2.77-rc1
v2.76b
v2.76a
v2.76
v2.76-rc3
v2.76-rc2
v2.76-rc1
v2.75a
v2.75
v2.75-rc2
v2.75-rc1
v2.74
v2.74-rc4
v2.74-rc3
v2.74-rc2
v2.74-rc1
v2.73a
v2.73
v2.73-rc1
v2.72b
2.72b
v2.72a
v2.72
v2.72-rc1
v2.71
v2.71-rc2
v2.71-rc1
v2.70a
v2.70
v2.70-rc2
v2.70-rc
v2.69
v2.68a
v2.68
v2.67b
v2.67a
v2.67
v2.66a
v2.66
v2.65a
v2.65
v2.64a
v2.64
v2.63a
v2.63
v2.61
v2.60a
v2.60
v2.59
v2.58a
v2.58
v2.57b
v2.57a
v2.57
v2.56a
v2.56
v2.55
v2.54
v2.53
v2.52
v2.51
v2.50
v2.49b
v2.49a
v2.49
v2.48a
v2.48
v2.47
v2.46
v2.45
v2.44
v2.43
v2.42a
v2.42
v2.41
v2.40
v2.37a
v2.37
v2.36
v2.35a
v2.35
v2.34
v2.33a
v2.33
v2.32
v2.31a
v2.31
v2.30
v2.28c
v2.28a
v2.28
v2.27
v2.26
v2.25
Labels
Clear labels
Interest
Alembic
Interest
Animation & Rigging
Interest
Asset System
Asset datablocks, libraries, browser and shelf
Interest
Audio
Interest
Automated Testing
Interest
BlendFile
Interest
Blender Asset Bundle
Interest
Code Documentation
Code comments, Python/RNA API descriptions
Interest
Collada
Interest
Compatibility
Backward and forward compatibility
Interest
Compositing
Interest
Core
Interest
Cycles
Interest
Dependency Graph
Interest
Development Management
Interest
EEVEE
Interest
FBX
FBX I/O related topics
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 & IO
Interest
Platforms & Builds
Interest
Python API
Interest
Render & Cycles
Interest
Render Pipeline
Interest
Sculpt, Paint & Texture
Interest
Text Editor
Interest
Translations
Interest
Triaging
Interest
USD
Interest
UV Editing
Interest
Undo
Interest
User Interface
Interest
VFX & Video
Interest
Video Sequencer
Interest
Viewport & EEVEE
Interest
Virtual Reality
Interest
Vulkan
Interest
Wayland
Wayland windowing on Unix
Interest
Workbench
Interest
glTF
glTF format I/O topics
Interest: X11
Xorg/X11 windowing
Legacy
Asset Browser Project
Archived
Legacy
Blender 2.8 Project
Archived
Legacy
Milestone 1: Basic, Local Asset Browser
Archived
Legacy
OpenGL Error
Archived
Meta
Good First Issue
Meta
Papercut
Meta
Retrospective
Meta
Security
Related to security, see policy: https://developer.blender.org/docs/handbook/bug_reports/vulnerability_reports/
Module
Animation & Rigging
Module
Asset System
Module
Core
Module
Development Management
Module
Grease Pencil
Module
Modeling
Module
Nodes & Physics
Module
Pipeline & IO
Module
Platforms & Builds
Module
Python API
Module
Render & Cycles
Module
Sculpt, Paint & Texture
Module
Triaging
Module
User Interface
Module
VFX & Video
Module
Viewport & EEVEE
Platform
FreeBSD
Platform
Linux
Platform
Windows
Platform
macOS
Severity
High
Severity
Low
Severity
Normal
Severity
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
Archived
Type
Report
Archived
Type
To Do
Projects
Clear projects
No project
Assignees
Hoshinova
James-McCarthy-4
Sebastian-Herholz
casey-bianco-davis
gandalf3
Blendify Aaron Carlisle
quantimoney Aditya Y Jeppu
Alaska Alaska
angavrilov Alexander Gavrilov
frogstomp Aleš Jelovčan
amelief Amélie Fondevilla
elubie Andrea Weikert
Andy_Goralczyk Andy Goralczyk
ankitm Ankit Meel
Anthony-Roberts Anthony Roberts
antoniov Antonio Vazquez
aras_p Aras Pranckevicius
Arnd Arnd Marijnissen
bartvdbraak Bart van der Braak
mont29 Bastien Montagne
blender-bot Blender Bot
bnagirniak Bogdan Nagirniak
BClark Brad Clark
brecht Brecht Van Lommel
BrianSavery Brian Savery (AMD)
ideasman42 Campbell Barton
CharlesWardlaw Charles Wardlaw
CharlieJolly Charlie Jolly
Chris_Blackbourn Chris Blackbourn
lateasusual Chris Clyne (Lateasusual)
ChrisLend Christoph Lendenfeld
HobbesOS Cian Jinks
fclem Clément Foucault
cmbasnett Colin Basnett
Kdaf Colin Marmond
dfelinto Dalai Felinto
pioverfour Damien Picard
DanielBystedt Daniel Bystedt
pepe-school-land Daniel Martinez Lara
zanqdo Daniel Salazar
Mets Demeter Dzadik
erik85 Erik Abrahamsson
EAW Evan Wilson
filedescriptor Falk David
fsiddi Francesco Siddi
GaiaClary Gaia Clary
DagerD Georgiy Markelov
mano-wii Germano Cavalcante
zazizizou Habib Gahbiche
HooglyBoogly Hans Goudey
Harley Harley Acheson
weasel Henrik D.
Hjalti Hjalti Hjálmarsson
howardt Howard Trickey
nirved-1 Hristo Gueorguiev
mod_moder Iliya Katushenock
brita Inês Almeida
JacquesLucke Jacques Lucke
Jason-Fielder Jason Fielder
JasonSchleifer Jason schleifer
Jebbly Jeffrey Liu
Jeroen-Bakker Jeroen Bakker
deadpin Jesse Yurkovich
neXyon Joerg Mueller
eliphaz John Kiril Swenson
guitargeek Johnny Matthews
Brainzman Jonas Holzman
JoniMercado Jonatan Mercado
JorgeBernalMartinez Jorge Bernal
JosephEagar Joseph Eagar
JoshuaLeung Joshua Leung
Bone-Studio Juan Gea
jpbouza-4 Juan Pablo Bouza
JulianEisel Julian Eisel
JulienDuroure Julien Duroure
JulienKaspar Julien Kaspar
kevindietrich Kévin Dietrich
lone_noel Leon Schittek
LucianoMunoz Luciano Muñoz Sessarego
LukasStockner Lukas Stockner
LukasTonne Lukas Tönne
LunaRood Luna Rood
MaiLavelle Mai Lavelle
EosFoxx Marion Stalke
Baardaap Martijn Versteegh
scorpion81 Martin Felke
mendio Matias Mendiola
Matt-McLin Matt McLin
MetinSeven Metin Seven
wave Michael B Johnson
Michael-Jones Michael Jones (Apple)
makowalski Michael Kowalski
pragma37 Miguel Pozo
nrupsis Nate Rupsis
jesterking Nathan Letwory
nathanvegdahl Nathan Vegdahl
PrototypeNM1 Nicholas Rishel
nickberckley Nika Kutsniashvili
Sirgienko Nikita Sirgienko
OmarEmaraDev Omar Emara
pablovazquez Pablo Vazquez
PaoloAcampora Paolo Acampora
PascalSchon Pascal Schön
pmoursnv Patrick Mours
muxed-reality Peter Kim
lichtwerk Philipp Oeser
P2design Pierrick PICAUT
PratikPB2123 Pratik Borhade
Limarest Ramil Roosileht
farsthary Raul Fernandez Hernandez
LazyDodo Ray molenkamp
iss Richard Antalik
rjg Robert Guetzkow
salipour Sahar A. Kashi
Sayak-Biswas Sayak Biswas
Sean-Kim Sean Kim
sherholz Sebastian Herholz
sebastian_k Sebastian Koenig
ZedDB Sebastian Parborg
sebbas Sebastián Barschkis
Sergey Sergey Sharybin
IRIEShinsuke Shinsuke Irie
sidd017 Siddhartha Jejurkar
SietseB Sietse Brouwer
SimonThommes Simon Thommes
SonnyCampbell_Unity Sonny Campbell
Stefan_Werner Stefan Werner
Lockal Sv. Lockal
dr.sybren Sybren A. Stüvel
ThomasDinges Thomas Dinges
Ton Ton Roosendaal
BassamKurdali Ursula kurdali
Vasyl-Pidhirskyi Vasyl Pidhirskyi
WannesMalfait Wannes Malfait
wbmoss_dev Wayde Moss
weizhen Weizhen Huang
leesonw William Leeson
xavierh Xavier Hallade
jenkm Yevgeny Makarov
ChengduLittleA YimingWu
gfxcoder jon denning
Clear assignees
No Assignees
Bastien Montagne
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: blender/blender#53500
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
No description provided.
Delete Branch "%!s()"
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