Dynamic Overrides #96144
Labels
No Label
Interest
Alembic
Interest
Animation & Rigging
Interest
Asset System
Interest
Audio
Interest
Automated Testing
Interest
Blender Asset Bundle
Interest
BlendFile
Interest
Code Documentation
Interest
Collada
Interest
Compatibility
Interest
Compositing
Interest
Core
Interest
Cycles
Interest
Dependency Graph
Interest
Development Management
Interest
EEVEE
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
Viewport & EEVEE
Interest
Virtual Reality
Interest
Vulkan
Interest
Wayland
Interest
Workbench
Interest: X11
Legacy
Asset Browser Project
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
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
Module
Viewport & EEVEE
Platform
FreeBSD
Platform
Linux
Platform
macOS
Platform
Windows
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
Type
Report
Type
To Do
No Milestone
No project
No Assignees
4 Participants
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: blender/blender#96144
Loading…
Reference in New Issue
Block 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?
WIP
This task will be used as general design, and umbrella task for the Dynamic Overrides project.
General Idea
Dynamic Overrides (or dynoverrides for short) aim at providing a simple and efficient way to override property values of any data-block, linked or local.
While generally based on the same idea as Library Overrides (aka liboverrides), dynoverrides are a fairly different approach. In a nutshell, they will be simpler to maintain and manage, but way less powerful and not suitable for complex things like a whole character animation.
Here is a list of the key differences:
Use cases include:
Conceptually, dynoverrides are also quite similar to animation data, the main difference being that they are stored in a different, not directly related data-block than the one they affect.
One big change/challenge implied by this project is that linked data become (partially) editable. This will require a lot of changes all around the Editor codebase (to properties drawing code, operators etc.). Support for that will need to be added gradually, so a restrictive list of overridable properties is most likely needed (similar to what is done with liboverridable properties already).
UI/UX
The main, basic interaction would happen at properties level, similar to how animation of a property is handled:
Later some similar feature to the
I
shortcut (inserting groups of animation fcurves) could exists for similar properties for dynoverrides.A list of dynoverrides (grouped by IDs) is shown in Scene and ViewLayer properties, with additional bulk-editing features. If a dynoverride defined at scene level is superseded by a same one defined in the active ViewLayer, it should be visible (grayed out in the Scene list?).
There could also be an overview of dynoverrides in the Outliner?
Some questions:
Technical Design
Data Model
Dynamic Overrides can be stored in Scene data-blocks, at two levels:
Each of these contain a list of dynoverrides, together with some runtime data (mappings) to search efficiently whether a property is dynoverridden or not.
A Dynamic Override contains a pointer to the data-block it affects, an RNA path leading to the affected property in that data-block, and the value of the override.
Potential animation of these dynoverride values: could be stored either as part of the Scene animation data (simplest solution, not sure about the draw-backs yet), or into their own animation data at the scene and view layer levels? Latest could make it easier to somehow 'export'/link dynoverrides into other files?
Evaluation
Dynamic Overrides will be evaluated as part of the depsgraph evaluation, after the handling of animation. This implies that they:
How exactly this fits in current and planned design for the Depsgraph still needs to be evaluated.
Ideas for Later
Linking of Dynamic Overrides
Finding out how critical it is to be able to link or export/import those dynoverrides, and how this could be done, needs to be further investigated. This would probably not be part of the initial deliverables though.
An idea could be e.g. to 'compile' the current set (from current scene and view layer) of dynamic overrides applying to a given ID, and store it with that ID. Then on linking that ID, code could re-use that 'compiled overrides' data and apply it into the active scene, with a specific status flag indicating that they are 'from linked data' (and therefore not editable, not deletable, and not saved in blend file, but rather re-created from linked data)?
Overrides From User PoV
Find out how much Library Overrides and Dynamic Overrides could be presented as a single override interface to the user, at least at a high level of usability.
Dynamic Overrides as Variants
One of the ideas from original design back from 2.80 area was that it would be possible to define different overrides for different users of a same ID, and that the depsgraph would detect this and generate different evaluated IDs then.
E.g. two different objects using the same material could define their own dynoverrides of the material color, and evaluated objects would get different evaluated materials IDs assigned then.
Changed status from 'Needs Triage' to: 'Confirmed'
Added subscriber: @mont29
#54792 was marked as duplicate of this issue
Added subscribers: @brecht, @WilliamReynish, @galenbeals, @evantryan, @BrandenCoker, @EstebanCovo, @EugenioPignataro, @NahuelBelich, @LucianoMunoz
Added subscriber: @RedMser
Hi @mont29 , Is there any news about this ?
I'm trying to found a workaround to have the possibility to override parameters/properties through different viewlayers for the same properties and any level(object/data/...) which I think is the goal of the dynoverride. I planed to do it in python but don't know if it's possible.
Would you need help in this task ?
Cheers
@Eqkoss Nothing planned currently, this still needs a final design and some MVP experiment before really moving forward.
The topic of linking these dynamic overrides into other files still has no clear answer.
There's also the question of whether to wait for the new animation system (or use current one) for this, since dynamic overrides are essentially 'static' animation (i.e. one constant value) of data, stored at the viewlayer level.
Can I, or anyone else, help you one way or another ?