Way around the Bezier bump?

Heya Blenderheads.
In my character animation stuff at the moment, I keep getting this annoying Bezier bump problem.

How can I make it so that every time I keyframe my character, it doesn’t keep moving ‘too far’ (you know how at the top of my keyfram curves the curve carries on beyond the curve point). So if, for example, I keyframe my character waving his arm and then putting his arm back by his side, when I add my next keyframe after all that all of a sudden his arm will move INTO his body before turning around and moving to the next keyframe. Annoying, huh?

I could edit every single IPO my character produces for every single movement he has, but…well, it’s a 10 minute animation, let’s put it that way. And he currently has nearly 40 bones. Not fun.

Any ideas? Any scripts anyone knows about? Any help? Any flames? Anything?

Thanx guys.

LethalSideParting :wink:

Sorry - no help here. But I did want to chime in and say that I have the EXACT SAME PROBLEM. There’s probably some weinie little short-cut key or option that we’re not setting that would generate non-eased keys.

Anyone? (BTW, I checked the knowledge base and looked through my obtuse-as-ever manual)

One solution is to convert the ipos from bezier to linear (select ipos, press T and hit linear) which tells blender to move from one key to the next directly, with no graduation… unfortunately, that makes, robot-like movements. Other than that, I have no suggestions. :-?

you can manually edit the curve by selecting them and entering edit mode. than, you can modify them like any normal bezier curve. For the problem you’re having, you should just select the handles in the part overshooting the point where you want it to stay and press the Vkey.

cheers,
Martin

you can manually edit the curve by selecting them and entering edit mode. than, you can modify them like any normal bezier curve. For the problem you’re having, you should just select the handles in the part overshooting the point where you want it to stay and press the Vkey.

Right. But there might be thirty action keys in ten seconds of animation in each of twelve bones. If they’re all rotation/location keys, that makes over two thousand keys to adjust that way! :x Obviusly that’s worst case scenario, but it could happen. It’s too bad there isn’t a way to indicate that a key should be linear when you set it.

NateTG: Thanks for that shortcut. That’ll speed things up a little.

Maybe a script could be made to do the job? Sorry, I’m no programming expert (I can do Delphi/Kylix and that’s about it :frowning: ).

But would a script to sort this sort of thing out be possible? It’s not difficult - it just involves making an algorithm that checks each point on an IPO curve for two keyframes that are next to each other and have the same amplitude, and then flattening the bezier handles of these two points. It’s easy to do manually, just extremely time consuming, as one of you has already said.

Can anyone provide a script to do this sort of thing, or point me to a website where I can learn Blender-related python? If I made the script, I’d gladly post it free of charge/rights coz I know what a problem this can be, especially for heavy character animation :frowning: .

Any suggestions either way?

Thanks very much for your support, guys.

LethalSideParting

if your in the ipo , tab mode and select the point, and press ctrl-v, you can select both sides of the curve and edit manually.
or add extra keyframes to control the shape of the curve.
this is a ‘problem’ in other packages I’ve used- blender’s solution just as good.
you can multiple select points and change them (box mode or shift key).
I think if you set points to one type and add new ones between them, the new ones are the same type (can’t remember)
You shouldn’t have to linearize all the keys, a little overshoot, and some ease in/out is good- I like being able to control both sides of the curve, though.
hope I made sense.

This problem has been around for quite a while, and it stems from the fact that Blender is using the B-spline algorithm to do the initial automatic placement of the bezier curves.

The problem could be fixed by using a different automatic placement formula.

Aside from all of that, however, I would like to point out that tweaking the animation curves is an important step in making good animation. Of course, the closer it starts out to being good, the less tweaking you have to do :slight_smile:

hmm. I think you folks are being unfair; most softs have several forms of interpolation, as does blender, and bezier is usually the default. You’ve got linear, constant and bezier options, and I think in your case bezier works fine. when in bezier-
edit: I just looked this up:
hotkeys:HKey: toggles free and aligned:
free handle: you can move the handles any way you wish(black)
aligned: handles in a straight line(pink)
VKey:
vector mode: handles point at each other- looks linear untlil you move them. this is probably what you want.(green)
shift+Hkey: autohandle(yellow)does automatic length and direction
the default behaviour is aligned, initial placement auto (yellow). when you move a handle , it turns pink again.
change to vector. it linearizes, but you can move the handles individually and they turn black.
even though the default behaviour is aligned/auto, you can select multiple points and change them together. so switching isn’t a chore.
keeping beziers is better than going to linear or constant modes imho, because you can modify ease in and out values without adding a whole bunch of keys.
this really is fundamentally the same as most other programs. Like I said, default interpolation isn’t much of an issue cuz changing it is easy. remember you can multiple select with the a-keyy orwith a box (b key) or by shift selecting.
try it. it’s far from cumbersome.
(sorry for the snappy dialogue) :wink:

Just to add a couple of cents…

Bezier are absolutely fine, linear interpolation is bad.

Now explanation:

Everithing you animate has a mass and an inertia. Velocity is the derivative of position and acceleration its second derivative. If you have kinks in the IPO then velocity has abrupt jumps and acceleration goes to infinity.

This is unphysical.

You should keep smooth beziers and play with extreme attention with keyframes. To place the object in one place, then displace it and add a keyframe every 20 frames or so is wrong, expecially if the object is changing direction.

You should keyframe almost each frame when the object changes speed/direction, and then play with vertices to get the best results.

Stefano

It isn’t so difficult to do. I know that for a fact because in Maya, one of the curve options is ‘clamped’, and it does exactly what I mentioned here. Now, before you all start pointing out Maya’s price tag (which is falling, by the way - WOOHOO!!), I know what Maya costs compared to Blender. However, this shows it CAN be done.

As I write, I’m currently teaching myself Blender-related python to try and create a script to do this sort of thing automatically. It’s slow going, tho’ - as I’ve said, I’m having to teach myself it from scratch.

What annoys me about this problem is that it IS possible to fix. The problem is that with as many IPOs and bones as i have in my characters, it’s very time consuming and boring. This is the ‘dirty work’ of animation - I prefer to keep my hands clean and get on with the FUN stuff.

So…off to program. If anyone wants to help/has any suggestions, please leave them here.

Thanks guys.

LethalSideParting

I think that the issue here is that the B-Spline interpolation is causing the “extremes” of the animation to go past the “extremes” of the key frames.

One of the mathmatical properties of Bezier curves is that the curves stay within the convex bounds formed by the control points. Thus, it should be relatively simple to write an auto-placement algorithm that keeps the extremes within the bounds of the key-frames.

It seems to me that many of you are confusing Bezier curves and B-Splines. B-Splines are a way of placing bezier curves automatically. That is what Blender does to auto-place the bezier interpolants. It then allows the user to manually edit the Bezier curves.
The issue is the auto-placement algorithm, not the bezier interpolation.