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 |
MFn type |
Compatible function sets |
joint |
transform |
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 |
"xyz" |
|
|
jointType
(jt ) |
string |
"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 |
"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 |
|