Go to: Related nodes. Attributes.
This node implements a normalConstraint. Each constraint has a set
of targets that are connected under the target attribute, a single
constrained object that is connected to the constraint* attributes,
and possibly other information to help compute the correct results.
In the case of the normalConstraint, the additional information is:
aimVector, upVector, worldUpVector, worldUpMatrix, and
worldUpType.
The normalConstraint node can have any number of target inputs.
Each target is connected to attributes inside a single element of
the target attribute. For example, the first target object would be
connected elements of target[0], the second target object would be
connected to elements of target[1], etc. The elements of each
target are: targetGeometry and targetWeight.The elements of each
target are normally connected to the target objects as follows:
normalConstraint attribute |
connected to |
targetGeometry |
worldSpace |
targetWeight |
set to 1.0 |
The targetWeight attribute is not generally connected to the target
object. Instead, it may be animated by other means to adjust the
weighted average computation for the target orientation.The
constrained object is connected to the constraint* attributes. For
a normalConstraint, the constraintTranslate, constraintRotatePivot,
constraintRotateTranslate, and constraintParentInverseMatrix are
inputs to the normalConstraint. The attribute constraintRotate is
the only output..The normalConstraint node uses the
constraintTranslate, constraintRotatePivot,
constraintRotateTranslate, constraintJointOrient, and
constraintParentInverseMatrix attributes to compute the world space
position of the pivot point of the constrained object. Then, for
each target geometry, the closest point is found and the normal at
that point is computed. Each normal is then added into a weighted
average vector and the constrained object is oriented so that the
aimVector (see below) matches the weighted average vector.The
additional normalConstraint inputs tell the constraint node how to
aim the constrained object. The aimVector attribute defines a
vector in the space of the constrained object that should be
aligned with the weighted average vector computed by the
constraint. The upVector, worldUpVector, worldUpMatrix, and
worldUpType define how the constrained object is rotated about the
aimVector.The upVector defines a vector in the space of the
constrained object, very much like the aimVector does. The
constrained object is rotated so that the aimVector matches the
weighted average vector and so that the upVector aligns as closely
as possible with the computed world up vector. The world up vector
is determined by the worldUpType, worldUpVector, and worldUpMatrix
attributes.The attribute worldUpType can have one of 5 values,
which affects the calculation of the world up vector as shown in
the following table.
Mnemonic |
Value |
Description |
scene |
0 |
The upVector is aligned with the up axis of the scene and
worldUpVector and worldUpObject are ignored. |
object |
1 |
The upVector is aimed as closely as possible to the origin of
the space of the worldUpObject and the worldUpVector is
ignored. |
objectrotation |
2 |
The worldUpVector is interpreted as being in the coordinate
space of the worldUpObject, transformed into world space and the
upVector is aligned as closely as possible to the result. |
vector |
3 |
Default: The upVector is aligned with
worldUpVector as closely as possible and worldUpMatrix is
ignored. |
none |
4 |
No up vector is used in the computation of the orientation of
the constrained object; only the aim vector and the target's
position and surface normals are used. Specifying an up vector can
cause flipping to occur when the constrained object's new
orientation vector is close to the up vector. If the worldUpType is
instead set to none, this flipping won't happen, at a loss of
control over twisting. |
While setAttr requires the numeric values for the worldUpType
attribute, both numeric and mnemonic values are allowed by the
normalConstraint command.Although the all the constraint nodes
inherit from transform, they do not actively use any of the
attributes from transform.
Node name |
Parents |
MFn type |
Compatible function sets |
normalConstraint |
constraint |
kNormalConstraint |
kBase
kNamedObject
kDependencyNode
kDagNode
kTransform
kConstraint
kNormalConstraint |
Related nodes
aimConstraint, geometryConstraint, orientConstraint, parentConstraint, pointConstraint, poleVectorConstraint, scaleConstraint, tangentConstraint, lookAt
Attributes (47)
aimVector, aimVectorX, aimVectorY, aimVectorZ, constraintJointOrient, constraintJointOrientX, constraintJointOrientY, constraintJointOrientZ, constraintParentInverseMatrix,
constraintRotate, constraintRotateOrder, constraintRotatePivot, constraintRotatePivotX, constraintRotatePivotY, constraintRotatePivotZ, constraintRotateTranslate,
constraintRotateTranslateX,
constraintRotateTranslateY,
constraintRotateTranslateZ,
constraintRotateX, constraintRotateY, constraintRotateZ, constraintTranslate, constraintTranslateX, constraintTranslateY, constraintTranslateZ, constraintVector, constraintVectorX, constraintVectorY, constraintVectorZ, restRotate, restRotateX, restRotateY, restRotateZ, target, targetGeometry, targetWeight, upVector, upVectorX, upVectorY, upVectorZ, worldUpMatrix, worldUpType, worldUpVector, worldUpVectorX, worldUpVectorY, worldUpVectorZ
Long name (short name) |
Type |
Default |
Flags |
|
target
(tg ) |
compound |
n/a |
|
|
targetGeometry
(tgm ) |
Generic |
n/a |
|
|
|
targetWeight
(tw ) |
double |
1.0 |
|
|
|
constraintParentInverseMatrix
(cpim ) |
matrix |
identity |
|
|
aimVector
(a ) |
double3 |
|
|
|
aimVectorX
(ax ) |
double |
1.0 |
|
|
|
aimVectorY
(ay ) |
double |
0.0 |
|
|
|
aimVectorZ
(az ) |
double |
0.0 |
|
|
|
upVector
(u ) |
double3 |
|
|
|
upVectorX
(ux ) |
double |
0.0 |
|
|
|
upVectorY
(uy ) |
double |
1.0 |
|
|
|
upVectorZ
(uz ) |
double |
0.0 |
|
|
|
worldUpVector
(wu ) |
double3 |
|
|
|
worldUpVectorX
(wux ) |
double |
0.0 |
|
|
|
worldUpVectorY
(wuy ) |
double |
1.0 |
|
|
|
worldUpVectorZ
(wuz ) |
double |
0.0 |
|
|
|
worldUpMatrix
(wum ) |
matrix |
identity |
|
|
worldUpType
(wut ) |
enum |
3 vector |
|
|
constraintTranslate
(ct ) |
double3 |
|
|
|
constraintTranslateX
(ctx ) |
distance
(double) |
0.0cm |
|
|
|
constraintTranslateY
(cty ) |
distance
(double) |
0.0cm |
|
|
|
constraintTranslateZ
(ctz ) |
distance
(double) |
0.0cm |
|
|
|
constraintRotatePivot
(crp ) |
double3 |
|
|
|
constraintRotatePivotX
(crpx ) |
distance
(double) |
0.0cm |
|
|
|
constraintRotatePivotY
(crpy ) |
distance
(double) |
0.0cm |
|
|
|
constraintRotatePivotZ
(crpz ) |
distance
(double) |
0.0cm |
|
|
|
constraintRotateTranslate
(crt ) |
double3 |
|
|
|
constraintRotateTranslateX
(crtx ) |
distance
(double) |
0.0cm |
|
|
|
constraintRotateTranslateY
(crty ) |
distance
(double) |
0.0cm |
|
|
|
constraintRotateTranslateZ
(crtz ) |
distance
(double) |
0.0cm |
|
|
|
constraintRotateOrder
(cro ) |
enum |
0 |
|
|
constraintJointOrient
(cjo ) |
double3 |
|
|
|
constraintJointOrientX
(cjox ) |
angle (double) |
0.0deg |
|
|
|
constraintJointOrientY
(cjoy ) |
angle (double) |
0.0deg |
|
|
|
constraintJointOrientZ
(cjoz ) |
angle (double) |
0.0deg |
|
|
|
constraintRotate
(cr ) |
double3 |
|
|
|
constraintRotateX
(crx ) |
angle (double) |
0.0deg |
|
|
|
constraintRotateY
(cry ) |
angle (double) |
0.0deg |
|
|
|
constraintRotateZ
(crz ) |
angle (double) |
0.0deg |
|
|
|
constraintVector
(cv ) |
double3 |
|
|
|
constraintVectorX
(cvx ) |
distance
(double) |
0.0cm |
|
|
|
constraintVectorY
(cvy ) |
distance
(double) |
0.0cm |
|
|
|
constraintVectorZ
(cvz ) |
distance
(double) |
0.0cm |
|
|
|
restRotate
(rsrr ) |
double3 |
|
|
|
restRotateX
(rrx ) |
angle (double) |
0.0deg |
|
|
|
restRotateY
(rry ) |
angle (double) |
0.0deg |
|
|
|
restRotateZ
(rrz ) |
angle (double) |
0.0deg |
|
|