« Fake IPO drivers using Constraints…
The Lighthouse now in the Gallery »

About IK-FK arms


While testing with Alambrito, more precisely, with Alambrito’s arms, I ran into the old problem of going from IK to FK and viceversa.

Common arm setups include either two chains, one for IK and the other for FK (and also deform the mesh) or three chains, one for IK, second for FK and a third for deforming the mesh. Deforming chain takes the pose of IK or FK chain depending on the location of a slider that drives the influences of a couple of Copy Rotation constraints.

Now, for this to work smoothly, we have to be very careful about how the arms are set up or we are likely to suffer several annoyances when switching from IK to FK and the opposite.
To help keep track of these errors I prepared the following checklist of little details we have to take care of when rigging an IK-FK arm, here it comes:

  • Arm joints and bone rolls should rest on a single shared plane. This means in short, that the arms should be aligned to at least one of the main orthogonal axis. If the character has its arms arranged in a cross in front view, then the Shoulder, Elbow and Wrist (SEW) joints should be scaled to zero in Z so they are aligned to X axis, and the rolls of the arm and forearm bones should have their Z axis perpendicular to the SEW plane (which is parallel to the orthogonal XY plane). If arms are arranged parallel to the torso instead, then SEW joints should be scaled to zero in X axis so they are aligned to Z axis in front view, and bones’ Z axis should be perpendicular to the SEW plane (which is parallel to ZX orthogonal plane). If our character was modeled in such a way its arms cannot be straighten in front view, then they should be aligned in side view. Theoretically they could be aligned to any plane but in practice is very difficult to determine the SEW plane with enough precision to avoid errors in IK-FK poses.
  • The POLE in the IK chain must be located EXACTLY on the SEW plane (this is why it is so convenient that the SEW plane is parallel to one main orthogonal planes). Simplest way to achieve this is to select SEW joints in edit mode and snap the cursor to this location. Then snap the pole to cursor and if it’s too close to the other bones, it can be displaced along the SEW plane.
  • The sense of the POLE vector in both sides should be opposite. This is important to avoid unwanted rotations when copying visual poses of IK chain to FK chain. I haven’t found any differences in Pole vector directions but in the sense of it. The particular senses of the Pole vectors don’t seem to be important by themselves, only that they are opposite in both sides. EDIT: Actually it is important ! I found it in the arms-parallel-to-torso setup that I had to switch direction fo both poles in order to fix a small rotation difference in the initial and final poses. My guess is that it follows the screwdriver rule as in vectorial maths.
  • From all precedent we can also deduce that right and left arms have opposite rolls. In other words if the roll of right arm is such that Z axis points upwards, then left arm roll must be such that Z axis points downwards. This roll usually has to be edited manually since if we did CTRL+N to recalculate them and we had the X-AxisMirror option activated, both rolls should be pointing at the same direction by default. Rule of thumb is that both have a 180 degrees difference.
  • All these considerations about roll are for the bones belonging to the IK chain (and the homologue in FK and deformation chains), speaking of an arm-forearm chain only these two bones and the pole need to follow these indications.

    One easy way to detect problems in our chains is to pose them exactly the same (Copy Visual Rotation) and switch from FK to IK and the other way round quickly, NO CHANGE SHOULD BE NOTICED IN THE ARM. If change is noticed, typically a twist at the shoulder or a difference at the elbow it means we forgot something from the checklist.

    One more detail. When using a three chains setup, I have noticed that there is always a minor problem. If we switch slowly from FK to IK it is still possible to notice the bones going apart from the pose and then come back. This is a secondary effect only visible in three chains setups, in a two chains setup it doesn’t happen. However if everything else is right, there should not be any difference between the initial and final poses. So if the switch is done in one frame nothing should be noticed.
    As a suggestion, the distance the slider have to slide, should not be longer than 1 blender unit. This way if we press CTRL while dragging the slider (so it jumps 1 blender unit), we will not notice this secondary effect and we can compare initial and final poses much more easily..

    Anyway, hope this helps and Merry Christmas !

    This entry was posted on Tuesday, December 23rd, 2008 at 11:46 am and is filed under Blender, Rigger Tips. You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.

    5 Responses to “About IK-FK arms”

    1. JiriH Says:
      January 16th, 2009 at 2:23 pm

      Hello malefico. this is really nice research.
      What do you think about Nathan`s approach (also advised in Peach (BBB) rigging tutorial) that X axe for the rotations is the main and primary so should be positioned according to global Z referring to T character position?
      It is true that Blender does not have possibility to set up rotation axes order (like Maya) and general order is XYZ (if I am not wrong). You can see Nathan`s standard arms axes orientation for example his bipedrig here: http://blenderartists.org/forum/showthread.php?t=131079&highlight=biped+rig
      More interesting this question is concerning Blender 2.5 where AnimSys2 introduces Eulers, much better solution for animators.

    2. malefico Says:
      January 19th, 2009 at 10:15 am

      hey JiriH thanks for that ! I must admit I was rather ignorant about that X to Z aligning rule, but I think it’s worth following that advice. My aproach has always been trial and error, so I might have missed some theorical concepts and in the end just used what worked for me.

      Animato (animsys2 now in 2.5 branch) indeed introduces Eulers as an alternative for Quaternions, but I think that is useful just in a few situations and only for user-friendlyness purposes as Eulers are easier to understand. Quaternions were first introduced to solve Euler’s Gimbal Lock problem if I’m not mistaken, so I’d stick to Quats for all internal calculations. I think best thing about Animato will be that if it accomplishes the “everything is animatable” goal we could soon enjoy animatable armature options like being able to turn hinge option on/off etc.

      And python access to everything ! :D

    3. JiriH Says:
      January 19th, 2009 at 1:55 pm

      Yes, “everything” animateable” and python scripting will be great boost for rigging and animation.

      By the way as you have mentioned the example of hinge switching I have presented quite acceptable solution already possible in the Blender in this thread:
      http://blenderartists.org/forum/showthread.php?t=144845

    4. z3255862’s blog » 3D Modelling & Animation - Week 04 Says:
      April 10th, 2009 at 7:34 am

      [...] I was originally using the FK character, but came across trouble as I was trying to rotate the elbow. The movement as the skateboarder shifts and transfers his weight between almost standing, to push and finally jump, is quite fluid and effects each joint independently. So I returned to the beginning with the IK character instead. [...]

    5. Ca's Says:
      December 5th, 2009 at 12:11 pm

      Very good!

    Leave a Reply


    malefico’s spot is proudly powered by WordPress
    Entries (RSS) and Comments (RSS).