CCDIK

Describes how to access and use the CCDIK Skeletal Control node to set up and control IK chains.

Choose your operating system:

Windows

macOS

Linux

The CCDIK (Cyclic Coordinate Descent Inverse Kinematics) Skeletal Control node is a light-weight IK solver (similar to FABRIK ) typically used to drive a chain of bones. Unlike FABRIK however, CCDIK provides the ability to define angular constraints which can prove useful if you want to limit rotations of any of those bones during the solve.

The CCDIK node can be used to drive procedural animations like the illustrated below:

In the video above, we use the Solver section of the CCDIKnode's properties and set the Root Bone of our character to the left shoulder. We then set the Tip Bone to the last digit on our character's index finger. When we adjust the Effector Location , the IK solver takes over, and each of the bones in the chain follow, based on the Rotation Limit Per Joints values we defineThese angular limits prevent bones from rotating awkwardly and some adjustments to the values (on a per bone basis) may be needed to achieve your desired results.

Input and Output Pins

Listed below are the available Input and Output pins for the CCDIK node:

CCDIK_Node.png

Pin Type

Description

Input Pins

Effector Location

Coordinates for the target location of the assigned Tip Bone (if Effector Location Space is set to Bone ). This will be the offset from the Target Bone to use as Target Location.

Component Pose

The input pose to be transformed.

Alpha

A float value in the range [0.0, 1.0] to use as the alpha value to determine the weighting of the Transform applied by the Skeletal Control. A value of 0.0 gives full weighting to the input pose, while a value of 1.0 gives full weighting to the control's computed Transform.

Output Pins

Component Pose

The final pose after the Transform has been applied.

Node Properties

Below are the properties available when using the CCDIK node which are available from the Details panel:

CCDIK_Details.png

Option

Description

Effector Location

(As pin) Effector Location

Whether to show this property as a pin on the node.

Effector Location Space

Which coordinate space to set the position of the bone (World Space, Component Space, Parent Bone Space, or Bone Space).

Effector Target

If the Effector Transform Space is a bone, this is the target bone to use.

Solver

Tip Bone

Bone to designate at the Tip Bone (or final Bone) in the chain.

Root Bone

Bone to designate as the Root Bone (or initial Bone) in the chain.

Precision

Tolerance for final tip location delta from the Effector Location .

Max Iterations

Maximum number of iterations allowed (used to control performance).

Start from Tail

Whether to draw the axes to debug joint rotation.

Enable Rotation Limit

Tolerance for final tip location delta from Effector Location .

Rotation Limit Per Joints

Symmetry rotation limit per bone. Index 0 matches with the Root Bone and the last index matches with the Tip Bone .

Performance

LOD Threshold

Max Level of Detail (LOD) that this node is allowed to run.

Alpha

Alpha Input Type

Define the Alpha Input Type (Float Value, Boolean Value, or Anim Curve Value).

(As pin)

Enable to show the Alpha property as a pin on the node. Disable to remove it from being displayed as a pin.

Example: Button Press

In the video below, we use the CCDIK node and some Blueprint to make the character press a button on the wall.

Below in the AnimGraph of our Animation Blueprint, we use the CCDIK node with the Effector Location being driven from the location of the button inside our Level. If the player is in range of the button and presses the corresponding key, we blend to the pose that uses the CCDIK node, causing the character to reach for the Effector Location (pressing the button).

Click image for full view.

Below we assign the clavicle_l (left shoulder) as the Root Bone and the index_03_l (last digit on the left index finger) as the Tip Bone as our bone chain. We also define use the Rotation Limit Per Joints section to constrain how much rotation is applied to each bone.

CCDIK_Example_Details.png

Help shape the future of Unreal Engine documentation! Tell us how we're doing so we can serve you better.
Take our survey
Dismiss