How to repeat a non-linear forward motion NLA Action Strip for a run cycle?

Using Blender 2.81a Nonlinear Animation Editor.

I have a solution that works, but doesn’t seem like the right way to do it.

I’ve created an 18 frame run cycle with legs pushing and arms pumping but it has no forward motion. To achieve the forward motion, I’m adding Location keyframes to the rig itself. The animation is setup to be a repeatable cycle every 18 frames (2 strides) and cover 4 meters (4 Blender units). Although the forward motion is almost linear, it’s not actually linear since the body slows down when landing on a foot and the body compresses, then speeds up slightly when pushing off into the next stride.

So, I’ve Loc keyframed the forward motion to account for the slow downs and speed ups. There’s no feet sliding and it looks good. As subsequent run cycles repeat, I use the Graph Editor to copy the X Loc keyframes, move them to the right, then manually raise them up to account for the new X distance travelled. Otherwise, the runner just teleports back to the original X Loc.

It seems like there should be a way to define the forward motion for a single run cycle and re-use it -building upon the previous distance covered by the runner. This would allow me to treat the 3 tracks (legs, arms, forward motion) as a re-usable unit for different shots.

I’ve tried various Action Extrapolation and Active Strip Extrapolation, but it seems those settings act on the NLA stack vertically. I think I’m looking for a way to extrapolate horizontally? Well, it’s like I want to extrapolate but keep the relative slowdowns and speed-ups of the foot falls.

What am I missing here?

Thanks for any tips or suggestions.

I might have found an answer, but certainly open to better suggestions and feedback.

Instead of trying to duplicate and re-use the NLA strip, it looks like I can accomplish the desired goal within the Graph Editor.

Right Click on the NLA Track > Start Tweaking Strip Actions. Then down in the Graph Editor, select the keyframes that compose the forward motion associated with one run cycle. Press “n” to bring up slide-in menu > select Modifiers tab > Add Modifier > Cycles.

Before: No Cycles
After: Repeat with Offset

1 Like

Thanks for posting your answer - it just helped me out :grinning:

1 Like

You’re welcome. And WELCOME to the Blender community! Or maybe you’ve been a long time Blender user and just joined this site. Regardless, glad you’re here!

I guess it’s a bit late, but here’s what I’d do:

First, you want to bake out the variations in forward motion to a bone or something, so that everything gets simpler. Start with an existing run-over-distance animation. Create one empty, animate it with linear handles over the length of the run. Create another empty, parent it to the original, and then copy transforms from the model’s root. Bake action. This second empty contains the desired animation relative to linear motion. You can replace the existing root animation with these new keyframes.

Once you have that, you can do this very simply with your NLA, because your run cycle doesn’t require any animation of actual motion. You can have a single track with as many copies of your run cycle as you want, and another track (on replace or combine, doesn’t matter, there are no bodies animated in both tracks; likewise, order doesn’t matter) which contains your linear motion only-- quite possibly, in the form of only two keyframes.

1 Like