Meta Curves

Hello all,

It was brought up a while ago in the Blender Chat that the new Bezier Curve editing tools that grease pencil got in 2.92 (docs, video) could be used to edit dense keyframe data in Blender.

I thought this is a great idea and I wanted to kick off the discussion, planning to implement it if there is positive feedback.

Who’s this for
Animators working with dense keyframe data. So mostly mocap data.
Or hand keyframe animation like Richard Lico does it.
There was a great discussion on Animation Exchange by Raf Anzovin, Brad Clark and Richard Lico about that topic

What it does
It creates a curve with fewer points than the source curve. Editing this new Meta Curve (name yet to be decided) will then move the keyframes on the source curve. This allows quick editing of dense keyframe data. In a way it is similar to creating an animation layer and creating an offset there with a few keys, just destructive.

How to use it

  • I imagine it would be a modal operator that works on selected keys.
  • On calling it, it would grey out the other other curves and show the new Meta Curves (maybe even hide curves not used?)
  • It should be possible for the user to control key density using key inputs (not sure if that’s possible technically)
  • The first and last keys of the sequence would be immoveable except their inward facing tangent. That is to force a smooth transition into the remaining animation
  • The user can then move around the keys to his liking
  • Hitting enter would apply the changes and hitting escape would discard them

This would be another great use case of being able to select time like @bird_d was proposing

Further thoughts

  • Is it different enough to the soft selection we already have?
  • I think giving it a hotkey would be best, but then again I am not sure if people would use it that much
  • The grease pencil operator converts all the strokes with the click of a button. This might be possible in this case as well. Though I am not sure if that’s desired and if it will have good performance

Now spill me your brains


This is an exciting feature, honesty kudos

I’d like to add you should also be able to do this based on selection if i select a bunch of keys (section) to be able to modify it in the same way so i’d expect the operator to work like this:

select keyframes, press hotkey, modify the “temporary bezier”, confirm! which brings me back to my original selection (or something along those lines)

but it’s loooking good.

This is an amazing and astonishing feature to work with mocap data!

Great idea. Usually I clean mocap data using animation layers, with which I can tweak individual curves with very few additional keyframes and it’s also non-destructive, always nice. So maybe food for thought.

Yep, that’s the usual way to go, but being able to modify the curve itself adds quite a bit of power. being able to completly change the mocap curve controlling it directly could be amazing, instead of having to deal with the result of a mixture of both, which means that neither of two curves are the real result, so you never see the real curve unless you bake it down.

That’s why this is such an amazing feature, now if we add to this being able to have a layer of metacurves that takes into account all the rest of layers below, so you can control a meta curve that controls the mixture of all layers, that’ can be massive :slight_smile:

Animation layers are definitely a solution to that, but as Juan mentioned I find them a bit clumsy to use. They always take me out of the flow

Could you explain what you mean by having a layer of metacurves?

1 Like

Right now when working in layers we have two options:

1- We have our main layer, no matter if it’s mocap or hand made animation
2- When we use the additive layer we go from 0 to modifying something, that modification is added to the layer below, but we don’t have the result curve visible
3- When we have the final curve we have to bake both layers to 1 unique layer, and that’s tone in a per-frame basis if you want 100% precission

That gives you a final result into one final layer that you can work with as if it were mocap, because it’s a key-per-frame bake.

Now if we could remove step 3, and add a metacurve layer where what you see is the result of all the additions in one curve that you can modify, but it’s not a key-per-frame, you can define what points you want to deal with, ideally it could modify layers below accordingly, but since it’s the result of the addition of the below layer that may be a crazy thing, so in the end you get the result and you define which keys you want in that curve to control it with precision.

The last bake step can be used as a final thing to export in case that is needed.

The original metacurve idea still stands, because that idea works in the same layer level, it’s not a new layer, this is an extension that works in a “real time bake” of the below layers, basically it could be like doing a real time bake, getting the key-per-frame layer and putting a meta curve over it, but without having to do all that, specially because if something is modified in the below layers that could be reflected in the meta-curve layer :slight_smile:

P.S.: When I say real time, I’m not implying that it works in real time, but rather the last thing I said, if you modify something in the below layers that would be reflected in the metacurve layer without having to do a re-bake and keeping all the modifications you did in the metacurve layer

aaah I think I get what you are saying.
So it will do a “temporary bake” of all the animation layers into a single meta curve, but then store the changes on an animation layer.
This would have the advantage of being able to see the curve you are working with, while maintaining the layer and not having the bake.

Yes that is a very good point. I don’t think I’ll include this in the first implementation since it sounds like it is potentially quite complicated. But this is definitely a direction to pursue. I really like the fact that it would make animation layers much more “understandable”. I find them always too abstract


Exactly, that’s the point :slight_smile:

And it will ease a lot the final refinement phase :slight_smile: