Creating a successful tail motion using time delays
By Michael Malinowski
look at anatomic structures of creatures, and how these creatures deform
we can immediately see that different parts of a creature requires a
different methodology behind the rig to get the movement required, for
instance not every movement a creature makes can be done using just bones
through IK or FK (or at least not with out a lot of heart ache for the
One of these area's are the creation of Tails, obviously the movement of this is completely different to say the movement of a leg or arm.
This is a fairly quick method of setting up a tail so that the animator only ever has to animate on one CTRL object to get a natural flow. The methodology for this is quite simple, so lets start by creating a chain of 5 bones, I will then select the root, and set the shadow effector to a box (purely just for cosmetics as it makes it much easier to see, a good rig is not only functional in what it does, but has to be easy to understand from any animators perspective).
comes the fun part of expressions, the first thing to note is that the
expression we will be using for this runs from Keyframed animation, so it
will return an error if were setting a time delay to an object that has no
animation set on it, so to begin with, select the root, and set a rotation
keyframe on it.|
Select bone1 (or the relative name of the first bone in the chain), then open the local kinematics ppg, right click on the desired rotation plane, I will be using the Z axis and choose to set an expression.
I will presume that the root of your chain is in fact called "root" and your bones are called "bone1, bone2" etc.
Now type this into the expression editor :
Basically, this is telling XSI to match the bones rotation to the root's rotation, but get the value from 10 frames before the current frame. So with the first bone in place we can begin to work on the rest, because we want each bone delayed slightly more than the previous one all we need to do is copy the above expression, paste it onto the rotz of the next bone, and increase the delay from 10 frames to 20 frames, and so one, so by the end of you should have something like this :
Root - keyframed animation
Bone1 - At_frame(fc-10, root.kine.local.roty)
Bone2 - At_frame(fc-20, root.kine.local.roty)
Bone3 - At_frame(fc-30, root.kine.local.roty)
Bone4 - At_frame(fc-40, root.kine.local.roty)
you set some rotation keyframes along the timeline you will see how the
tail works, you might note and want to remember, that because all your
rotations are delayed you want need to animate the extremes of the
rotation values much, as the tail whips outwards, after a short time
playing with it you will quickly see how it reacts.|
You can then set the same methodology to the X axis also to get the tail moving both side to side and up and down. The same methods can be used for creatures such as snakes also, but remember that you loose manual control through this method, though there will be a tutorial on this online soon.
|As it is now is all well and good, however, what if we want to adjust the tail whip throughout the designated animation? The more control we can give the more productive the rig will most likely be. One way to give control of the whip action is by selecting the Root, and whilst in animation mode go Create/Parameter/Custom Parameter Set, name it Tail_Whip_CTRL.|
have a blank parameter set attached to the root, here we can begin to
create sliders for the tail whipping.|
With the root still selected go, Create/Parameter/New Custom Parameter, this should open a window asking you details about the parameter you are trying to define, first off lets adjust the name, we will call it Bone_01 set the minimum to 0 and the maximum to 50, now set the value type to Integer and make sure the animatable box is checked. You now have your Parameter defined for Bone_01, though this wont affect the bone just yet, first we need to select the first bone, open the expression we set up earlier (through the local kinematics window) and replace the expression with this one :
At_Frame( fc-root. Tail_Whip_CTRL.Bone1, root.kine.local.roty)
is doing is telling xsi that instead of defining a value directly in the
expression window, we want it to take the value from the custom parameter
we just made, so if you adjust that slider and play your tail animation
you should see a difference. Now its just a case of repeating that process
until you have a parameter defined for each bone.
Experiment & Enjoy
have any comments or queries regarding this tutorial, please email me
firstname.lastname@example.org . Thankyou.