12 KiB
| title | description |
|---|---|
| Inverse Kinematics | Inverse Kinematics is a technique in computer animation to make characters move and interact with their environment. |
Inverse Kinematics (IK) is a common technique in computer animation to efficiently make characters move and interact realistically with their environment. The process of creating a realistic movement for a character often requires many iterations and minor adjustments of the various joints. With IK, you can pose and animate multiple character parts by posing or adjusting a single object.
This animation technique can provide solutions to the following examples:
IKControl
You can use an Class.IKControl to procedurally add IK to your character rigs outside of the Animation Editor. Studio allows you to programmatically apply IK to all characters, such as R15, Rthro, and custom imported skinned characters, to create realistic movement and interactions in your experience.
When adding an Class.IKControl, set the required properties correctly to avoid unexpected and unnatural animation results. As with all animation, test your IKControls to ensure that you achieve the desired behavior.
Required properties
When adding a Class.IKControl to your character's Class.Humanoid or Class.AnimationController, you must set the following required properties to enable IK:
| Property | Description |
|---|---|
| `Class.IKControl.Type|Type` | Specifies the behavior type of the IK control. See `Enum.IKControlType` for the list of behavior options. Common behavior types are `Position` or `Transform`. |
| `Class.IKControl.EndEffector|EndEffector` | A `Class.BasePart` or `Class.Bone` in your character rig that tracks toward the `Class.IKControl.Target|Target`. For example, you can set a **LeftHand** bone as a `Class.IKControl.EndEffector|EndEffector` to reach a doorknob object set as the `Class.IKControl.Target|Target`. |
| `Class.IKControl.Target|Target` | The object the `Class.IKControl.EndEffector|EndEffector` reaches or points toward. A `Class.IKControl.Target|Target` can be any object with a world position. |
| `Class.IKControl.ChainRoot|ChainRoot` | Defines the chain of `Class.BasePart|BaseParts` or `Class.Bone|Bones` that the `Class.IKControl` affects. All connected parts between the `Class.IKControl.ChainRoot|ChainRoot` and the `Class.IKControl.EndEffector|EndEffector` are affected by the `Class.IKControl` using the behavior type defined. For example, if your character's **LeftHand** is set as the `Class.IKControl.Target|Target`, you can apply IK to the entire left arm by setting `Class.IKControl.ChainRoot|ChainRoot` to the **LeftUpperArm**. To apply IK just to the parts below the elbow, set `Class.IKControl.ChainRoot|ChainRoot` to the **LeftLowerArm**. |
Test IKControls
You can add and edit Class.IKControl programmatically or directly through the Explorer. You can even add and make changes to Class.IKControl during a Play test to quickly check how various properties affect a character's movements.
To quickly test your Class.IKControl using an Class.Attachment as a target:
-
From Studio's mezzanine, initiate a playtest.
-
In the Explorer, navigate to Workspace → your user's
Class.Model. ThisClass.Modelinstance is named as your current Roblox account. -
Click the ⊕ icon next to your character model's
HumanoidRootPartand add an Attachment.
-
Select the Attachment and use the Move tool to position the object in front of your character in the viewport.

