Category Archives: RIGGING

Maya Muscle Smart Collision Test

This is one of the demo videos from the Maya muscle smart collision test, which I  have been doing for the past few days.My initial plan was to start of with the skinning using Maya joints itself and convert it to Maya muscle system.But later I changed my mind and decided to go with rigorous testing of all the options provided by the Maya muscle menu set.Even though I had a glimpse at the options during the release of maya 2008 extension 2 itself, this was the first time I got to explore the skin weight options provided by Autodesk. Believe me, Autodesk has packed a lot of options keeping in mind the immediate need of a character setup artist that you will never want to go back again.

This one is the image of the muscle setup I used for testing the deformations.I didn’t spend much time on sculpting the muscle shapes.The target was to simplify various muscle groups in to one which would provide me enough options to test out the deformations.


Of course there were some bugs here and there which I found quite irritating, I was fortunate enough to find some solutions to them.

1.Maya was retaining the selection of the first muscle objects created showing some garbage values in the channel box.Unless you undo the first muscle and start it all over again, Maya wont show any signs of defeat.

2.Maya would end up in a fatal error if you ever happen to scrub the time line once the muscles have been bound to the mesh.This can of course be fixed by caching the geometry, But users like me who got accustomed to  skinning the models by setting keys on the joints, are left with no choice other that creating floating GUI to control the joint rotation without deselecting the geometry.

Overall the collision feedback is fairly good with lot of skinning options  to control each invidual portion of the geometry.


strechy ik with variable autostretch tutorial

This tutorial will demonstrate the procedure to setup a stretchy ik setup in maya using utility nodes.The procedure involves the use of maya utility nodes (clamp,addDoubleLinear and multiplyDivide) to setup a stretchy ik chain with custom attribute autostretch that will allow the animator to predefine the extend to which the joints get stretched.

you can download the example file here

Cartoony head stretch n squash

This maya tutorial will take you through the procedure for setting up a head with stretch and squash ability to a character rig .Here I have made of lattice, joint and a bunch of utility nodes to get better control over the squash and stretch instead of using the non linear squash deformer.The techniques shown below can be incorporated in to any kind of cartoony rigs , giving the animators the flexibility to get appealing character deformation.In addition to that there are custom attributes for maintaining the volume and also for manipulating the amount of squash.

you can download the example file here

Foot Roll Using Utility Nodes (remapValue)

This tutorial will demonstrate how to setup foot roll for a character using remapValue utility node. I came across the need for this kind of setup when there was constant demand from animators of the project I am working on, in which they wanted control over when the toe roll gets triggered.(If the foot roll was a value from 0 to 10 then they wanted the toe pivot to rotate during a random foot roll value(between 0 and 10)).So I had to think of a setup different from the conventional setup of set driven keys.Below is the step by step procedure for setting up the adaptable foot roll using remapValue nodes.

Create a joint chain for the leg(femur>tibia>ankle>ball>toe).Create ik handles from femur to ankle(RP solver), ankle to ball(SC solver), and ball to toe(SC solver).Create three groups(ankle_grp, ball_grp, toe_grp) at the respective ik handle position.Parent the ik handles to the respective groups.Create a leg control and add attributes[roll(min-0,max-10,default-0), roll_multiplier(min-0,max-90,default-45), roll_trigger(min-0,max-1,default-0.5)].Parent the ik handle groups under the leg control as shown below.


Create two remapValue utility nodes using the render utilities window or by running the command createNode  remapValue in the Script Editor.Rename first remap value as ballRoll_rmv and the second as toeRoll_rmv.


select ballRoll_rmv and go to Attribute Editor and add inbeween value of 1 at position 0.5 in the value graph as shown in the figure. Edit value at position 1 to 0.


select toeRoll_rmv and go to Attribute Editor and add inbeween value of 0 at position 0.5 in the value graph as shown in the figure. Edit value at position 1 to 1.


Make the following connections from foot_ctr to ballRoll_rmv and toeRoll_rmv.

leg_ctr.roll to ballRoll_rmv.inputValue.

leg_ctr.roll_trigger to ballRoll_rmv.value[2].value_Position

leg_ctr.roll_multiplier to ballRoll_rmv.outputMax.

leg_ctr.roll to toeRoll_rmv.inputValue.

leg_ctr.roll_trigger to toeRoll_rmv.value[2].value_Position

leg_ctr.roll_multiplier to toeRoll_rmv.outputMax.

ballRoll_rmv.outValue to ball_grp.rotateX

toeRoll_rmv.outValue to toe_grp.rotateX



Set leg_ctr.roll_multiplier to 45 and leg_ctr.roll_trigger to .5

By varying the roll_trigger attribute, the animator can decide where the toe pivot rotation gets triggered.

You can download the example file here

stretchy ik global scale fix

For the people who are already familiar with setting up a stretchy arm setup using utility nodes(or expressions) this example will show how to fix the problem of double transformation when the character global control is scaled.After interacting with a couple of students who are pursuing their animation course I came across the query regarding the double transformation problem.

The usual approach to create a stretchy ik handle is by creating a distance dimension node and calculate the scale factor by dividing the increased distance by the default distance.This works as long as the scaling is not changed.But once we scale up the global control the distance between the locators  (dist between shoulder locator and wrist locator in the case of arm control)which are grouped inside the master control  increases(since they are either grouped or constrained to the controls which are inside the master global control).So this leads to a increased distance value being passed to the condition node.

increased distance = distance * globalScale

and hence scale factor, which is given by

increased distance/default distance becomes   distance*globalScale/distance= globalScale.

so here we can observe that the wihout even moving the ik control itself the scale factor increased, which is not what we want.We want the increase distance to change only when the control is moved past the limit.

so we have to compensate the effect of scale by dividing the distance passed to the condition node by the globalscale value

This can be achieved by inserting a multiplyDivide node inbetween the distancedimension node and the condition node as shown below.

1. connect distanceDimensionShape.distance to  multiplyDivide.input1X.

2.connect globalControl. scaleY (or even scaleX or scale Z) to  multiplyDivide.input2X.

3.connect multiplyDivide.outputX to conditionNode.firstTerm and conditionNode.colourIfTrueR.

4.set multiplydivide.operation to divide.


You can download the example here

I have included two arm ik setups in the scene.Left one with utility nodes and using translate for getting the stretch and the other with expressions using scaling of the joints for achieving the stretch.