CODE.BLENDER.ORG
The Future of Overrides
The Future of OverridesDecember 13th, 2024Code Design, General DevelopmentDalai Felinto html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd"In December 2024, a workshop was held at the Blender HQ in Amsterdam to discuss the use of overrides in production environments.The workshop was attended by Andy Goralczyk and Simon Thommes from Blender Studio, while Bastien Montagne, Sergey Sharybin, and Dalai Felinto attended on behalf of the development team.Left to right: Simon, Sergey, Bastien, Andy, Dalai (photo) at the Blender HQ in Amsterdam.The main topics discussed were the pain points of the existing (library) overrides system, its limitations, and potential improvements for future productions.Overrides in productionsThe existing Library Overrides system is very powerful. However, with great power comes great responsibility complexity.The system was designed to replace the old proxy system and support multiple instances of the same character within a scene. Its most extensive use case was the Sprite Fright project, which involved animating numerous Sprite characters, all overridden from the same blendfile.Sprite Fright CC-BY Blender Studio.Although the initial plan appeared solid, the systems design introduced the need for active maintenance. Files would frequently go out of sync, requiring Blender to resync linked librariestaking minutes each time a file containing modified linked rig was opened.This led to name collisions in production files and the need for a custom script to reopen and resave all interlinked files daily, to keep relationships in sync.Meanwhile, Blender Studio developed an add-on to handle shot-based non-character overrides (e.g., light tweaks). This simpler approach was very functional and could handle a wide range of use cases more efficiently compared to Library Overrides.After completing enough projects using this pipeline (Sprite Fright, Charge, Wing It!, Gold, and smaller productions), it is time to improve Blenders approach to overrides.Leave the complexity out for 99% casesThe main feedback was that, in most scenarios where overrides are needed, a simple solution should suffice. To put it differently:I want to link a character and animate it [but]in 99% of cases we dont need the complexity of overrides.For the rare instances where artists require full control over a hierarchy, the existing Library Overrides system will still be available. In that sense, Library Overrides are here to stay. However, both rigged character animations and individual properties (e.g., Light power) should be overridable in a more streamlined way.(Dynamic) OverridesThe proposed solution introduces a new type of override (codename: Dynamic Overrides), which can operate on linked or local data. When working with linked data, a Library Override can still be created when necessary, but now it can be done without overriding the entire hierarchy.Key-points:Flexible Storage: Dynamic Overrides can be stored in various places, such as scenes or collections, giving users full control over their location.Linkable: Depending on where they are stored, Dynamic Overrides can also be linked.Granular Control:Overrides can apply to specific properties rather than entire hierarchies.The system allows for individual adjustments (i.e., a single property).ID Pointers Support: Can replace/override ID pointers.Remappable: They can be swapped when broken paths are found.Enhanced Usability:Dynamic Overrides take over most of the current Library Overrides interface, providing a streamlined experience.Library Overrides will still be necessary for specific features like modifiers and viewport interactions for now.Co-Existence with Library Overrides:Linked rigged characters will first get a Library Override for the rig, without any hierarchy.Followed by a Dynamic Override to remap usages of the linked armature to the local library overridden rig.This re-creates the proxy system experience with a more robust implementation.Library Overrides Hierarchy still available:Library Overrides hierarchies remain available for the rare (1%) complex use cases.Dynamic Overrides can be converted into Library Overrides when a full hierarchy is required.Overrides data-blockA new data-block type, Override, would be introduced. Initially, this will be used by the Scene ID, making the overrides globally applicable within a single scene.In the future, this data-block could be applied more specifically to collections and other contexts. This would allow different versions of the same material or object to coexist, each with distinct properties based on their contexts overrides.Overrides ID Data-block data structure design.There are three types of override rules which are being considered:ID Remap: Designed for animation of linked rigged characters.RNAPath: Focused on overriding individual properties.Filter: A mechanism to apply RNAPath changes to multiple data-blocks simultaneously, rather than just one.User InterfaceBelow are mockups showcasing possible integrations for overrides in the user interface.Creating overridesAn override can be added via the context menu or by using the O shortcut.Context Menu: Add Override and Remove Override options.Where to view Overrides?Properties Editor: Overrides can be identified by their override-specific color.Overrides Panel: A dedicated panel listing all overrides will be available.Initially, this list will only appear at the scene level. In the future, it will be accessible in other locations where overrides can be stored (e.g., Collections).Advanced SetupFor more complex setups, the overrides data-block can be linked from a different file. This allows for creating a hierarchical set of override rules that can be stacked and reused across multiple contexts.Short term alternativesBefore this project can fully begin, a few steps will be taken to speed up background blend-files processing:Option to skip dependency graph building in background mode.Option to skip Library Override re-sync in background mode.Expose some blend-file libraries dependency information in the Python API.These improvements will help with the Blender Studio pipeline, which relies on daily project-wide resyncs to minimize override conflicts. A script is used to open all files that link any edited files and save them, ensuring that override resyncs do not accumulate over time.MilestonesOverride ID Data-blockAnimation support for overriden properties.Filter for overrides (wildcard RNA properties).Non-global overrides (context-based overrides).Good-to-have targets:Viewport interaction (gizmos).Modifiers, constraints, (requires design, could be targeted for 5.0).Closing thoughtsThe concept of dynamic overrides is not new, but it has now been refined to a point where the team feels it is ready for development.This maturation period was also crucial for Library Overrides to be battle-tested and for the use cases of dynamic overrides to become more clearly defined. This will enable both types of overrides to be used in combination, leveraging the strengths of each to achieve the best of both worlds.Next stepsOverrides will be one of the main targets for 2025. The exact timeline will depend on the Blender Studio project lineup and the availability of the development team.Once an initial prototype is ready for testing, a thread will be created on the Developer Forum for studios and individual artists to share their feedback.Support the Future of BlenderDonate to Blender by joining the Development Fund to support the Blender Foundations work on core development, maintenance, and new releases. Donate to Blender
0 Commentarios
0 Acciones
103 Views