1
$\begingroup$

I have a character with very long arms, and I used a re-targeted, stock, keyframe animation for walking, but his arms move too much. I would like to select his upperarms and forearms and pull some slider to make them sway less, or make the keyframes smoother, or something like that. Is there a way?

$\endgroup$
2
  • 2
    $\begingroup$ In the graph editor you should be able to just scale down the rotation curves on the axes that rotate too much $\endgroup$
    – Lauloque
    Commented Nov 25, 2023 at 21:33
  • $\begingroup$ I tried but since quaternions are weird it didn't really work. $\endgroup$
    – SilverRain
    Commented Nov 26, 2023 at 0:06

2 Answers 2

1
$\begingroup$

You can create a copy of the armature and add a copy rotation constraint to all bones of the copy armature targeting the corresponding bones of the original armature. You will most likely use local space for target and owner. Then, you can reduce the influence of those constraints as you see fit to get the desired output.

$\endgroup$
5
  • $\begingroup$ That sound like a lot of work just to reduce some rotation amplitude 👀 $\endgroup$
    – Lauloque
    Commented Nov 26, 2023 at 4:52
  • $\begingroup$ @L0Lock True, but with Python, it should be straightforward. Do you think I should include a Python script for that in my answer? If OP shares their file, I could write the script with something to test on. $\endgroup$
    – Mr A
    Commented Nov 26, 2023 at 10:29
  • $\begingroup$ You could write a script that acts on a selected bone, that would be more "universally usable". $\endgroup$
    – Lauloque
    Commented Nov 26, 2023 at 16:54
  • $\begingroup$ Thank you @MrA . In my case, this ended up working well. $\endgroup$
    – SilverRain
    Commented Dec 18, 2023 at 16:57
  • $\begingroup$ You're welcome! $\endgroup$
    – Mr A
    Commented Dec 18, 2023 at 17:06
2
$\begingroup$

There are multiple ways to reduce an animation amplitude.

Edit the graph

The easiest I think is to just edit the graph.
To make it easier, you can use ⇧ ShiftRMB RMB to place the graph's 2D Cursor in the middle of where you want the scale to originate from. Then set your graph's Pivot Point to 2D Cursor. And finally, you can select the major rotation curve and press sy to scale it down its Y axis, and LMB LMB or ⏎ Enter to validate.

enter image description here

It works well even with Quaternion rotations, as long as the bone isn't doing crazy rotations (which arm bones shouldn't do anyway).

Since big movements are usually done one one axis, usually you can scale down just one axis and be done with it. But if the rig was made with bones misaligned or using the wrong rotation modes, you might need to scale other axes as well.

Animation Layers

Similar to how you can draw on several layers in drawing softwares, you can animate in several layers in Blender.

You could make a new animation layer on top of your original, and counter-rotate your bones when they are at their max rotation on the original layer to reduce their amplitude.
Or you could make a layer with your bone in default pose, and use its influence over the original animation to tone it down.

Counter animation

For this, open the Non-Linear Animation (NLA) editor. Push down your current animation into a track using this button:

enter image description here

You can select it and rename it "original" in the sidebar for clarity.

In the viewport, keyframe the bone once to create a new animation.

In the NLA, the new animation you just made is stored in the top "temporary" track, but is set by default to replace any other track's animation. To make it blend instead, select the temporary track in the list, go in the sidebar and change the Blending to Multiply.

enter image description here

From there, for each "rotation extreme", you can rotate the bone "backwards" and add a keyframe to reduce the amplitude. It requires you to go over each rotation peak, but it gives you full control.

Default layer

Instead of counteranimating in a new track, you could instead set the temporary track to Replace again, hit ⎇ Altr in the viewport to reset the rotation of the bone to zero, keyframe that, delete other keyframes, and use the temporary track's Influence (just under the Blending setting) to handle how much that bone should stay still or use the original animation, effectively giving you an animation influence slider:

enter image description here

Retargeting tricks

See Mr A's answer. Basically, use a secondary rig on which you retarget your animation and reduce the influence of the retargeting.

$\endgroup$
3
  • $\begingroup$ Thank you @L0Lock . $\endgroup$
    – SilverRain
    Commented Dec 18, 2023 at 16:58
  • 1
    $\begingroup$ My pleasure, feel free to upvote and accept the answer using the ✔️ button in the top left corner. $\endgroup$
    – Lauloque
    Commented Dec 18, 2023 at 20:31
  • $\begingroup$ In this case, I ended up going the route of using bone constraints and a separate pose. $\endgroup$
    – SilverRain
    Commented Dec 18, 2023 at 22:12

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .