Back to Overview

IK Correctives

Tools & Techart Topics

Since Kiel Figgins shared his setup for correctives last month I wanted to share a simple version of my setup as well.

The setup contains the twist of the arm and 2 push joints on the elbow to get better deformations.

ik arm

Roll setup

The roll setup makes use of the ikSCsolver in the Ik-Handle. The chain is just 2 joints big, from the shoulder to the elbow both having the same orientation as the shoulder. On top of this chain we add the ikSCsolver IK. Both the chain and the Ik-Handle need to be parented to the parent of the shoulderbone. Then from the elbow we add a pointconstraint to the Ik-handle so it will follow the arm wherever it needs to go.

arm roll

The ikSCSolver keeps the orientation of the shoulders parent will its manipulated to follow the arm. This makes sure that the new chain will not get the twist down the X-axis. extra bones can be added between to divide the twist using the shoulder and the 1st bone of the roll chain as rotation drivers.

The setup works exactly the same for the wrist, but now the chain and Ik-Handle are parented to the wrist.

Note: In the export skeleton (in the skeletonGrp) I have both the rollbone and the wrist bone added, this gives a better skinning deformation when the skin blends between the 2 bones.

This is a setup I have used for all the rigs I have created by hand, and since last year I have added the push bones to the elbow as well as they can give that little bit of structure to an elbow that you cannot fake with just skinning.

Push Bones

The push bone setup uses just 2 bones, 1 for the offset that keeps the hierarchy on the elbow, and one to do the actual push. The base joint has an orientconstraint from both the shoulder and the elbow so its always oriented exactly in the middle.

From there the rotation of the elbow is fed into some math nodes to create the push:

Push nodes

  1. The rotateY is used here as that is the channel used to bend the elbow
  2. multDoubleLinear: Multiply the rotateY of the joint * (1.0/360.0)
  3. multDoubleLinear: Multiply with over-rideable value this value is an attribute on the maincontrol now, but can be hidden as well, it requires a bit of fiddeling to get the best deformation in pose.
  4. condition: If rotation less then 0, use multiplication, otherwise output is 0 This prevents the push to do anything when the arm is extended. If its going the correct direction it will actually push the bones.
  5. addDoubleLinear: Add the new offset to the original offset from the elbow position The rotation starts with 0, so we need to make sure that the joint we have now uses this original position to add to it.

This setup is used 2x, as said, fiddeling with the mulitplication attributes will give the desired results.

have a look at the scene over here: File