
Walk Cycle Extrapolation in XSI
| This tutorials intends to show two different approachs to the same problem: extrapolating a Walk Cycle. The first part is showing us how to do it by the Animation Editor, by "relative cycle" curves. The second part shows how to do it by CID Expression in the Mixer. In any of the cases, the preparation required is the same. | |
1. Preparation: The praparation intends to set the final feet/hips relation as the initial one. My rig works with a Center of Gravity (COG) on the hip and two foot controllers (on a different hierarchy), to which the final leg effectors can be constrained by position. In my example, the controllers are inverse feet, but it could be anything since I'm not animating the inverse foot as it should. See my inverse foot tutorial for more details. |
|
![]() |
|
| When animating a walk cycle it's a good idea to set the interface in a more proper layout. This is how I worked, setting the right viewport as a big horizontal viewport for better understanding the procedure. (see below). | |
![]() |
|
| First of all, I'll set the initial stride. In this case the hips are a little lower as the legs are spread. When the initial stride is set, turn on "snap to centers" and check the next procedure. | |
![]() |
|
| Draw a linear curve with three points. One on each of the foot controllers and another one on COG center. That will be our "ruler" for snapping the next strides. Before proceeding, pick the curve and select the point corresponding to the rear foot. Go Transform, Move Center to Vertices. | |
![]() |
|
As the ruler as been created, keyframe the translation for the foot controllers and for the COG on the initial frame. My animation example will have 20 frames. So the second stride will happen on frame 10. Instead of creating the passing position for the leg at this moment, I will animate these extreme positions: the initial, middle and final strides. On frame 10, move the ruler horizontally, with snap to centers on, till it snaps to the fore foot. You can see that the ruler is not a plane, but that doesn't matter at all. If you pull it horizontally, it will snap to the fore foot without a problem, even not belonging to that plane. Be careful, ok?
|
![]() |
As the ruler is in position, activate snap, but this time de-activate "centers" and turn on "points". Now you do the opposite: move the hips and foot controllers to the corresponding points on the ruler. Keyframe all these objects, no matter if they have moved or not.
Repeat the procedure again for frame 20, creating the final stride.
When all the keys are saved, the character will move in a weird way, the feet will slide a little bit. That's because of the interpolation XSI created between the keys. To solve that, open the Animation Editor, select the proper fcurve (Z, in my case), and set "Zero Slope Orientation" from the Curves Menu, for the keyframes in frame 10.
It will look pretty much like the image below: the interpolation occurs between the values, but when this value is repeated (when the foot stands still), the value interpolates linearly. |
![]() |
![]() |
|
The only remaining procedure before extrapolation is creating the passing positions. In this case, the passing position is the rising of each feet. I also produced a slight elevation of the COG on the passing position. It gets more natural that way... |
|
![]() |
|
When we get to this point, it's time to check the two possibilities for extrapoliating the walk Cycle. |
|
On the Animation Editor. Since we have used the ruler as the base for the stride, we can exterpolate the movement without a problem. If you don't like to use the ruler, you can position the stride by making calculations of the initial, middle and final positions of the hips and then passing the values for the controllers. I think that's far more complicated and unaccurate. If any calcultaion hasn't been done properly, after some cycles we can see the hips going ahead of the foot or vice-versa. Turning on Ghosting on the Viewing properties of the objects, we can see it goes as desired. |
![]() |
![]() |
|
| If you choose this technique, it's still possible to convert the movement in a serie of splines and distort them as we like. In that way, we can make our character climb a stair or make a corner. The procedure is fairy simples. Pick the left foot, for example, and go Character/Biped tags/ Lef foot. Do the same for the Right foot and the COG. Once it's done, Go, Character/ Biped-Deform Motion. | |
![]() |
|
| XSI creates 3 paths and a serie of constraints so the characters moves perfectly along the curve. Since it's editable, we can select the points and move them as we like. | |
![]() |
|
| That's a very cool feature, hope you like it. Now let's go to our next procedure: extrapolation of the animation on the Animation Mixer. | |
![]() |
|
Extraolation on the Animation Mixer Go back a few steps, set the extrapolation of the curves as constant (the default extrapolation) so our character can only take the first three strides, finishing the movement on frame 20. This animation "module" is what matters to us. Lets store this action with Action/ Store/ Transformations-Fcurves. XSI detects it has only 20 frames as shown below. Name it walk-cycle. The animation, as default, will be removed form the object and stored only on the action clip we created. |
|
![]() |
|
| Open the mixer and bring the action clip to the Animation Track. Click with RMB and choose Clip Properties. | |
![]() |
|
| On the Dialog Box that opens, choose Clip Item Information (on the extreme top of the dialog box). There you can see the objects that take part of the movement stored in the action clip, as well as their movemente parameters. At this time, the column "Clip Effect" is empty. The movement we want to additively extrapolate is the kine.local.pos.z. Check the distance that any of the controllers or the hip moves in the 20 frames we animated. A easy and accurate way to check this is open the Animation Editor with RMB on the clip. Select the first frame of the curve and check its value. Check the last frame value and subtract on from another. In my case, the value is 20.8576. It means my puppet walks 20.8576 Softimage Units in 20 frames. Now we can add this expression to every kine.local.pos.z we can find: this+(cid*distance). Assuming the distance is the value I have calculated, this is the resulting expression: this+(cid*20.8576). Once it has been set, we can "loop" the clip by dragging its right-bottom area. If we do this without the cid expression, each loop would make the character go back to the initial frame, without the addition of the distance already walked. | |
![]() |
|