Go to: Related nodes. Attributes.

A joint is a transform which is the basic node of a kinematic skeleton. A hierarchy of joints is a kinematics skeleton. In a 3D view, a joint is drawn as a combination of three circles perpendicular to each other. If a joint is the child of another joint, a bone is drawn between them.

The joint node is derived from the transform node, so it inherits some of its basic transformation from its parent node (see the documentation for transform node for details). Many elements in the inherited transformation matrix have been suppressed so the following invariances are maintained:

        rotatePivot = 0
        rotatePivotTranslate = 0
        scalePivot = 0
        scalePivotTranslate = 0
        shear = 0

There are also attributes used only by joint nodes. The transformation matrix for a joint node is below.

        matrix = [S] * [RO] * [R] * [JO] * [IS] * [T]

(where '*' denotes matrix multiplication).

        [S]:  scale.
        [RO]: Rotate Orient (attribute name is rotateAxis).
        [R]:  rotate.
        [JO]: jointOrient.
        [IS]: parentScaleInverse.
        [T]:  translate.

Joint Attributes

The jointType attribute determines if a joint node is a ball joint, a universal joint, or a hinge joint. There are six different joint types: 'xyz', 'xy', 'yz', 'xz', 'x', 'y', and 'z'. If jointType is 'xyz', the joint is a ball joint (with three degrees of freedom). If jointType is 'xy', 'yz', or 'xz', it is a universal joint. If jointType is 'x', 'y', or 'z', it is a hinge joint. The rotation order of a joint node is determined by the transform node. The default jointType is 'xyz'.

The dofMask attribute determines which degree of freedom is used in the ik solving process. The first 3 bytes of the value indicate the presence or absence of each of the 'x', 'y' and 'z' degrees of freedom, using the character values for "x", "y" and "z" respectively. The fourth byte indicates how many of the 3 degrees of freedom are present. Since the default jointType value is 'xyz', the default dofMask value is 0x78797a03: all three degrees of freedom are involved into the ik solving process. The other dofMask values are:

        0x78790002: for jointType 'xy';
        0x00797a02: for jointType 'yz';
        0x78007a02: for jointType 'xz';
        0x78000001: for jointType 'x';
        0x00790001: for jointType 'y';
        0x00007a01: for jointType 'z';

The jointOrient attribute defines the orientation of the joint node. It is different from the rotation orientation defined in the transform node. Modifying the jointOrient changes how scaling a joint behaves. Internally, jointOrient is stored as a quaternion. This means that if you set a value and then query it, you may get back different numbers. For example, if you set jointOrient to (360, 0, 0), you will read back (0, 0, 0).

The segmentScaleCompensate attribute controls the use of the inverseScale attribute. If it is on, inverseScale is used to compute the joint's transformation matrix. If it is off, inverseScale is simply left out of the computation. The default is on.

The inverseScale attribute is used to do the scale compensation. It is typically connected to the scale attribute of the joint's parent. The value of inverseScale is set by this connection to match the parent's scale value. However, when the matrix is computed, the inverse of the value is used. This means that if you set the inverseScale attribute to (1, 2, 3), the joint and its children will scale by (1, 1/2, 1/3).

The stiffness attribute is used by ikSolvers to generate a resistance to a joint motion. It affects the inverse kinematic solution. The default is no stiffness (0.0 for all three components).

The preferredAngle attribute defines the initial joint configuration used by a single chain ik solver to calculate the inverse kinematic solution. The values are set on joint creation. It can also be modified with the joint command or through the Skeletons menu.

The minRotateDampRange and minRotateDampStrength are attributes to apply resistance to a joint rotation as it approaches the lower boundary of its rotation limits. This functionality allows joint motion to slow down smoothly until the joint reaches its rotation limits instead of stopping abruptly. The minRotateDampRange specifies when the deceleration should start, and the minRotateDampStrength defines the rate of deceleration.

The maxRotateDampRange and maxRotateDampStrength are attributes which have the same functionality as above two attributes. But they apply to the upper boundary of the joint rotation limits.

