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

## Attributes (79)

Long name (short name)TypeDefaultFlags
`jointOrientType` (`jot`) stringTmultiSharedObject::create<TdataString>"xyz"
 this type is used to determine the joint orientation when created.
`jointType` (`jt`) stringTmultiSharedObject::create<TdataString>"xyz"
 Joint type 'xyz', 'x', 'y', 'z', 'xy', 'yz', 'xz', .....
`jointTypeX` (`jtx`) booltrue
 Joint dof has "X" component.
`jointTypeY` (`jty`) booltrue
 Joint dof has "Y" component.
`jointTypeZ` (`jtz`) booltrue
 Joint dof has "Z" component.
`dofMask` (`dm`) integer0x78797a03
 Determine which dofs are involved in IK.
`jointOrient` (`jo`) double3
 Joint orient.
`jointOrientX` (`jox`) angle (double)0.0deg
 Joint orientX.
`jointOrientY` (`joy`) angle (double)0.0deg
 Joint orientY.
`jointOrientZ` (`joz`) angle (double)0.0deg
 Joint orientZ.
`segmentScaleCompensate` (`ssc`) booltrue
 Indicates whether to compensate for the scale of the parent joint.
`inverseScale` (`is`) double3
 The scale of the parent joint.
`inverseScaleX` (`isx`) double1.0
 X component of aParentScale.
`inverseScaleY` (`isy`) double1.0
 Y component of aParentScale.
`inverseScaleZ` (`isz`) double1.0
 Z component of aParentScale.
`stiffness` (`st`) double3
 Joint stiffness.
`stiffnessX` (`stx`) double0.0
 Joint stiffness X.
`stiffnessY` (`sty`) double0.0
 Joint stiffness Y.
`stiffnessZ` (`stz`) double0.0
 Joint stiffness Z.
`preferredAngle` (`pa`) double3
 Joint preferred angle.
`preferredAngleX` (`pax`) angle (double)0.0deg
 Joint preferred angle X.
`preferredAngleY` (`pay`) angle (double)0.0deg
 Joint preferred angle Y.
`preferredAngleZ` (`paz`) angle (double)0.0deg
 Joint preferred angle Z.
`minRotateDampRange` (`ndr`) double3
 Joint min rotate damping range.
`minRotateDampRangeX` (`ndx`) angle (double)0.0deg
 Joint min rotate damping range X.
`minRotateDampRangeY` (`ndy`) angle (double)0.0deg
 Joint min rotate damping range Y.
`minRotateDampRangeZ` (`ndz`) angle (double)0.0deg
 Joint min rotate damping range Z.
`minRotateDampStrength` (`nst`) double3
 Joint min rotate damping strength.
`minRotateDampStrengthX` (`nstx`) double0.0
 Joint min rotate damping strength X.
`minRotateDampStrengthY` (`nsty`) double0.0
 Joint min rotate damping strength Y.
`minRotateDampStrengthZ` (`nstz`) double0.0
 Joint min rotate damping strength Z.
`maxRotateDampRange` (`xdr`) double3
 Joint max rotate damping range.
`maxRotateDampRangeX` (`xdx`) angle (double)0.0deg
 Joint max rotate damping range X.
`maxRotateDampRangeY` (`xdy`) angle (double)0.0deg
 Joint max rotate damping range Y.
`maxRotateDampRangeZ` (`xdz`) angle (double)0.0deg
 Joint max rotate damping range Z.
`maxRotateDampStrength` (`xst`) double3
 Joint max rotate damping strength.
`maxRotateDampStrengthX` (`xstx`) double0.0
 Joint max rotate damping strength X.
`maxRotateDampStrengthY` (`xsty`) double0.0
 Joint max rotate damping strength Y.
`maxRotateDampStrengthZ` (`xstz`) double0.0
 Joint max rotate damping strength Z.
`bindPose` (`bps`) matrixidentity
 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`) double3
 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.0deg
 obsolete local joint x rotation at time of bind
`bindRotationY` (`bry`) angle (double)0.0deg
 obsolete local joint y rotation at time of bind
`bindRotationZ` (`brz`) angle (double)0.0deg
 obsolete local joint z rotation at time of bind
`bindJointOrient` (`bjo`) double3
 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.0deg
 obsolete joint orient x at time of bind
`bindJointOrientY` (`bjy`) angle (double)0.0deg
 obsolete joint orient y at time of bind
`bindJointOrientZ` (`bjz`) angle (double)0.0deg
 obsolete joint orient z at time of bind
`bindRotateAxis` (`bra`) double3
 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.0deg
 obsolete bind rotate axis X.
`bindRotateAxisY` (`bray`) angle (double)0.0deg
 obsolete bind rotate axis Y.
`bindRotateAxisZ` (`braz`) angle (double)0.0deg
 obsolete bind rotate axis Z.
`bindScale` (`bs`) double3
 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.3deg
 obsolete joint scale x at time of bind
`bindScaleY` (`bsy`) angle (double)57.3deg
 obsolute joint scale y at time of bind
`bindScaleZ` (`bsz`) angle (double)57.3deg
 obsolete joint scale z at time of bind
`bindInverseScale` (`bis`) double3
 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`) double1
 obsolete joint inverse scale x at time of bind
`bindInverseScaleY` (`biy`) double1
 obsolete joint inverse scale y at time of bind
`bindInverseScaleZ` (`biz`) double1
 obsolete joint inverse scale z at time of bind
`bindSegmentScaleCompensate` (`bsc`) booltrue
 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`) boolfalse
 Intended for internal use only
`inIKSolveFlag` (`isf`) boolfalse
 Intended for internal use only
`drawStyle` (`ds`) enum0
 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`) boolfalse
 When enabled, the joint side and type attribute values are drawn as text next to the joint.
`side` (`sd`) enum0
 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`) enum0
 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"
 When the puppetPart is set to "Other", this string should be used to describe the part type.
`ikRotate` (`ikr`) double3
 IK Rotation. This is set by the ik solver.
`ikRotateX` (`irx`) angle (double)0.0deg
 IK Rotate X.
`ikRotateY` (`iry`) angle (double)0.0deg
 IK Rotate Y.
`ikRotateZ` (`irz`) angle (double)0.0deg
 IK Rotate Z.
`fkRotate` (`fkr`) double3
 FK Rotation.
`fkRotateX` (`frx`) angle (double)0.0deg
 FK Rotate X.
`fkRotateY` (`fry`) angle (double)0.0deg
 FK Rotate Y.
`fkRotateZ` (`frz`) angle (double)0.0deg
 FK Rotate Z.
`radius` (`radi`) double1.0
 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-1
 The HumanIK nodeId. This is for internal use by Maya and should never be modified manually.
`hikFkJoint` (`hfk`) Messagen/a
 A message connection to the fk joint of an fbik system. This is for internal use by Maya and should never be modified manually.