The ArmManipulator is able to control a standard arm or leg rig with some advanced features, like moving an FK arm in IK or the opposite. Using this manipulator, the animator moves the arm in the same way, in IK or FK.
In most cases, you don’t have to change the rig, you just have to configure the manipulator to describe how the arm/leg is rigged.
On a biped character, you will need 4 manipulators like this, 2 for the arms, and 2 for the legs.
Each ArmManipulator has 4 sub-manipulators:
- arm_l/arm: It rotates the whole arm in FK
- arm_l/forearm: It rotates for forearm in FK
- arm_l/hand: In rotation, tt rotates the hand, in translation, it moves the arm in IK
- arm_l/elbow: It rotates the elbow around the arm axis
Then, you can paint the ArmManipulator’s sub-manipulators grips on the geometry. Those grips will then manipulate your original FK and IK controllers.
Use the arms and legs ArmManipulator objects created by default. They are named
Or use the shelf menu to create a single ArmManipulator node.
In order for this arm/leg manipulator to control the rig, the rig arm/leg must have at least:
- FK controllers: A shoulder, an elbow and a wrist.
- An IK handle controller: The IK target.
- An FK/IK switch attribute: An integer, enum or float attribute.
To get the full control of the IK elbow, the manipulator also needs to understand how the IK pole vector is rigged. Right now, the arm manipulator can deal with:
- A transform controller which rotates the pole vector position around the arm axis.
- A transform controller the pole vector is pointing at.
- A float attribute which is a rotation angle of the pole vector position around the arm axis.
shoulder_controller: The name of the shoulder FK controller i-e, the controller which rotates the whole arm. Like
elbow_controller: The name of the elbow FK controller, i-e, the controller which rotates the forearm. Like
elbow_controller_rotate_mode: The FK elbow rotation axis. It can be
z. Here we use the
wrist_controller: The name of the FK wrist controller. Like
The name of the shoulder IK controller i-e, the first controller of the IK arm/leg. If you don’t have a IK shoulder controller, set the name of the IK shoulder joint. Like
Describe how the IK pole vector is rigged.
- Position (mode 6):
The ik_elbow_controller is a translation controller, which moves the pole vector.
- Angle (mode 7):
The ik_elbow_controller is a float attribute which is a rotation angle around the arm axis. The manipulator angle needs a direct angle (CCW) in radians around the shoulder->wrist axis. You can use the ik_elbow_angle_mul attribute to set a multiply factor to transform the rig attribute into this angle.
If ik_elbow_mode is between 0~6, this attribute contains the name of the elbow IK controller i-e, the controller which rotates the pole vector. If ik_elbow_mode is
Position(6), this attribute contains the name of the elbow IK position controller i-e, the controller the pole vector is pointing at. If ik_elbow_mode is
Angle(7), it contains the attribute name like :
ctrl_elbow_lis the elbow controller name, and
twistis the float attribute.
This attribute is used only if ik_elbow_mode is
Angle(7). This is a multiply factor to apply to the IK elbow float attribute in order to get a direct radian angle around the arm axis. For instance:
- For a rig angle in radians, set it to +/- 1.0 regarding the orientation.
- For a rig angle in degrees, set it to +/- 0.01745329252 regarding the orientation.
- For a rig angle between 0 to 1, set it to +/- 6.283185307 regarding the orientation.
- For a rig angle between 0 to 100, set it to +/- 0.06283185307 regarding the orientation.
The ik joints’s main axis. It can be negative. In this exemple, it’s
The ik joints normal axis. The joint’s axis with is the normal of the plane formed by the 3 ik joints. It can be negative. In short:
- The name of the node which has the IK switch attribute, like
- The name of the IK switch attribute, like
- The value of the IK swicth attribute to set the arm in IK, like 1.0. In case of an enum, set the integer value.
- The value of the IK swicth attribute to set the arm in FK, like 0.0. In case of an enum, set the integer value.