Relaxation in Cascadeur
Characters in Cascadeur include full-body IK rigs, where when you move a body part, the rest of the body moves in accordance with it:
An example of the full-body IK: the entire arm follows the hands’s position.
This feature greatly simplifies the process of setting up poses and creating animations.
What makes it possible is that any point of the rig can, when moved, affect positions of every other point.
This, in turn, is enabled by the use of relaxation.
The base of the Cascadeur rig are the Rigid Bodies: physical objects that approximate the character body.
Each Rigid Body has its dedicated position in the rig.
But when you set up a pose, these positions can become distorted: some body parts can be bent at impossible angles, distances between points become too long or too short and so on.
This is why, each time changes are made to the character pose, relaxation is subsequently applied.
Relaxation restores the Rigid Bodies to their original positions, corrects the distances between them and generally alters the user-defined pose to make it more natural and anatomically accurate, as the example below shows:
An example of relaxation working to restore a set of rigid bodies to their original configuration.
Keep in mind, however, that the effect in this example is greatly exaggerated for demonstrative purposes.
In real situations, the changes are often very slight: relaxation always attempts to move/rotate objects in a way that would change their initial positions and spatial orientations as little as possible.
Relaxation is applied to the entirety of the character (to every object that has been moved, rotated or otherwise repositioned in the scene space).
However, relaxation works differently with the keyframes and with the interpolation intervals.
On a keyframe, relaxation is omnidirectional. It can move from any object to any other object, giving this object is in any way connected to the current one. This means that any body part can influence any other, thus relaxing the character’s pose in a more natural, realistic way.
However, performing an algorithm like this requires significant computation power.
An example of Relaxation on a keyframe: moving one or several Point Controllers affects other parts of the character’s body.
On an interval, a greatly simplified version of relaxation is used. This relaxation moves strictly from parent to child.
This means that the effect of relaxation is limited, as child objects cannot affect their parents. But this also means that the algorithm works faster, making it more suited for using on entire intervals.
An example of Relaxation on an Interpolation interval: only the limb is moving, while the rest of the body is not affected.
Relaxation is also used with the Tween Machine.
Tween Machine can use both keyframe- and interval-based relaxation (but not both at the same time). Which one should be used can be set manually:
1. Go to the Scene settings panel.
2. Open the Tween Machine (Advanced) tab:
3. Set the Relaxation parameter to either Frame (for keyframe-based relaxation) or Interpolation (for interval-based).
Depending on this setting, Tween Machine will have a slightly different effect:
Left: Relaxation is set to Frame; Right: Relaxation is set to Interpolation.
Note how differently the Point Controllers are interpolated between the same positions.
There are two types of connections in the Cascadeur rig. Relaxation is applied in different ways to each of these types.
A parent and a child are linked through one Connection_two_body_point.
For this type of connection, relaxation is applied as translating the child object without rotating it.
The objects are linked with two Connection_two_body_point. These two points are not equal; the first point is the leading one, while the other is secondary.
This setup limits the degree of freedom the child object has. For this reason, it is used for knees, elbows and other body parts that should only be able to rotate on one or two planes.
For hinge connections, relaxation works by translating the parent object and rotating the child.
The Connection_two_body entity has the Fixed parameter.
Normally, this parameter is set to False; this means that the connection is active.
If it is set to True instead, the connection is ignored.