What I'm trying to do specifically is animate a punch. With the default Bezier curves, the interpolation between the "wind-up" and "contact" poses gets eased in AND eased out. This effectively makes it appear that the punch is being pulled. The character accelerates into the punch just as he should, but then begins to slow again right before contact. I'd like to have the interpolation such that he eases in and then continues to accelerate through. In principle I know how to do this with the graph editor, but this action involves a shift in balance so almost every bone in the body changes position between poses, and I really don't want to tweak the graphs for each property on each bone individually. Is there a way to fine-tune keyframe-level interpolation in Blender? Perhaps by animating a single property that represents a 0-1 weighting between poses? I feel like I could probably hack something together with drivers, but I'm really not sure how to do that in the context of poses and figured there might be a better way anyway. What's the proper approach in a situation like this?

EDIT: One solution I've found is to use a Python script to automatically position the left handles of all selected keyframes to sit on top of their respective control_points. This basically achieves the effect @cegaton was suggesting.

import bpy

C = bpy.context.object

for fcurve in C.animation_data.action.fcurves:
    for kf in fcurve.keyframe_points:
        if kf.select_control_point:
            kf.handle_left = kf.co[:]

I'd consider this a quick hack though and not really resolution to the original question. I'm still wide open if anyone has any other ideas.

  • $\begingroup$ You can change the type of interpolation used on the keyframes. You probably need the movement to start as bezier but end as linear. Read: blender.org/manual/editors/graph_editor/fcurves/… $\endgroup$
    – user1853
    Aug 13, 2016 at 2:19
  • $\begingroup$ @cegaton Thanks, but already tried that. The interpolation mode you choose for a keyframe gets applied to the interval between the selected keyframe and the one immediately following it. There doesn't seem to be any option to apply different modes to different parts of the same interval, or to the "back and front" of a keyframe. $\endgroup$
    – AIGuy110
    Aug 13, 2016 at 4:00

1 Answer 1


Maybe using the Breakdown Tool could help you to find the right curve / pose quicker? It is one of the In-Between functions Blender has, see the section In_betweens here: https://www.blender.org/manual/de/rigging/posing/editing.html. The workflow would be like this:

Set start and end keyframe of your pose. So the moment when the punch starts and the moment after the hit. Then scrub to a frame in between the two. With the very sophisticated example here it looks like this:


If I take my example, the X F-Curve should have a keyframe value lower than what it currently has. Or in other words, the pose should be closer to the starting pose, than to the ending one. The breakdown tool allows you to do just that: In the 3D Viewport, hit Shift + E, and then move the mouse left and right. The extent of your 3D Viewport acts as a slider, so if you move the mouse to the very left, you're at the starting pose, on the right at the ending pose. Your model will now deform either towards the starting pose, or towards the ending one. In your case, you wanna go closer to the starting one. After clicking, you can add a keyframe for this pose (or if you use Auto-Keying, that keyframe has been created already):

breakdown added

It's your choice now if you want to set the end value to vector (can be done in Dope Sheet or F-Curve Editor:

Vector End

If you're not happy with the pose, go to the same keyframe and use the breakdown tool again.

  • $\begingroup$ Wow, thanks @aliasguru! Nothing like what I originally had in mind, but playing around with this I'm getting some very good results. Definitely will be using this a lot in the future! $\endgroup$
    – AIGuy110
    Aug 13, 2016 at 14:59

You must log in to answer this question.

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