Copy visual pose and paste over frame range #57003
Open
opened 2018-10-02 13:46:49 +02:00 by Brecht Van Lommel
·
26 comments
No Branch/Tag Specified
main
tmp-usd-python-mtl
blender-v3.6-release
temp-sculpt-dyntopo
asset-browser-frontend-split
temp-sculpt-dyntopo-hive-alloc
node-group-operators
brush-assets-project
asset-shelf
blender-v2.93-release
blender-v3.3-release
universal-scene-description
temp-sculpt-attr-api
blender-v3.5-release
realtime-clock
sculpt-dev
gpencil-next
bevelv2
microfacet_hair
blender-projects-basics
principled-v2
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
Issues relating to security: https://wiki.blender.org/wiki/Process/Vulnerability_Reports
Apply labels
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
Compositing
Interest
Core
Interest
Cycles
Interest
Dependency Graph
Interest
Development Management
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
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
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
Issues relating to security: https://wiki.blender.org/wiki/Process/Vulnerability_Reports
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 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
Compositing
Interest
Core
Interest
Cycles
Interest
Dependency Graph
Interest
Development Management
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
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
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
Milestone
Set milestone
Clear milestone
No items
No Milestone
Projects
Set Project
Clear projects
No project
Assignees
Assign users
Clear assignees
No Assignees
11 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.
No due date set.
Dependencies
No dependencies set.
Reference: blender/blender#57003
Reference in New Issue
There is no content yet.
Delete Branch "%!s(<nil>)"
Deleting a branch is permanent. Although the deleted branch may exist for a short time before cleaning up, in most cases it CANNOT be undone. Continue?
Two features requested by animators:
Both of these features can be done in a relatively simple way, however in general with rigs just copying and pasting the matrix after constraints and parenting are applied does not necessarily lead to the same resulting pose. At least parenting should be taken into account intelligently (pasting in order from parent to child), for constraints or IK it may be very hard to do well.
See comment #57003#1077474 for some design questions, with the summary of the answers in #57003#1089566.
Added subscribers: @brecht, @PabloFournier
Added subscriber: @dr.sybren
Reclassifying this task from TODO to Design, as the task is not concrete enough to actually start implementation.
See the 2020-11-12 module meeting notes for more information.
I've described my ideas below, and clearly indicated which questions still need answering. I hope this'll make discussions easier.
Terminology
Scope
This proposal is about a copy-paste workflow of Visual transforms and poses only. This means that it excludes animation data like keyframe slopes, interpolation types, FCurve extrapolation settings, and FCurve modifiers. The effect of these is taken into account, of course, but these settings themselves are not copied.
Design Principles
Different Functionalities & Design Questions
Copy-paste of single pose to another frame or another character
This is how I envision copy-pasting single poses:
In this case, Blender will use the bone names to map from the copied data to the new rig.
Design Question A: should the pose that is stored on the clipboard contain the bone transforms in local space (so relative to the parent bone) or in world space? The former keeps the copied data closer to what Blender (and artists) are used to. However, the latter can be beneficial in certain workflows, when pasting onto a rig that has a slightly different topology (for example a bone was inserted between the copied bone and its parent). Possible answers to this question are:
Copy-paste of Visual Transform
This is how I envision copy-pasting visual transforms of single bones/objects:
In this case, Blender will ignore the object/bone names, and simply apply the copied transform onto the active object/bone.
Design Question B: here Blender decides to simply ignore the bone name and apply the transform to the active bone because there is only a single transform on the clipboard. Is this intuitive? Or should there be explicit "Copy Visual Pose" and "Copy Visual Transform" buttons? Possible answers to this question are:
Copy-paste over multiple frames
Design Question C: Should this work as a "bake animation" operation, where each frame is evaluated, and thus when pasting it's going to be animated on ones? Possible options I see are:
Design Question D: What frame range should be pasted over? Given that an animator copied frames 10-20, with frame 13 as the current scene frame, and then moved to frame 113 and pasted, pasting should place the pasted animation at frames
Design Question E: What should happen with the existing animation that is pasted over?
Blending Pasted Poses
This applies pretty much to all the above.
Design Question F: How desirable is it to have a slider to blend between the original pose and the pasted pose?
Quick answers based on how I understand the use case the Blender Studio animators had in mind. But you'll have to check with them or artists in the module.
A: (1)
B: Seems like solving a different problem that the one this task was created for, no opinion on the importance of that other problem.
C: This is for animators who want to continue modifying the animation, not bake it. Which goes against design principle (2) as you do want to preserve all that info, and probably (1) as well since it may be impractical to encode all that into text.
D: (3)
E: (2)
F: Quite desirable.
Thanks for your answers, @brecht.
This is an important remark. As far as I understood, "visual pose" means "after evaluation". As a result, the info you want to preserve is no longer there. The current visual pose may not even be on a keyframe at all. We can also look at this from the perspective of a "non-visual" pose copy, i.e. the original animation data, but that's not what was written in the patch description (at least not with how I understand "visual" in this case).
It's probably best to ask the Blender Studio animators at this point.
It may be that these two features requests are really separate things, and that ""copy visual animation" is not even what is being requested.
Added subscriber: @BClark
Design Question A: should the pose that is stored on the clipboard contain the bone transforms in local space (so relative to the parent bone) or in world space? Let the user decide (for example with a checkbox next to the "Copy Pose" button).
While we are talking about pasting pose and blending the thing I really wish I could control is WHERE the pose aligns when it pastes because there are times when I want the pose to paste exactly in the same location and orientation/rotation as the current pose and other times I wish it would paste in another location, based on selection or where the 3d cursor is located and oriented. Instead of paste, then having to move it by hand and rotate it to where I wanted or need it. Example a loop cycle that is translating, copy the pose from the first frame and paste, puts the root translate back at the start of the move but I need it translated forward to the end of the animation and aligned with the foot on the ground instead of exactly where I copied it. I bring this up because of the talk about storing the pose parent relative or in world space.
Design Question B: I am okay with either but maybe it is better to be clear "Blender making this choice based on whether one or multiple bones were copied is fine, but the button label should read either "Copy Visual Pose" or "Copy Visual Transform" depending on what Blender will do."
Copy-paste over multiple frames(Right now the only way to "propagate poses" is to existing frames, you have to sample the curve first instead of give it a frame range to paste over and it only works with ONE pose, so being able to grab a range of poses and paste them or have one pose and paste it over a range without existing keys would be nice. Right now I do this by either turning on AUTO key and paste pose, and move one frame forward for each frame to key over, or sample and propagate poses)
IF we are talking about copy a range of pure poses, then I would expect it to store each frame as a full pose, key or not... as this is diffrent than copy/paste existing keyframes on the controls.
Then I would want control over how it pastes that range, say on ones or twos.
Design Question D: What frame range should be pasted over?2- current frame shouldn't any thing to do with the copy, you are picking a range, and then when you paste, expected result would be start frame of animation range to paste starting at current frame.
Design Question E: What should happen with the existing animation that is pasted over? 3"Both, and let the animator choose." There are times were you want to do both, push the data or replace it and should be a setting or choice and this would work similar to other software pate choices or editing of time in clips. replace or offset.
**Design Question F: How desirable is it to have a slider to blend between the original pose and the pasted pose?**YES great to have
Added subscriber: @Rikstopher
Design Question A: 1
Design Question B: 1
Design Question C: 5
Design Question D: 2
Design Question E: 3
Design Question F: Yes
kinda agree with Rik in most
A:1
B:1
C:2-5
D:2
E:3
F: yes, please
Added subscriber: @LucianoMunoz
I tend to agree with all of what the guys have said but there is one which is C that i want to dive into.
A:1
B:1
C: 6
The option 2 and 5 are the closest to desirable, but I think we'd like the entire range "selected" to be copied even if there aren't keys on it, and then at pasting decide whether pasting on existing keys or baking or pasting original keys, kind of like right now you can copy a pose (in the viewport) that is in between 2 other poses even if at that particular point in time it doesn't have keys.
D: 2
E: 3
F: yes, please
Added subscriber: @Josephbburg
Sorry this took me so long :
A: 3, but default to Local Space (and change with Adjust Last Operator/F9 menu)
B I agree with brecht here, and I think that Visual Pose and Visual Transform are very confusing names. Anyhow I think consistency is most important, it's better for Blender to never make a decision than for it to ever make a wrong decision. So I think it's best to avoid a situation where a heuristic is required to choose which bones to paste the data from > to... anyhow: "here Blender decides to simply ignore the bone name and apply the transform to the active bone because there is only a single transform on the clipboard. Is this intuitive?" -- the answer is "Yes, as intuitive as selected/active is... which is not entirely intuitive."
C 2, but seems like it should be its own bake/smart bake operator.
D 1 is the only consistent
E 3, default to overwriting, use f9 menu as before, what about putting it on the NLA stack, though?
F 100% desirable!
Added subscriber: @StanislavOvcharov
Paste Pose over frame range - Isn't it how Propagate pose tool work?
Added subscriber: @ChrisLend
I agree, which is why I started with a definition of terms. Did that help?
I agree
Here I generally disagree. "Never make a decision" can result in complex operators with too many parameters. I think it's better for Blender to have limitations, and accept that it's going to be imperfect in certain cases, if that means that copy/pasting is easy to use, predictable, and usable in the major workflows (like character animation). I think we both agree on the "it should be predictable" part ;-)
I think that's for a much-desired Animation Layers project, and out of scope for this task.
Propagate Pose is more limited. The copy/paste described in this task should also work between blend files, different scenes, and maybe even have a text representation for the data so that poses can be shared via instant messengers, email, etc.
Summary of the answers so far
Copy-paste of single pose to another frame or another character
Excellent. Here there are no conflicts. I can just implement local space first, and extend that by world space + a choice later.
Copy-paste of Visual Transform
I'll start implementing the first option. If it turns out it's not as clear as people thought, changing the label of the button should be relatively easy to add.
Copy-paste over multiple frames
This is the question with the most different answers. I agree with @Josephbburg that baking is probably better kept for a separate operator.
As for the implementation, I'll probably start making option 5, after which I could look into @LucianoMunoz's suggestion.
Here I'll implement option 2. It has the most votes, and it would still allow option 1. (but would require you to change the current frame to the original one).
Excellent, unified opinions makes things simple.
Blending Pasted Poses
For this I really want to use #81785 (Implementation: Modal Key Manipulation Operators). @ChrisLend has already implemented a lot of patches, and I'll give them priority when reviewing.
Added subscriber: @RedMser
Added subscriber: @JohanTriHandoyo
Now that the pose system is in the asset browser, has there been any more work or discussion on this to allow expanded control over the paste either from the asset browser or while in Blender?
Thank you :)
I've just landed (d737f2016d) an expanded version of my Copy Visual Transform add-on (which I renamed to Copy Global Transform because "visual" is not a very clear term), it'll be bundled in Blender 3.1. It can copy-paste global transforms, and also do the pasting over multiple frames (either "smart bake" to only adjust existing keys, or "regular bake" to create keys on 1s, 2s, etc.)
Added subscriber: @Njesper
I have a request for your brilliant Copy Global Transform: Could you make 3 checkboxes for location, rotation, and scale, so the user can choose to copy paste only part of the transform?
Otherwise thanx for the coolest animation stuff.
Best, Jesper