Keywords: Animation, Maya Rigging, Controller, Pole Vector, Space Swapping, IK Controller

Maya Rigging series of articles:

Asset mentioned in articles: UE5 Rig

Space Swapping - Pole Vector Controller

1, Create a locator named swappos_arm_ik_l.

2, Match Transformations from swappos_arm_ik_l to the Pole Vector controller (ctrl_arm_pv_l).

3, Parent locator swappos_arm_ik_l to the arm IK controller (ctrl_arm_ik_l).

Now ctrl_arm_pv_l moved follow with IK controller.

4, Don’t forget optimize the Offset Parent Matrix of swappos_arm_ik_l.

5, Build the driven process for ctrl_arm_pv_l.
the blendMatrix isn’t the required node in current step, we will use this node later.

6, When rotate the root controller, the ctrl_arm_pv_l moved to the wrong position.

Solution:
Blend the root controller transformation using multMatrix node.
Result:

7, Create attribute named Follow in ctrl_arm_pv_l.

8, Build the driven process for the switch Follow.

9, When switch to the World Space, the ctrl_arm_pv_l moved to the wrong position.

This is because the input argument Input Matrix of blendMatrix node wasn’t initialized.
We need to pass the transformation of swappos_arm_ik_l into Input Matrix of blendMatrix node.
Solution:
Connect swappos_arm_ik_l to the blendMatrix node, then disconnect it, then the transfromation of swappos_arm_ik_l was remained in.
Now the switch Follow works right.

Space Swapping - Hand IK Controller

1, Create a switch named Follow in hand IK controller ctrl_arm_ik_l.

2, Create 3 locators: swappos_torso_l, swappos_hip_l and swappos_clavicle_l.

3, Match Transformations from these 3 locators to the ctrl_arm_ik_l.

4, Parent these 3 locators to ctrl_torso, ctrl_hip_ik and ctrl_arm_root_l. (hotkey: P).

5, Build the driven process.
Connect ctrl_arm_ik_l to the blendMatrix node, then disconnect it to remain transformation value into the blendMatrix node.

Then connnect swappos_torso_l, swappos_hip_l and swappos_clavicle_l to the blendMatrix node.
Then Add floatCondition nodes as switch for different enum (space types).
Set the Input 2D[1] as -1, -2 and -3, because the enum values of switch Follow is 0(World), 1(Torso), 2(Hip), 3(Clavicle).
Set the Float A as 0, and set Float B as 1.
At last, connect Output Matrix of blendMatrix node to the Offset Parent Matrix of ctrl_arm_ik_l.
Result:

Build the drive process for legs likes above.

Issue: IK Controller Rotation with Pole Vector

After the Pole Vector has been built, there’s a deformation issue while rotate foot IK handle:

This is because the Pole Vector handle crossed the plane that the leg joints was belonged to when the Follow type was set to Foot.

Solution:
1, Disconnect connnection for swappos_foot_ik_l and ctrl_leg_pv_l. aaa

2, Then move down the ctrl_leg_pv_l to the forward of foot.

Because we just the move up and down, forward and back, not left and right, so we don’t need to delete Pole Vector constraint. If want to move right and left, the Pole Vector constraint need to be removed and re-created after changing position.

3, Optimize the Offset Parent Matrix of ctrl_leg_pv_l.

4, Unparent the swappos_foot_ik_l.

Match Transformations from swappos_foot_ik_l to ctrl_leg_pv_l.

Then place the swappos_foot_ik_l into ctrl_foot_ik_l.

5, Optimize the Offset Parent Matrix of swappos_foot_ik_l.

6, Re-connect the node for swappos_foot_ik_l and ctrl_leg_pv_l.

7, Now we can swith Follow type for ctrl_leg_pv_l.

Now we can rotate ctrl_foot_ik_l a lot without deformation issues.

References

Realtime Creature Rigging Workshop (14 / 19) : Space swapping
https://www.youtube.com/watch?v=CTvZntXh7Bs


战国战争史:韩灭郑之战
韩灭郑之战,是公元前423年至前375年间韩国为了灭亡郑国而进行的多场战役的总称。 韩灭郑之战是战国时期一次重大的兼并战争,韩国通过多次进攻消灭了具有悠久历史的郑国,国力迅速上升,成为战国七雄之一。但当时韩国地处黄河中游地区,东部、北部被魏国包围、西有秦国、南有楚国,国土面积十分狭小,因而发展空间极其有限。