Page MenuHome

Copy visual pose and paste over frame range
Confirmed, NormalPublicDESIGN

Description

Two features requested by animators:

  • Copy Visual Pose: a combination of existing functionality to copy visual poses between bones and copy pose that works between frames.
  • Paste Pose over frame range: when pasting a pose, it can be useful to paste it over a specified range of frames.

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 T57003#1077474 for some design questions, with the summary of the answers in T57003#1089566.

Event Timeline

Brecht Van Lommel (brecht) lowered the priority of this task from 90 to Normal.Oct 2 2018, 1:46 PM
Brecht Van Lommel (brecht) created this task.
Sybren A. Stüvel (sybren) changed the subtype of this task from "To Do" to "Design".Nov 16 2020, 3:52 PM
Sybren A. Stüvel (sybren) moved this task from TODOs to Design on the Animation & Rigging board.

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

  • Transform: the combination of location, rotation, and scale.
  • Visual Transform: the transform after the effects of animation and constraints has been applied. It can be expressed in local or world space.
  • (Visual) Pose: a mapping from bone name to its (visual) transform.

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

  1. If possible, it's nice to have the data as text on the clipboard. This allows pretty much anything to act as the source or the target of the copy/paste operation, including copying to/from an instant messenger. More importantly, it is trivial to support a workflow where you would copy a matrix, close Blender, open another Blender, and then paste it.
  2. Copying a visual pose excludes keyframe slopes, interpolation types, FCurve extrapolation settings, and FCurve modifiers.

Different Functionalities & Design Questions

Copy-paste of single pose to another frame or another character

This is how I envision copy-pasting single poses:

  • Select multiple bones to copy,
  • click the "Copy Visual Pose" button,
  • go to a different frame, or select a different rig as the active object, and
  • click the "Paste Pose" button.

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:

  1. Always do local space,
  2. Always do world space,
  3. Let the user decide (for example with a checkbox next to the "Copy Pose" button),
  4. Other (please elaborate)
Copy-paste of Visual Transform

This is how I envision copy-pasting visual transforms of single bones/objects:

  • Select the bone or object to copy,
  • click the "Copy Visual Pose" button,
  • go to a different frame, or select a different bone or object as active, and
  • click the "Paste Pose" button.

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:

  1. Blender making this choice based on whether one or multiple bones were copied is fine, and a single button is fine.
  2. 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.
  3. This choice should be made by the artist, and there should be two buttons "Copy Visual Pose" and "Copy Visual Transform".
  4. Other (please elaborate)
Copy-paste over multiple frames
  • Select the bone or object to copy,
  • select a frame range (either by typing numbers in a panel, or by using the scene preview range),
  • click the "Copy Visual Animation" button,
  • go to a different frame, or select a different rig as the active object, and
  • click the "Paste Animation" button.

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:

  1. Baking on ones is enough.
  2. Baking on regular keyframes is enough, but the artist should have control over the step size (on twos, threes, etc.)
  3. Poses should only be copied for those frames that already have a key. On every frame where any of the copied bone has a key, the entire pose should be copied.
  4. Poses should only be copied for those frames that already have a key. On every frame where any animation data exists (so this includes keys on unselected bones, constraint targets, etc.) , the entire pose should be copied.
  5. Poses should only be copied for those frames that already have a key. A bone's visual transform should only be copied where that bone has a key.
  6. Other (please elaborate).

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

  1. Original frames: 10-20
  2. Start at current frame: 113-123
  3. Current frame at copy time should go to current frame at paste time: 110-120
  4. Other (please elaborate).

Design Question E: What should happen with the existing animation that is pasted over?

  1. Insert pasted frames, pushing existing animation to the right on the timeline.
  2. Overwrite existing animation, leaving the animation data after the last pasted frame untouched.
  3. Both, and let the animator choose.
  4. Other (please elaborate).
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 Van Lommel (brecht).

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.

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.

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

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

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

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!

Paste Pose over frame range - Isn't it how Propagate pose tool work?

I think that Visual Pose and Visual Transform are very confusing names.

I agree, which is why I started with a definition of terms. Did that help?

Anyhow I think consistency is most important,

I agree

it's better for Blender to never make a decision than for it to ever make a wrong decision.

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 ;-)

E 3, default to overwriting, use f9 menu as before, what about putting it on the NLA stack, though?

I think that's for a much-desired Animation Layers project, and out of scope for this task.

Paste Pose over frame range - Isn't it how Propagate pose tool work?

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

Design Question A: should the pose that is stored on the clipboard contain the bone transforms in local or world space?
1. Always local: @Rik Schutte (rikkert), @Pablo Fournier (pablico), @Luciano Muñoz Sessarego (looch)
3. Let user decide: @Brad Clark (RiggingDojo), @Joseph Brandenburg (TheAngerSpecialist) (but default to local)

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

Design Question B: When there is only a single transform on the clipboard, ignore the bone name and apply the transform to the active bone
1. Fine. @Rik Schutte (rikkert), @Pablo Fournier (pablico), @Luciano Muñoz Sessarego (looch), @Joseph Brandenburg (TheAngerSpecialist)
2. As above, but change the button label from "... pose" to "... transform": @Brad Clark (RiggingDojo)

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

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?
2. Baking on regular keyframes is enough, artist controls step size: @Pablo Fournier (pablico), @Joseph Brandenburg (TheAngerSpecialist) (but make baking > separate thing)
5. Only copy on keyed frames, only for keyed bones: @Rik Schutte (rikkert), @Pablo Fournier (pablico)
6. Copy everything, so local, world, and info about keyed or not; decide what to paste upon pasting: @Luciano Muñoz Sessarego (looch)

This is the question with the most different answers. I agree with @Joseph Brandenburg (TheAngerSpecialist) 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 @Luciano Muñoz Sessarego (looch)'s suggestion.

Design Question D: What frame range should be pasted over?
1. Original frames: 10-20, @Joseph Brandenburg (TheAngerSpecialist)
2. Start at current frame: 113-123, @Brad Clark (RiggingDojo), @Rik Schutte (rikkert), @Pablo Fournier (pablico), @Luciano Muñoz Sessarego (looch)

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).

Design Question E: What should happen with the existing animation that is pasted over?
3. Both, and let the animator choose. @Brad Clark (RiggingDojo), @Rik Schutte (rikkert), @Pablo Fournier (pablico), @Luciano Muñoz Sessarego (looch), @Joseph Brandenburg (TheAngerSpecialist)

Excellent, unified opinions makes things simple.

Blending Pasted Poses

Design Question F: How desirable is it to have a slider to blend between the original pose and the pasted pose?
1. YES @Brad Clark (RiggingDojo), @Rik Schutte (rikkert), @Pablo Fournier (pablico), @Luciano Muñoz Sessarego (looch), @Joseph Brandenburg (TheAngerSpecialist)

For this I really want to use T81785: Implementation: Modal Key Manipulation Operators. @Christoph Lendenfeld (ChrisLend) has already implemented a lot of patches, and I'll give them priority when reviewing.