Initial UX design for the new Animation data model #118008
Labels
No Label
Interest
Alembic
Interest
Animation & Rigging
Interest
Asset System
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
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
3 Participants
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: blender/blender#118008
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?
Background: at the animation workshop last year we designed a data model for the upcoming new animation system, with a focus on making sure it could represent the things needed for the use cases we plan to accommodate. There have been some changes to the data model since then as we prototyped and explored it further. But the basics of having layers, strips, and outputs within a new Animation datablock have not changed.
This design task is for the corresponding UX and UI design: how does the user actually create and work with animation under this new data model.
Don't Ruin Existing Workflows / Simple Things Should Be Simple
If users don't want to use animation layers, or strips, or any of that fancy stuff, it shouldn't be shoved in their faces. They should be able to just animate as they always have. Layers and strips should both be opt in.
Therefore, newly created Animation datablocks will just have a single layer with a single infinite strip, and the user does not need to interact with the layers UI at all when animating. All keys just go into that one strip on that one layer, and can be edited with the normal tools as always.
Layered Animation Workflows
There are broadly two things people may want to use animation layers for:
Accommodating both workflows within the same system may be challenging. Here is my proposal:
What Value of Keys Get Inserted?
Rather than naively inserting the current value of a property into the selected layer, the animation system should figure out what value needs to be inserted on that layer to make the final mix (with all the layers) result in the current value of the property.
In other words, keying should be layer-mixing aware.
Where Do Keys Go?
There are three parts to this:
1. No Animation Datablock
There are two behaviors users might want:
The Animation datablock can handle both approaches, and both should be supported.
Proposal: there is an ID pointer property in the scene that can point to an Animation datablock. When it is empty/unset, new Animation datablocks are created for each object/ID that don't have one when inserting keys. When it is set, objects/IDs without an Animation datablock are hooked up to that shared Animation datablock and their keys are inserted there.
Alternatively, we could have a user setting for this. However, I think that's probably not a good idea because of the "opening up and working on someone else's file" case. The way animation data is organized may vary per scene and blend file (e.g. a shot file vs an animation library file), and it's nice if things "just work" and everything stays consistent within a file.
2. No Layers / Strips
If there are no layers or strips, I propose a simple rule: keying fails.
The general rule here is that layers and strips are never automatically created (aside from the default layer and strip of a freshly created Animation datablock). That should be left to the user.
We may want to revisit this if we introduce options to e.g. always automatically put different objects/IDs on different layers, to make certain workflows easier.
3. More Than One Layer/Strip
This was partially covered earlier, but here's a more complete explanation.
I propose the following approach for determining where keys go when there's more than one layer or and/or overlapping strips:
This allows the user to predict and rely on the automatic rules when appropriate, but also control exactly where keys go via selection when needed.
Graph Editor and Dopesheet
The graph editor will still exist. The dopesheet will probably still exist, but see further down for discussion of the possibility of fully merging the Animation editor and dopesheet into one thing. In this section, I assume the dopesheet will still exist.
The graph editor and dopesheet will still have a "global" view of things, just as they do now. They will be able to visualize and edit animation data for more than one Animation datablock at a time if desired, just as they can with actions now. And just like now they will still be able to filter/scope their view down when desired as well.
The main difference is that layers and strips need a way to be represented in the channel list. For example, you could have two different layers animating the same property, and it's important to be able to view and edit them both.
Proposal: simply add layers and strips to the channel hierarchy. Also add filter options to be able to filter based on selected layer(s) and strip(s).
It may also make sense to exclude layers/strips from the hierarchy when there's only one, since no layer distinction is needed then. However, this should be based on how many layers/strips actually exist in a given Animation datablock, not how many are visible after filtering. Seeing a layer/strip in the hierarchy then serves as an indicator that layer/strip-based animation is involved in what the user is currently working on.
The New Animation Editor
A new Animation Editor will be introduced. It will at least be responsible for:
Multiple Animation Datablocks
One question that came up for me while thinking/mocking things up was: what happens if you have two objects selected, each hooked up to a different Animation datablock? Does the Animation Editor visualize both animation datablocks?
My tentative conclusion (which is arguable) is that, no, it should show a single Animation datablock at a time, which in this case would be the one hooked up to the active object. The rationale is as follows:
Unify the Animation Editor and Dopesheet Into One Thing?
Advantages
Challenges
The dopesheet provides some advantages that may be tricky to reproduce in a layer-based animation editor:
Animating Layer Influence
Each layer will have an influence property, that acts something like an alpha-blend. This property should be animatable. However, the influence property doesn't belong to a particular output and doesn't live on any strips, instead being a direct property of the layer itself.
Data Management
Assigning Animations to IDs
One of the stupid things about Blender right now is that you can only (easily) manage what Actions Objects are hooked up to (via the Action Editor). There is no place in the UI to change what Action a Material is hooked up to, for example.
We should address this in the new animation system. As a bare minimum to start out with, I propose that we simply add an "Animation" panel in the properties of each (animatable) ID, which contains fields for the Animation datablock + output that the ID uses. In the future we can explore more sophisticated approaches, but this bare minimum UI should always be there.
Some animatable IDs are not represented in the main properties editor. For example, masks. However, all such data is represented somewhere in Blender's UI, and an Animation panel can be added there. In the case of masks, that would be in the n-panel of the Movie Clip Editor when in mask mode.
Managing an Animation Datablock's Outputs
Outputs can be automatically created when needed. For example, when a previously unanimated ID is keyed, a new output for it may be made.
However, there should also be a way for the user to manually manage them. Proposal: we take a simple approach: an "Outputs" panel in the Animation Editor's n-panel, that provides an editable list of outputs for the current Animation datablock. The user can add, delete, and rename outputs there.
I am not sure about this. It means the artist needs to manage and be aware of the selection. And what if you want to apply an operator to a bunch of layers? That would also go by selection so afterwards you'd need to re-establish the previous selection to continue work.
I would argue that it might be better to only go by key acceptance rules as you have outlined it (locked, limited etc.)
We could do the inverse though, if layers are soloed, keys will only go to those.
Alternatively we could have a "keyable" state on layers which needs to be enabled for it to be keyable.
Anyway my point is we should avoid mixing the concepts of selection and keyability.
About the whole thing of creating one datablock per object or have it shared. I think there is no good solution which means we need to provide good tooling to merge and split datablocks whenever needed.
Agree 100%. This also makes it very predictable in cases where there are no layers or strips that are valid to insert keys into. They might exist but are locked, which makes them non-existent for the keying system.
I disagree about the conclusion that it should only ever display one anim data block, especially with the reasoning. Animation has always displayed more than one action (which is a datablock, right?) and this is super useful. Also it would mean we have an editor where moving layers between datablocks could be as easy as a drag and drop.
Yes they should be, but they might not be. In the chaos of a production many things happen that are not ideal and I think we should keep the GUI as flexible as possible in that regard.
Due to the challenges you listed I think it's a good idea to NOT do that. Especially the "truncated Strip with keys outside its range" issue is something the Animation editor just cannot solve.
I think it's important to display the key summary within the strips as you have it in your drawings to easily allow broad changes to timing.
However I think we also need a new "Strip Editor", which is basically the action editor but would allow changing which strip is displayed right now. It could also indicate the limits of the strip. Entering that editor should be as simple as pressing "Tab" on a strip in the animation editor. This could also solve the issue of looping animation. If the editor is aware which strip it is modifying, it can wrap keys around the ends seamlessly.
We are going to have a similar issue with the Graph Editor, so I think solving that early is beneficial.
YES
I think that's a good idea
Thanks for the awesome work Nathan! Exciting seeing it come together
These are my notes from the meetings I've had with people about the mockups so far. I did my best to accurately represent what people said, but of course may have made some mistakes or missed things. If I misrepresented or missed a point of yours, don't hesitate to say so!
Meeting 1
With @dr.sybren.
Data Management Flows
Merging Animation Editor and Dopesheet
Meeting 2
With @dfelinto, @brecht, @Sergey.
(Note: we didn't get through all of the mockups in this meeting, just the layered animation flows.)
Layered Animation Flows
Meeting 3
With @BassamKurdali.
General
Data Management (library linked) Flows
Merging Animation Editor and Dopesheet
Misc
Meeting 4
With @Mets, @Felipe-G, @EosFoxx, @nrupsis, @nickberckley
(Note: apologies if I've mis-attributed any of the comments below. I failed to note down who said what during the meeting, which was a silly goof. In some cases I've left no attribution, where I totally forgot who said what.)
Layered Animation Flows
Building up animations with adjustment layers:
Limiting the channels/properties that can go into a layer:
General:
Data Management Flows
Linked library flow:
General:
Merging Animation Editor and Dopesheet
Hi there! Adding some of the feedback collected by the Dillongoo Studios animation team in terms of what we would like from the new animation editor and what we would like to keep from the old systems, as well as some wish-list ideas.
For the unified animation editor:
Combining the Camera data with its properties would be very nice. If you have the camera open in the action editor right now it only shows the transform options. We edit the focal length so often that having consolidating them in the same space would save lots of time
More filter options would be very useful. Being able to filter keyframes based on separate collections, armatures, etc. The main benefit of the action editor is being able to isolate the keyframes for one rig at a time. Ideally we'd be able to recreate that functionality in the new system as well through alternative means.
The main benefit of the action editor for us is that it lets us use the show all filter without displaying the entire scenes keyframe data. The dopesheet doesn't let you do this since it'll display keyframes for everything, rather than just the keyframes for one character
Being able to custom sort the order in which information is being displayed in the summary menu on the left. For example moving Bob above monster or monster above bob in the provided screenshot
Grouping channels in the new unified editor should be a visual sorting feature rather than removing the bone names as it currently works. Right now if you were to group all the FK bones in the dopesheet of a character, it removes the names of all the bones you had selected and populates one mass list of transform channels that are hard to read.
Fuzzy search for the search menu would be great. A way to combine a search for Z quaternion and Z euler rotations is something I've always wanted since our rigs include both kinds of rotation modes. Bonus points if this fuzzy search works in the graph editor as well so that searching items by typing Z R would be possible.
Hiding the stash/Push down buttons
Wish-list ideas:
Being able to mute a vertical column of keyframes would be useful. Temporarily hide specific keys from interpolation to be able to see where the animation can be simplified or to see where tweening issues are coming from.
A way to make rig properties more intuitive on where they are displayed (IK parents, follow spaces and such).
Currently they are only on bones that the property lives on which are hard to edit the keyframes if you don't know which bones they are attached to ( EX: head follow on the torso bone in rigify)
Notes from my meeting with @BClark:
Layered Animation Flows
Data Management Flows
Animation
datablocks. Again, the user should never be trapped into a particular way of organizing their animation data.Animation
datablocks via the drop-down selector, it would be useful to have a visual indication of which ones have matchingOutput
s for the current ID.Merging Animation Editor and Dopesheet