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 name | Parents | Classification | MFn type | Compatible function sets |
---|
joint | transform | drawdb/geometry/animation/joint | kJoint | kBase 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) | Type | Default | Flags |
---|
|
jointOrientType
(jot )
| string | TmultiSharedObject::create<TdataString>"xyz" | |
|
|
jointType
(jt )
| string | TmultiSharedObject::create<TdataString>"xyz" | |
|
|
jointTypeX
(jtx )
| bool | true | |
|
|
jointTypeY
(jty )
| bool | true | |
|
|
jointTypeZ
(jtz )
| bool | true | |
|
|
dofMask
(dm )
| integer | 0x78797a03 | |
|
|
jointOrient
(jo )
| double3 | | |
|
| jointOrientX
(jox )
| angle (double) | 0.0deg | | |
|
| jointOrientY
(joy )
| angle (double) | 0.0deg | | |
|
| jointOrientZ
(joz )
| angle (double) | 0.0deg | | |
|
|
segmentScaleCompensate
(ssc )
| bool | true | |
|
|
inverseScale
(is )
| double3 | | |
|
| inverseScaleX
(isx )
| double | 1.0 | | |
|
| inverseScaleY
(isy )
| double | 1.0 | | |
|
| inverseScaleZ
(isz )
| double | 1.0 | | |
|
|
stiffness
(st )
| double3 | | |
|
| stiffnessX
(stx )
| double | 0.0 | | |
|
| stiffnessY
(sty )
| double | 0.0 | | |
|
| stiffnessZ
(stz )
| double | 0.0 | | |
|
|
preferredAngle
(pa )
| double3 | | |
|
| preferredAngleX
(pax )
| angle (double) | 0.0deg | | |
|
| preferredAngleY
(pay )
| angle (double) | 0.0deg | | |
|
| preferredAngleZ
(paz )
| angle (double) | 0.0deg | | |
|
|
minRotateDampRange
(ndr )
| double3 | | |
|
| minRotateDampRangeX
(ndx )
| angle (double) | 0.0deg | | |
|
| minRotateDampRangeY
(ndy )
| angle (double) | 0.0deg | | |
|
| minRotateDampRangeZ
(ndz )
| angle (double) | 0.0deg | | |
|
|
minRotateDampStrength
(nst )
| double3 | | |
|
| minRotateDampStrengthX
(nstx )
| double | 0.0 | | |
|
| minRotateDampStrengthY
(nsty )
| double | 0.0 | | |
|
| minRotateDampStrengthZ
(nstz )
| double | 0.0 | | |
|
|
maxRotateDampRange
(xdr )
| double3 | | |
|
| maxRotateDampRangeX
(xdx )
| angle (double) | 0.0deg | | |
|
| maxRotateDampRangeY
(xdy )
| angle (double) | 0.0deg | | |
|
| maxRotateDampRangeZ
(xdz )
| angle (double) | 0.0deg | | |
|
|
maxRotateDampStrength
(xst )
| double3 | | |
|
| maxRotateDampStrengthX
(xstx )
| double | 0.0 | | |
|
| maxRotateDampStrengthY
(xsty )
| double | 0.0 | | |
|
| maxRotateDampStrengthZ
(xstz )
| double | 0.0 | | |
|
|
bindPose
(bps )
| matrix | identity | |
|
|
bindRotation
(br )
| double3 | | |
|
| bindRotationX
(brx )
| angle (double) | 0.0deg | | |
|
| bindRotationY
(bry )
| angle (double) | 0.0deg | | |
|
| bindRotationZ
(brz )
| angle (double) | 0.0deg | | |
|
|
bindJointOrient
(bjo )
| double3 | | |
|
| bindJointOrientX
(bjx )
| angle (double) | 0.0deg | | |
|
| bindJointOrientY
(bjy )
| angle (double) | 0.0deg | | |
|
| bindJointOrientZ
(bjz )
| angle (double) | 0.0deg | | |
|
|
bindRotateAxis
(bra )
| double3 | | |
|
| bindRotateAxisX
(brax )
| angle (double) | 0.0deg | | |
|
| bindRotateAxisY
(bray )
| angle (double) | 0.0deg | | |
|
| bindRotateAxisZ
(braz )
| angle (double) | 0.0deg | | |
|
|
bindScale
(bs )
| double3 | | |
|
| bindScaleX
(bsx )
| angle (double) | 57.3deg | | |
|
| bindScaleY
(bsy )
| angle (double) | 57.3deg | | |
|
| bindScaleZ
(bsz )
| angle (double) | 57.3deg | | |
|
|
bindInverseScale
(bis )
| double3 | | |
|
| bindInverseScaleX
(bix )
| double | 1 | | |
|
| bindInverseScaleY
(biy )
| double | 1 | | |
|
| bindInverseScaleZ
(biz )
| double | 1 | | |
|
|
bindSegmentScaleCompensate
(bsc )
| bool | true | |
|
|
isIKDirtyFlag
(idf )
| bool | false | |
|
|
inIKSolveFlag
(isf )
| bool | false | |
|
|
drawStyle
(ds )
| enum | 0 | |
|
|
drawLabel
(dl )
| bool | false | |
|
|
side
(sd )
| enum | 0 | |
|
|
type
(typ )
| enum | 0 | |
|
|
otherType
(otp )
| string | TmultiSharedObject::create<TdataString>"jaw" | |
|
|
ikRotate
(ikr )
| double3 | | |
|
| ikRotateX
(irx )
| angle (double) | 0.0deg | | |
|
| ikRotateY
(iry )
| angle (double) | 0.0deg | | |
|
| ikRotateZ
(irz )
| angle (double) | 0.0deg | | |
|
|
fkRotate
(fkr )
| double3 | | |
|
| fkRotateX
(frx )
| angle (double) | 0.0deg | | |
|
| fkRotateY
(fry )
| angle (double) | 0.0deg | | |
|
| fkRotateZ
(frz )
| angle (double) | 0.0deg | | |
|
|
radius
(radi )
| double | 1.0 | |
|
|
hikNodeID
(hni )
| integer | -1 | |
|
|
hikFkJoint
(hfk )
| Message | n/a | |
|