Fernanda
Character Rigging | Yori | Part IV
Updated: May 21, 2021
I'd like to thank my friend and Character Artist, Miki Bishop, for letting me use this character for this series.
TWIST Setup

Happy Tech Art Tuesday! Today we'll be making the twist setup for Yori's left arm.
EDIT: I did a better job explaining the twist setup in the leg. Check it out! The video output is also larger and clearer to see. :)
Today's video tutorial:
Here's an overview of the steps (you can find them time-stamped in the video description as well):
0:00 Intro
02:31 Creating our first new joint
03:20 Using 'distanceBetween' node to get distance between shoulder and elbow
05:06 Creating the rest of the joints and parenting the chain (this is our '_BND_ ' (bind) chain; it holds the skinning information for this setup)
06:03 Duplicating the BND chain to make the TWIST chain (the TWIST chain has the IK spline acting on it)
06:52 Creating the splineIK handle on the TWIST chain
07:26 Creating Clusters on our spline curve
07:51 Creating our twist controls
09:11 CompensateCrv() script
09:28 Parent-constraining the clusters to the new controls (translation only)
10:00 Group controls together and parent-constrain the group to the shoulder joint. This way the controls will follow the FK and IK setups as well.
11:20 New issue: Joint detach from arm when controls are moved far away
11:44 Scale X node editor nonsense
14:58 Adding skinning the BND joints
15:47 Connecting Rotation Y and Z of the controls to the BND joints
16:20 Making the Rotate X gradually diminish as it goes up the chain
ScaleX Diagram
Here's a diagram of the node network controlling the ScaleX in our TWIST chain. This allows the chain to expand as necessary if the controls get moved really far out. Note that the only reason we do ScaleX here is that X is the primary axis in my arm joint chain. You might use a different axis depending on what setup you have.

Gradual RotateX Diagram
The RotateX of the upper arm gradually rotates along with the elbow joint. This is achieved by using a multiplyDivide node that multiplies the RotateX of the elbow by a percentage of your choosing. It then spits out a fraction of the original value that gets plugged into the BND joint.

In my setup, 'l_upperArm_BND_3' rotates in X by the same amount as the elbow. The first joint, aligned with the shoulder ("_BND_0") doesn't get affected by the elbow at all.
Everything in between get's a percentage of elbow.rotateX that gradually dims the farther away the joint is from the elbow.

This setup can change depending on the requests of the animator/art director you're working with. Some people don't like that many twist joints, some don't like to have twist in the upper arm, only in the lower arm. It's important to understand the logic of what's happening behind the scenes so you can modify a rigging technique as necessary! :)
Make sure y'all wash your hands and wear masks!
-Fernanda