Animating Joint Rotations

On This Page

This page gives information about joint rotations for 3D figures. It is written for both people looking to purchase animation data and animators. Good quality animation production, joint rotation limits and how that affects skin deformations in Unreal Engine are discussed. Although written in the context of animations for DTL for use in Unreal Engine, most of the information here applies in a broader sense to all 3D character animation data.


DTL Pro figure in Unreal Engine

Rotation Limits

The rotation limits of the joints comprising the human skeleton are defined by natural physics. Not respecting these limits when animating 3D characters results in unnatural movement and creates issues when applying JCMs to achieve realistic skin deformations. Below are descriptions of three commonly encountered joint rotation issues that aversely affect skin deformations.

Hinge Joints

The elbows, knees and most knuckle joints only rotate on one axis (typically the Z axis or 'swing' axis as it is called in Unreal Engine). Such joints are known as hinge joints. It is not unusual to find motion captured animations that rotate hinge joints in the X and Y axes. When this happens the PoseDrivers are not able to apply the correct JCMs and so mesh distortion occurs.


Good vs Bad Hinge Joint Rotations

Note that DTL Pro has some functionality to help reduce the effect of this, particularly for when the elbow joint is used to rotate the hand. However, it is preferable to source animations that respect hinge joint limits. See here for more details.

Human Range Of Motion

No real human bone rotates over ±180 degrees on any one axis. Therefore, no 3D figure's joint should ever rotate more than ±180 degrees in any one axis. The only exception is in the case of the hips / pelvis root joint, as this is the root joint and is used to rotate the entire character.

If joint rotations do exceed the ±180 degrees limit then either the rotation value can be 'unrolled' i.e. it will keep going up. This can cause issues with triggering JCMs. Alternatively, the rotation is 'fliped' from +180 degrees to -180 degrees (or visa versa). Joint flipping will often cause glitches in the animation, particularly if the framerate is lowered or keyframe stripping is applied.

Most human joints have a range lower than ±180 degrees on any one axis. When gauging the quality of an animation it is often useful to refer to real-world joint limits for comparison.

Upper Arm vs Clavicle

When raising the arms, it is important that the upper arm joint never goes past the point where it is parallel to the clavicle. This can be verified by raising your arm as high as it will go without moving your clavicle - this simple experiment proves that when the arms are raised past shoulder height, the rotation should all be on the clavicle.


Upper Arm Elevation Limit

Wrist Twisting Methods

To match the standard Unreal Engine skeleton, the inline twist bones exported by DazStudio are converted to leaf twist bones during the DTL conversion process. In the absence of an inline twist joint for the forearm, there are two ways to animate wrist twisting; via the hand joint or the lower arm joint. The choice of method is ultimately up to the animator, but I personally prefer to apply wrist twists using the hand joint for the following reasons:

  • Fewer JCMs are triggered so twisting the hand is slightly more performant
  • In principle, it is the hand we want to twist, not the elbow
  • DTL Pro figures have JCM support for both methods, but DTL Free figures only have JCMs for hand rotation