-
In the Explorer window, select the ⊕ icon next to your character's
Class.Humanoidand add an IKControl.
-
Select the
Class.IKControland set the following property values in the Properties window:- Type: Select
Transformfrom the dropdown. - EndEffector: Select your model's LeftHand
Class.MeshPartin the Explorer. - Target: Select the newly created Attachment object in the Explorer.
- ChainRoot: Select your model's LeftUpperArm
Class.MeshPartin the Explorer.
IKControl Properties
Explorer - Character Model Your character's left arm should now reach for the target
Class.Attachment. You can experiment with moving theClass.Attachmentor editing theClass.IKControlproperties to achieve different results. - Type: Select
Add constraints
You can use Class.Constraint|Constraints to restrict how joints can move when reaching its target. Constraints can ensure joints like the elbows and knees bend naturally, or to make the mechanical joints rotate in a specific orientation.
To add constraints to your character using Class.IKControl, your Class.IKControl and constraint must meet the following conditions:
- The attachments referenced in the constraint's
Class.Constraint.Attachment0|Attachment0/Class.Constraint.Attachment1|Attachment1properties attaches to the same parts as theClass.Motor6DClass.Motor6D.Part0|Part0/Class.Motor6D.Part1|Part1. - The relative positions of
Class.Constraint.Attachment0|Attachment0/Class.Constraint.Attachment1|Attachment1must equal the corresponding positions of theClass.Motor6DClass.Motor6D.C0|C0/Class.Motor6D.C1|C1CFrames. - The constraint and the IKControl share the same parent
Class.Model.
The following instructions describe the process of adding a Class.HingeConstraint to restrict the rotation of a character's elbow and adding a Class.BallSocketConstraint to the wrist to limit the rotation angle.
Elbow
Roblox R15 characters already include attachments in their joints that you can use to apply the elbow constraint. For the elbow, both the LeftUpperArm and the LeftLowerArm include a LeftElbowRigAttachment. Along with adding a constraint, you also need to add additional child attachments to each part's LeftElbowRigAttachment to specify which axis the elbow can rotate about.
To add the Class.HingeConstraint and child attachments:
-
In the Explorer, locate your model's LeftLowerArm and click the ⊕ button.
-
Add a HingeConstraint with the name
LeftElbowConstraint. -
In the Explorer, navigate to the LeftUpperArm.LeftElbowRigAttachment and add an attachment:
-
Click the ⊕ button to add an Attachment with the name
LeftElbowConstraintAttachment0. -
In the viewport, select the attachment and use the Rotate tool to rotate the attachment so the yellow PrimaryAxis is the axis of your elbow's expected rotation.
-
Set the LeftElbowConstraint.Attachment0 property to this new attachment.
-
-
In the Explorer, navigate to your model's LeftLowerArm.LeftElbowRigAttachment add an attachment:
- Click the ⊕ button and add an Attachment with the name
LeftElbowConstraintAttachment1. - Set the LeftUpperArm.LeftElbowConstraint.Attachment1 property to this new attachment.
- Copy the LeftElbowConstraintAttachment0.CFrameOrientation property and paste it as the LeftElbowConstraint.Attachment1.CFrameOrientation value.
- Click the ⊕ button and add an Attachment with the name
Test your IKControl to verify the elbow only rotates about its hinge axis:
Wrists
Even with the elbow constraint, the IKControl can still produce unrealistic poses with the wrists.
You can improve this by adding a Class.BallSocketConstraint to limit the rotation of the wrist. While this is similar to the process for adding a Class.HingeConstraint to the elbow, you can use the Class.BallSocketConstraint.LimitsEnabled|LimitsEnabled property on this constraint to further control the range of motion of the wrist.
To add a Class.BallSocketConstraint for the wrist:
- In the Explorer, locate your model's LeftHand and click the ⊕ button.
- Add a BallSocketConstraint with the name
LeftWristConstraint.
- Add a BallSocketConstraint with the name
- Locate your model's LeftLowerArm.LeftWristRigAttachment and add an attachment:
- Click the ⊕ button and add an Attachment with the name
LeftWristConstraintAttachment0. - In the viewport, select the attachment and use the Rotate tool to rotate the attachment so the yellow PrimaryAxis points toward the model's fingertips.

- Set the LeftWristConstraint.Attachment0 property to the new
LeftWristConstraintAttachment0.
- Click the ⊕ button and add an Attachment with the name
- Locate your model's LeftHand.LeftWristRigAttachment and add an attachment:
- Click the ⊕ button and add an Attachment with the name
LeftWristConstraintAttachment1. - Copy the LeftWristConstraintAttachment0.CFrameOrientation property and paste it as the LeftWristConstraintAttachment1.CFrameOrientation property.
- Set the LeftWristConstraint.Attachment1 property to this new LeftWristConstraintAttachment1.
- Click the ⊕ button and add an Attachment with the name
- In the Explorer, select the LeftWristConstraint.
- In the Properties window, set the following:
- Enable LimitsEnabled.
- Set UpperAngle to
80. This controls how much the constraint's axis can rotate, and 80 degrees is approximately how much the wrist should be able to bend.
- Depending on your character you may want to tweak the direction the cone is pointing in. You can do this by using the Rotate tool to rotate the constraint's Attachment0.
When selecting the LeftWristConstraint, a green cone appears visualizing the wrist's range of motion.
With the constraint set up, test the IKControl with the hand pointing down in front of the character and the wrist should rotate and bend more realistically.