The bindPose attribute stores the transformation matrix in use at the time a skin is bound. The joint bind pose is created and saved when the bindSkin command is executed; it is undefined unless a bindSkin operation has been performed. The dagPose command resets the joint back to its bind pose easily and quickly.

The bindRotation attribute stores the joint local rotation in use at the time a skin is bound.

The bindRotateAxis attribute stores the joint rotate axis in use at the time a skin is bound. It is set when the skin is bound.

The bindJointOrient attribute stores the joint orientation in use at the time a skin is bound. It is set when the skin is bound.

The bindScale attribute stores the scale parameter for the joint in use at the time a skin is bound. It is also set when the skin is bound.

The bindInverseScale attribute stores the inverse scale parameter of the joint in use at the time a skin is bound. It is set when the skin is bound.

The bindSegmentScaleCompensate attribute stores the state of segment scale compensate of the joint in use at the time a skin is bound. It is also set when the skin is bound.

Node nameParentsClassificationMFn typeCompatible function sets
jointtransformdrawdb/geometry/animation/jointkJointkBase
kNamedObject
kDependencyNode
kDagNode
kTransform
kJoint

Related nodes

ikSolver, ikMCsolver, ikSplineSolver, ikSCsolver, ikRPsolver, ikPASolver, ikSystem, ikEffector, ikHandle

Attributes (79)

The following quick index only shows top-level attributes (too many attributes to show them all): bindInverseScale (3), bindJointOrient (3), bindPose, bindRotateAxis (3), bindRotation (3), bindScale (3), bindSegmentScaleCompensate, dofMask, drawLabel, drawStyle, fkRotate (3), hikFkJoint, hikNodeID, ikRotate (3), inIKSolveFlag, inverseScale (3), isIKDirtyFlag, jointOrient (3), jointOrientType, jointType, jointTypeX, jointTypeY, jointTypeZ, maxRotateDampRange (3), maxRotateDampStrength (3), minRotateDampRange (3), minRotateDampStrength (3), otherType, preferredAngle (3), radius, segmentScaleCompensate, side, stiffness (3), type

