[Bf-committers] Updated (working!) patch for NLA Action Baking

Roland Hess rolandh at reed-witting.com
Thu Dec 29 15:10:39 CET 2005


http://projects.blender.org/tracker/?func=detail&aid=3634&group_id=9&atid=127

This monster patch adds Action Baking capabilities to NLA. With an 
armature and action strip selected, and the mouse hovering over the 
action in NLA, pressing SHIFT-B brings up the Bake menu, to which 
there are three options.

The first, Bake Object to Action, creates a new action and appends it 
to NLA that attempts to recreate object-level motion (due to 
keyframing, constraints, parenting, etc.) at the bone level. When it 
creates the Action, it also unlinks object IPOs and parenting (still 
working on removing object-level constraints). The net effect is that 
you now have an action that duplicates the motion of the armature as 
a whole.

The second, Bake NLA Action, creates a new action and appends it to 
NLA that attempts to burn all NLA actions into a single action strip. 
This could be helpful if you have created a complex character 
animation you would like to tweak and sweeten, but it consists of 
multiple walkcycles and numerous other strips. Baking into a single 
strip allows to you to work with the animation along a single 
timeline.

The third, Bake All to Action, first performs Bake Object to Action, 
then Bake NLA to Action, creating in the end a single action strip 
that contains keyframing information for your entire character 
animation. More extensive notes on shortcomings/possible expansion 
can be found in the patch tracker.

I would NOT call this patch finished, but it has almost reached the 
limits of my c programming capabilities. I worked on this as a way to 
help Orange with it's action baking needs, and am hoping that a 
better programmer up the chain here can perhaps do some optimizations 
on the code. In particular, the function that generates a list of 
keyframes to sample from the NLA seems to be spectacularly 
inefficient, but it's the only way I can think of to do it. Also, it 
would be better to only set keys on pose channels that already have a 
key on that frame. I'm not sure if it's possible, but when baking, 
you want to shoot for the fewest relevant keys.

Three notes:

1. When I started working on this, I thought I was working on a clean 
checkout of bf-blender, but was not. So, this patch also contains the 
MatchMoving feature I've developed. Orangers (and others) might find 
it useful.

2. To make the NLA strip for Object-level motion blend properly in 
NLA, I had to add a new NLA blend type: Multiply. Try it out.

3. I don't know what the hell I'm doing. Most of the coding I've done 
here is C&P from other parts of the Blender sources. New functions 
have been placed next to the ones I was cribbing from. If questions 
arise as to "why did you put that function in that file" or "why did 
you make function x non-static instead of just..." they can most 
likely be answered by the fact that I didn't know how to do it any 
other way. Suggestions/rewrites are welcome.
-- 
Roland Hess - harkyman


More information about the Bf-committers mailing list