Tutorial for Arm Solution with Isolated Wrist Setup
For information on the concept of isolated motion see this thread in Jason's forum and buy his second DVD
You may want to download some of my scripts to speed up certain steps. I'd recommend you take the all in one package. You'll get a shelf with it. Whenever I refer to a button, it's most certainly one of my shelf buttons. You should have a skeleton with joints oriented correctly with Jason's script jsOrientJointUI.mel (website) and two control curves. One for the wrist (e.g. DPK_ctrlMoveRotate) and one for the elbow (e.g. DPK_ctrlMove).
Create three empty transforms. Call them "doNotTouch", "controls", and "skeleton". Parent the skeleton under the skeleton group. Now duplicate the wrist joint and unparent it from the hierarchy (press shift-"P"). Delete all of it's children. Name it "wristCtrl". Select the moveRotateCtrl (the curve for the wrist) and press the down arrow to select it's shape node. Shift-select (in the outliner Ctrl-select) the wristCtrl and type "parent -r -s;". This will parent the curve's shape to the joint we'll use as the wrist control. Now delete the remaining transform.
Do NOT freeze transform it! Rather select the wristCtrl and press the grp button. Parent the new group under the controls transform. Now the elbowCtrl. Parent it to the elbow joint (or lower arm etc.) and set the translate and rotate attrs to 000. Unparent with shift-"P" and, with it selected, press the grp button. Parent the new group to the controls transform.
Polevector constrain the arm_ikHandle to the elbowCtrl. Parent the arm_ikHandle to the wristCtrl. Don't worry if your joints flip... just move the elbowCtrl a little and set it back to 000 translates (seems to be a bug in 4.5). Now set the "visibility" attr of the arm_ikHandle to 0 and lock it.
Select the wristCtrl_orient, press the const button, and choose "orient". Parent the new node under the elbow joint (the one above the wrist joint).
Select the wrist joint, press the const button, and choose "orient". Parent the new transform under the wristCtrl. Now the setup should already be working! To get the "local" attr to work, just select the wristCtrl_orient again, press the const button, and choose "orient". Parent the new transform under the doNotTouch group. Now select this new transform again and press the grp button. Create a reverse node (createNode reverse;) and connect the "local" attr of the wristCtrl to inputX. Connect the outputX of the reverse node to the second weight attr of the orientConstraint node from the wristCtrl_orient (W1). Connect the local attr from the wristCtrl to the first (W0).
Hope that helps. Daniel |