Long name (short name)TypeDefaultFlags
jointOrientType (jot) stringTmultiSharedObject::create<TdataString>"xyz"outputinputstorable
this type is used to determine the joint orientation when created.
jointType (jt) stringTmultiSharedObject::create<TdataString>"xyz"outputinputhidden
Joint type 'xyz', 'x', 'y', 'z', 'xy', 'yz', 'xz', .....
jointTypeX (jtx) booltrueoutputinputconnectablestorable
Joint dof has "X" component.
jointTypeY (jty) booltrueoutputinputconnectablestorable
Joint dof has "Y" component.
jointTypeZ (jtz) booltrueoutputinputconnectablestorable
Joint dof has "Z" component.
dofMask (dm) integer0x78797a03outputhidden
Determine which dofs are involved in IK.
jointOrient (jo) double3outputinputconnectablestorable
Joint orient.
jointOrientX (jox) angle (double)0.0degoutputinputconnectablestorable
Joint orientX.
jointOrientY (joy) angle (double)0.0degoutputinputconnectablestorable
Joint orientY.
jointOrientZ (joz) angle (double)0.0degoutputinputconnectablestorable
Joint orientZ.
segmentScaleCompensate (ssc) booltrueoutputinputconnectablestorable
Indicates whether to compensate for the scale of the parent joint.
inverseScale (is) double3outputinputconnectablestorable
The scale of the parent joint.
inverseScaleX (isx) double1.0outputinputconnectablestorable
X component of aParentScale.
inverseScaleY (isy) double1.0outputinputconnectablestorable
Y component of aParentScale.
inverseScaleZ (isz) double1.0outputinputconnectablestorable
Z component of aParentScale.
stiffness (st) double3outputinputconnectablestorable
Joint stiffness.
stiffnessX (stx) double0.0outputinputconnectablestorable
Joint stiffness X.
stiffnessY (sty) double0.0outputinputconnectablestorable
Joint stiffness Y.
stiffnessZ (stz) double0.0outputinputconnectablestorable
Joint stiffness Z.
preferredAngle (pa) double3outputinputconnectablestorable
Joint preferred angle.
preferredAngleX (pax) angle (double)0.0degoutputinputconnectablestorable
Joint preferred angle X.
preferredAngleY (pay) angle (double)0.0degoutputinputconnectablestorable
Joint preferred angle Y.
preferredAngleZ (paz) angle (double)0.0degoutputinputconnectablestorable
Joint preferred angle Z.
minRotateDampRange (ndr) double3outputinputconnectablestorable
Joint min rotate damping range.
minRotateDampRangeX (ndx) angle (double)0.0degoutputinputconnectablestorable
Joint min rotate damping range X.
minRotateDampRangeY (ndy) angle (double)0.0degoutputinputconnectablestorable
Joint min rotate damping range Y.
minRotateDampRangeZ (ndz) angle (double)0.0degoutputinputconnectablestorable
Joint min rotate damping range Z.
minRotateDampStrength (nst) double3outputinputconnectablestorable
Joint min rotate damping strength.
minRotateDampStrengthX (nstx) double0.0outputinputconnectablestorable
Joint min rotate damping strength X.
minRotateDampStrengthY (nsty) double0.0outputinputconnectablestorable
Joint min rotate damping strength Y.
minRotateDampStrengthZ (nstz) double0.0outputinputconnectablestorable
Joint min rotate damping strength Z.
maxRotateDampRange (xdr) double3outputinputconnectablestorable
Joint max rotate damping range.
maxRotateDampRangeX (xdx) angle (double)0.0degoutputinputconnectablestorable
Joint max rotate damping range X.
maxRotateDampRangeY (xdy) angle (double)0.0degoutputinputconnectablestorable
Joint max rotate damping range Y.
maxRotateDampRangeZ (xdz) angle (double)0.0degoutputinputconnectablestorable
Joint max rotate damping range Z.
maxRotateDampStrength (xst) double3outputinputconnectablestorable
Joint max rotate damping strength.
maxRotateDampStrengthX (xstx) double0.0outputinputconnectablestorable
Joint max rotate damping strength X.
maxRotateDampStrengthY (xsty) double0.0outputinputconnectablestorable
Joint max rotate damping strength Y.
maxRotateDampStrengthZ (xstz) double0.0outputinputconnectablestorable
Joint max rotate damping strength Z.
bindPose (bps) matrixidentityoutputinputconnectablestorablehidden
joint bind pose for binding skin. This attribute is connected to the dagPose node that stores the bindPose info for the joint. This attribute stores the world matrix of the joint at the time of the bind. The bindPose matrix is undefined if no bindSkin operation has been performed.
bindRotation (br) double3outputinputhidden
This attribute is obsolete and is unused in versions past Maya1.0. It exists only for file format compatibility with Maya1.0 files. The dagPose node is now used to store bindPose data.
bindRotationX (brx) angle (double)0.0degoutputinputhidden
obsolete local joint x rotation at time of bind
bindRotationY (bry) angle (double)0.0degoutputinputhidden
obsolete local joint y rotation at time of bind
bindRotationZ (brz) angle (double)0.0degoutputinputhidden
obsolete local joint z rotation at time of bind
bindJointOrient (bjo) double3outputinputhidden
This attribute is obsolete and is unused in versions past Maya1.0. It exists only for file format compatibility with Maya1.0 files. The dagPose node is now used to store bindPose data.
bindJointOrientX (bjx) angle (double)0.0degoutputinputhidden
obsolete joint orient x at time of bind
bindJointOrientY (bjy) angle (double)0.0degoutputinputhidden
obsolete joint orient y at time of bind
bindJointOrientZ (bjz) angle (double)0.0degoutputinputhidden
obsolete joint orient z at time of bind
bindRotateAxis (bra) double3outputinputhidden
This attribute is obsolete and is unused in versions past Maya1.0. It exists only for file format compatibility with Maya1.0 files. The dagPose node is now used to store bindPose data.
bindRotateAxisX (brax) angle (double)0.0degoutputinputhidden
obsolete bind rotate axis X.
bindRotateAxisY (bray) angle (double)0.0degoutputinputhidden
obsolete bind rotate axis Y.
bindRotateAxisZ (braz) angle (double)0.0degoutputinputhidden
obsolete bind rotate axis Z.
bindScale (bs) double3outputinputhidden
This attribute is obsolete and is unused in versions past Maya1.0. It exists only for file format compatibility with Maya1.0 files. The dagPose node is now used to store bindPose data.
bindScaleX (bsx) angle (double)57.3degoutputinputhidden
obsolete joint scale x at time of bind
bindScaleY (bsy) angle (double)57.3degoutputinputhidden
obsolute joint scale y at time of bind
bindScaleZ (bsz) angle (double)57.3degoutputinputhidden
obsolete joint scale z at time of bind
bindInverseScale (bis) double3outputinputhidden
This attribute is obsolete and is unused in versions past Maya1.0. It exists only for file format compatibility with Maya1.0 files. The dagPose node is now used to store bindPose data.
bindInverseScaleX (bix) double1outputinputhidden
obsolete joint inverse scale x at time of bind
bindInverseScaleY (biy) double1outputinputhidden
obsolete joint inverse scale y at time of bind
bindInverseScaleZ (biz) double1outputinputhidden
obsolete joint inverse scale z at time of bind
bindSegmentScaleCompensate (bsc) booltrueoutputinputhidden
This attribute is obsolete and is unused in versions past Maya1.0. It exists only for file format compatibility with Maya1.0 files. The dagPose node is now used to store bindPose data.
isIKDirtyFlag (idf) boolfalseoutputinputhidden
Intended for internal use only
inIKSolveFlag (isf) boolfalseoutputinputhidden
Intended for internal use only
drawStyle (ds) enum0outputinputstorable
This attribute controls how the joint is drawn. The "bone" setting draws the joints as normal bones, as in previous releases. The "Multi-child as Box" draw style indicates that a single box will be drawn to represent the joint and its children, in case the joint has multiple children. The box size is chosen as a bounding box of the children joints. Typically the "bone" draw style is preferable if you are creating a complex skeletal hierarchy such as human ribs, while the "Multi-child as Box" draw style is preferable for representing a large bone with multiple children such as the pelvic bone.
drawLabel (dl) boolfalseoutputinputconnectablestorable
When enabled, the joint side and type attribute values are drawn as text next to the joint.
side (sd) enum0outputinputstorable
This attribute can be used to specify the joint's side in the puppet. This information is used when retargeting animation info from one hierarchy to another.
type (typ) enum0outputinputstorable
This attribute can be used to specify the joint's part in the puppet. This information is used when retargeting animation info from one hierarchy to another.
otherType (otp) stringTmultiSharedObject::create<TdataString>"jaw"outputinputstorable
When the puppetPart is set to "Other", this string should be used to describe the part type.
ikRotate (ikr) double3outputinputhidden
IK Rotation. This is set by the ik solver.
ikRotateX (irx) angle (double)0.0degoutputinputhidden
IK Rotate X.
ikRotateY (iry) angle (double)0.0degoutputinputhidden
IK Rotate Y.
ikRotateZ (irz) angle (double)0.0degoutputinputhidden
IK Rotate Z.
fkRotate (fkr) double3outputinputhidden
FK Rotation.
fkRotateX (frx) angle (double)0.0degoutputinputhidden
FK Rotate X.
fkRotateY (fry) angle (double)0.0degoutputinputhidden
FK Rotate Y.
fkRotateZ (frz) angle (double)0.0degoutputinputhidden
FK Rotate Z.
radius (radi) double1.0outputinputconnectablestorable
The joint's radius which, when multiplied by the global joint scaling factor, determines how wide the bone should be when displayed.
hikNodeID (hni) integer-1outputinputconnectablestorablehidden
The HumanIK nodeId. This is for internal use by Maya and should never be modified manually.
hikFkJoint (hfk) Messagen/aoutputinputconnectablehidden
A message connection to the fk joint of an fbik system. This is for internal use by Maya and should never be modified manually.