Forearm Twist: An Animation Solution
Forearm twist is approached many different ways, but the two main camps are: automated and manual. Automation, as you'll see below, has number of technical hurdles which causes errors and unwanted results. Manual, on the other hand, provides exact results, but is far more labor intensive. After posting this write up online, the main response I received was, "automation, even with it's faults, is better." I agree with this to a degree, but would modify the statement slightly. I fully agree that a stable, automated solution is great to have (I personally use one similar to this http://www.creativecrash.com/tutorials/advanced-non-flipping-upper-arm-roll), but I still include the option to turn off the automation as well as override/correct it. This element I believe is key, if you are going to setup an automated roll, build in a corrective/manual solution from the start. It will take a bit more time to build, but will hopefully benefit you with the best of both worlds. With that being said, below is my orignal write up.
Sometimes the simpliest solution is the best. I believe this is the case with Forearm twists in a character rig. Many setup artists feel it is their duty to create an automated twisting solution that is later driven by our animations. With the sheer number of hurdles involved with this task, I always suggest giving control back to us, the animators. Here's my personal (though not developed entirely by me) solution I use when dealing with forearm Twists.
3 Joints (Forearm_1, _2, _3), evenly spaced between the Elbow and Wrist Joint, each forearm joint parented to the former, then parented to the elbow. All withen the bind skeleton.
A single Twist Control, parent constrained under the elbow joint, that has all of it's channels locked except for Rotate X (or whatever the twist axis is).
Twist control's rotate x directly connected to the twist axis of each forearm joint
Weighting for the Forearm then becomes Elbow > Forearm1 > Forearm2 > Forearm 3 > Wrist. All weighted 1 to 1, with slight fading to ease the transitions between joints
Pro's for this setup
Works 100% of the time. Doesn't break with extreme poses or rotational values on the wrist
Allows animators to control secondary such as fatty jiggy or sleeve flapping
Allows animators complete control to spot fix the forearm for a single frame or sequence, without adjusting the wrist animation or having the setup artist apply either an overlay or disabling system to their forearm twist solution
Rides atop the existing 3 joint chain (bind > IK > FK) control rig for the arm.
Faster to setup, rig runs faster with an easier setup, less calculations / nodes
Joint based solution works in game engines
Twist control as a rotation connection not a custom attribute. Allows animators to interact with the control the same way as any other control in the rig and use hotkeys to switch over to rotation. Not having to slide a channel around and keep glancing back at the results
parenting the 3 joints under each and doing a direct connection doesn't require the creation of additional nodes (typically a Multiply Divide) to even spread the rotation from the controller to the joints.
Gives setup artists a clean value, typically between -180 and 180, to work with to do post work, such as corrective blend shapes
With the Twist on a seperate control, the twist can still be animated regardless of how the arm was animated. Wouldnt make since to put it on the IK or FK control
No need to place additional joints withen the 3 joint chains that can cause IK FK blends to missbehave or having the animator to work with the Twist joints while in FK mode to angle the arm.
With a 3 Joint twist, higher volume is retained, based on joint rotation and weighting, over other solutions (see below).
The Major hurdles of an Automated forearm Twist
When the wrist is rotated is the primary reason why a simple automated solution for forearm twist fails. Based on how rotational values are calculated in 3d space, whatever twist axis your connected the twist to will go outside of the -180 to 180 range. Because a single value is not entirely reliable, connecting to anyone of them will break at some point.
Following right after Gimbal lock, depending on how the rotation is calculated the axis you choose to base the twist off may no longer exist or accurately represent the twist value.
Lack of override/disable capabilities.
On larger or fatty characters, having the ability to jiggle parts of the body can really show added weight and realism, or even push the style of the piece. When the forearm twist is calculated automatly, this is lost. So to go back and reapply an override to allow the animator this level of control, you could easily cut out the middle man and allow the animator to have full control from the start. Dealing with a disable feature for more automated setups, if the animator or setup artist has to preform a spot fix, they'll have to dig deep in the rig to find the 'off' switch for the twist value. The Animator digging through the rig can lead to a whole new set of problems and possible breakage. Also, if a spot fix is needed on a per frame basis, having to manually adjust the twist value is just another strong point to have it manual from the start.
Other Solutions and their short comings
Blend shapes are a linear interplation, so volume loss will occur during the transition from one shape to the next. Blend shapes still need connection to drive them.
Aim Constraint with the Up Object being an element under the wrist control. Promotes odd skewing and can break easily. The Aim's rotation value would have to be piped down a chain regardless.
IK Chain with Pole Vector
IK chain with the Pole Object being an element parented under the wrist control. Promotes odd skewing and can break easily (flipping if the wrist bends straight down), still need more joints for fall off, also, the pole object would hav to calculate for both the IK and FK control, depending on how the arm was animated.
Set Driven Keys
SDK based off the twist of the wrist joint. No secondary control for animators, wrist may go past the keyed values when hitting gimbal. Increased setup time.
Orient/Parent constraints still will hit the gimbal and rotation order issues, when the wrist is rotated extreme amounts.
Anatomically Accurate Setup
Dual IK setup on two joint chains to recreate the anatomically accurate bone structure of the forearm. Difficult to setup, along with more rig elements to manage, and in the end, still doesn't address the twisting in a useful manor, as the IK's end effectors need to be constrained to the wrists orientation in some way.
Joints based into the Arm Skeleton
Building the joints inside the existing skeleton can create a convaluted and difficult to animate setup. Having the joint chain be Shoulder > Elbow > forearm > Wrist adds in the Forearm that can cause skewing in the creation of the IK handle, blending to FK, adding another level of difficult animating when adjust the forearm twist amount as it will effect the wrist rotation.
Limiting Rotation Values of Wrist Animation Control
Limiting an Animator's options goes against the idea that control rig is built to their needs. Though animating withen such confines is possible, it's very frustrating, time consuming and slows the speed of the animator greatly. A rig may need a character to twist their wrist more then the limited amount, prehaps while accenting a pose or pushing an arc to best fit the camera, in this case, the rig is now limiting the performance.
Forearm twists, or any interior limb twisting, can be extremely difficult to automatically solve for, while an animation solution may be more partical. However, all the above solutions do not hold a candle to a well constructed muscle/simulation rig. If your fortunate to work on project with a dedicated technical artist to manage the muscle setup, the results can be spectacular. For all other projects, spreading the twist over three joints can yield a solid base of desirable results, that should hold up until the most extreme situations.
Other Opinions, Further References, Typos, and Grammer Issues please contact KielFiggins22@gmail.com