View Full Version : Ik Fk Arm Setup [Tutorial]

01 January 2008, 01:53 AM

Tutorial Features:

A 45 min comprehensive tutorial on how to setup an ik/fk arm
How to avoid some pit falls with building an ik fk setup
Building simple animation controls
Simple blending without constraints and using the power of utility nodes
How to build a switching script that is BUILT IN THE RIG
Script will work with referencing and make it so the arm will NEVER pop or float between modes
<< Tutorial Link >> (

01 January 2008, 05:48 AM
Thanks! I like the idea of using a blend node rather than sdks. Nice and clean.

01 January 2008, 01:29 AM
I'm all about going the easiest path whenever possible.
The blendColor is perfect for this just as long as the orientations are to the same. If not, then you'll end up having to use orient constraints and sdk's/inverse node method.

Glad you got some nuggets of info out of it :).

01 January 2008, 10:04 PM
good tutorial sean :)

for IK FK switching I normally use a direct connection for 1 weight, and a reverse node for the other. works great :)

01 January 2008, 03:06 AM
Really, really, cool setup. Just the sorta thing I been looking for, but I'm not that advanced so I really appreciate this tutorial! THANK YOU!
I myself have been trying to write a script to make a seamless switch between planting a hand and have it follow the elbow joint.
If u don't mind here's a LINK ( to the post

01 January 2008, 08:28 PM
I like this idea, it seems much cleaner than using an orient constraint and eleminate the possibility of a joint flipping. However, it doesn't work for me for some reason.

I still use maya 7 for animation, although the modelers here use 8.5, so I have tried this on both versions and both times the same result. All my rigs here are scripted so it was easy to alter 1 script and change the rig to use the blendcolors node instead of orient constraints. After building the rig it worked great, but when I loaded an animation which referenced in the rig, the real skinned joint chains didn't update.

When posing the rig, everything works great, but scrubbing the time line stops the rig from working. What is strange is that the values in the channel box are correct, it's just not rotating the joint in the view port. By this I mean the legs where switched to IK, and looking at the channel box for both leg chains (the skinned chain and the IK chain)all the rotation values where the same. Both chains where parented to the hip joint the same, and the IK one was a duplicate of the skinned one, so they are aligned the same. Whats strange is that I tried baking the animation on the skinned joint chain and it started updating correctly, so I know it's getting the correct rotations from the blendcolors node, it's just not updating in the viewport.

Has anyone ever seen somthing like this, where a utility node will not update correctly when scrubbing the time line? and more importantly, is there a way to force a update?



01 January 2008, 10:29 PM
Hmm, never come across that issue before. I guess I'd try referencing in a clean rig, put some simple animation on it and see if you get the same result. Referencing can do some odd things some times. When referencing has somehow messed up the scene, I've had an animator export out the animation into a textfile, bring in a clean rig and re-apply the animation. This usually corrects any issues.


01 January 2008, 04:42 PM
Perhaps I'll try that at some point, but even if it did work we have about 20 rigs and hundreds of animations on each, so It's not worth changing the rigs if I then have to fix all the animations.

I will give it another go at some point soon, perhaps it's the spine rig not setting the legs as dirty when it updates for some strange reason. I'm using a splineIK spine set up which seems to be a standard rig today.

Thanks for the reply,


01 January 2008, 09:55 PM
Hey, the page doesn't seem to be loading for me. Is the server down?

Thanks for your time and effort :)
I've been using constraints, switching them on and off with set driven keys, though i get problems trying to get the ik hand manipulator to follow the fk one. Hmm

So hopefully this will help me.

Edit: Its loaded now, i think it was just a bandwidth issue/timeout.
Checking in out now. cheers!

01 January 2008, 10:38 PM loads for me. Do you get the opening player window? Clicking on the play button worked fine.

If you get it to work, I hope it helps you.


Scott Ayers
01 January 2008, 10:58 PM
The link doesn't work for me either.
Is there any chance you could post the direct link to the .mov file or whatever format it's in?
I'm on dial-up so I have to use a DL manager to DL big files a little at a time.

Sorry for the trouble.
But I'd really, really like to see this tutorial.

01 January 2008, 02:43 AM
Dang it. I just checked it again and worked for me. It is a big file, over 200mb.
If you want to download the .swf file. Just take the link and replace the ".html" with ".swf" and then goto file->save as.. and that should let you download it directly.

Could be that there could be a number of people accessing it and is killing the bandwidth.

Let me know if you still have issues.


01 January 2008, 01:06 PM
works for me .Nice tut !:thumbsup:

01 January 2008, 10:30 AM
I was wondering. Is it possible to have it setup to switch in the attribute list instead of the right mouse button?
and also can this be implemented to work with stretchyness?

01 January 2008, 04:49 PM
So if I understand you correctly, you are asking if you were to switch from one mode to another in the channel box, it would automatically fire off a script.
Yes, it is possible with a scriptjob running that tests if an attribute has changed or not.

Yes, you can implement this into a stretchy setup. Takes somewhat of a different path of the rig setup, especially the FK controls. The biggest challenge would be bendy arms. You would have to have just as many joints for each setup.

What I've shown is just a core example and can easily be expanded on.

01 January 2008, 05:56 PM
Ok, thanks alot for your reply. You mention a scriptjob. What would this look like?
Could this be done with a simple if statement?
Something like this:
if (l_hand_ctrl.switch = 1)
then run this match-script for ik to fk.

if (l_hand_ctrl.switch = 0)
then run fk to ik.

Or would you have to do something more advanced that is constantly updating and look if the value has changed?

I'm terribly sorry for my lack of mel knowledge, but I hope I can get my point through.

01 January 2008, 07:18 PM
Well you would do something kind of like:

scriptJob -attributeChange ctrl.ikfk switchIKFK;

Where switchIKFK would be a script to determine what mode you are in and fire off your matching accordingly.

However the process I describe in my tutorial you don't have to select an object and change an attribute, you just have to hover your mouse over the control and right click to pull up the RMB menu and click. It's a bit faster workflow wise for an animator and bit less overhead in the scene with having a scriptjob running in the background waiting for some event to happen. My preference is to not have any scriptjobs or expressions in the scene whenever possible.

01 January 2008, 10:18 PM
Thank you. Yes you are right, I should be learning to do it this way instead, for faster workflow. I've just been afraid to leave the channel box =)

01 January 2008, 05:02 AM
Don't get me wrong...I'm not saying my method is the only way. There are I'm sure better ways of doing this. Just from my own experience and handling animators requests, this seemed to help them and their workflow. Taking out a "select this" and "edit this" out the picture is just a small part :).

02 February 2008, 01:24 PM
Very nice of you to take time doing this Sean. Thank for sharing. :)

And all the best to you at Dreamworks! :buttrock:

CGTalk Moderation
02 February 2008, 01:24 PM
This thread has been automatically closed as it remained inactive for 12 months. If you wish to continue the discussion, please create a new thread in the appropriate forum.