This annex specifies the functionality of this document as a set of VRML prototypes that can be instantiated as nodes within a VRML world. VRML is specified in ISO/IEC 14772-1.
Table C.1 lists the topics of this annex.
PROTO HAnimHumanoid [ field SFVec3f bboxCenter 0 0 0 field SFVec3f bboxSize -1 -1 -1 exposedField SFVec3f center 0 0 0 exposedField MFString info [] field MFVec3f jointBindingPositions [0 0 0] field MFRotation jointBindingRotations [0 0 1 0] field MFVec3f jointBindingScales [1 1 1] exposedField MFNode joints [] exposedField SFString name "" exposedField SFRotation rotation 0 0 1 0 exposedField SFVec3f scale 1 1 1 exposedField SFRotation scaleOrientation 0 0 1 0 exposedField MFNode segments [] exposedField MFNode sites [] field SFString skeletalConfiguration "BASIC" exposedField MFNode skeleton [] exposedField MFNode skin [] exposedField MFVec3f skinBindingCoords [] exposedField MFVec3f skinBindingNormals [] exposedField MFVec3f skinCoord [] exposedField MFVec3f skinNormal [] exposedField SFVec3f translation 0 0 0 exposedField SFString version "2.0" exposedField MFNode viewpoints [] ]
The name field provides a name for the HAnimHumanoid node, by which it can be identified by an application at runtime. That name shall also be used as the DEF name of the HAnimHumanoid node itself, but with a distinguishing prefix in front of it. That prefix can be anything. The name field shall be present, so that the humanoid can be identified at runtime.
The geometry of an HAnim figure can be described in two ways. The first way is within the scene graph of the joint hierarchy, which is described in the skeleton field of the HAnimHumanoid node. Geometry defined within HAnimSegment nodes of this joint hierarchy describe the body as separate geometric pieces. This method, while computationally efficient, has certain visual anomalies (such as seams or creases) that detract from the appearance of the HAnim figure. The second way of describing the geometry of an HAnim figure is as a continuous piece of geometry, within the skin field of the HAnimHumanoid node. For this method, point and normal vector data sets are first defined in the skinCoord and skinNormal fields (in the form of Coordinate and Normal nodes, respectively). This data is defined in this manner to allow it to be referenced by two different entities within the definition of the HAnimHumanoid node. The first entity is one or more IndexedFaceSet nodes that define the surface of the geometry of the humanoid within the skin field. In most cases, this surface is a single IndexedFaceSet node. However, the surface can also be defined as multiple IndexedFaceSet nodes. It is possible that depending on the implementation of the IndexedFaceSet nodes and the configuration of the HAnim figure, multiple IndexedFaceSet nodes may provide better performance by isolating the continuous mesh changes to localized surfaces.
PROTO HAnimJoint [ field SFVec3f bboxCenter 0 0 0 field SFVec3f bboxSize -1 -1 -1 exposedField SFVec3f center 0 0 0 exposedField MFNode children [] exposedField MFNode displacers [] exposedField MFRotation limitOrientation [] exposedField MFVec3f llimit [] exposedField SFString name "" exposedField SFRotation rotation 0 0 1 0 exposedField SFVec3f scale 1 1 1 exposedField SFRotation scaleOrientation 0 0 1 0 exposedField MFVec3f stiffness [1 1 1] exposedField SFVec3f translation 0 0 0 exposedField MFVec3f ulimit [] ]
The name field is used for identifying the joints at runtime. Each
HAnimJoint object shall have a name that meets the
requirements of this document, but with a distinguishing
prefix in front of it. That prefix can be anything, but shall be the same
for all the HAnimJoint nodes in a particular
humanoid. The distinguishing prefix is useful in the case of static routing
to the HAnimJoint nodes of multiple humanoids in
the same representation. If only a single humanoid is stored in a VRML file,
the prefix may be "hanim_"
(for Humanoid Animation).
EXAMPLE The left shoulder has a name of
"hanim_l_shoulder"
The name is used for static routing, which typically connects OrientationInterpolator nodes in the humanoid representation to the joints. The name field shall be present, so that applications are able to identify the HAnimJoint node at runtime.
PROTO HAnimSegment [ field SFVec3f bboxCenter 0 0 0 field SFVec3f bboxSize -1 -1 -1 exposedField SFVec3f centerOfMass 0 0 0 exposedField MFNode children [] exposedField SFNode coord NULL exposedField MFNode displacers [] exposedField SFFloat mass -1 exposedField MFFloat momentsOfInertia [0 0 0 0 0 0 0 0 0] exposedField SFString name "" ]
The name field shall be present, so that the
HAnimSegment node can be identified at runtime.
Each HAnimSegment node shall have a name meets the
requirements of this document, but with a distinguishing
prefix in front of it. That prefix can be anything, but shall be the same
for all the HAnimSegment nodes in a particular
humanoid. The distinguishing prefix is useful in the case of static routing
to the HAnimSegment nodes of multiple humanoids in
the same file. If only a single humanoid is stored in a file, the prefix may
be "hanim_"
(for Humanoid Animation).
EXAMPLE The left thigh has a name of
"hanim_l_thigh"
.
PROTO HAnimSite [ field SFVec3f bboxCenter 0 0 0 field SFVec3f bboxSize -1 -1 -1 exposedField SFVec3f center 0 0 0 exposedField MFNode children [] exposedField SFString name "" exposedField SFRotation rotation 0 0 1 0 exposedField SFVec3f scale 1 1 1 exposedField SFRotation scaleOrientation 0 0 1 0 exposedField SFVec3f translation 0 0 0 ]
The name field shall be present, so that the
HAnimSite node can be identified at runtime. The
name field is used for identifying the
HAnimSite objects at runtime. If used as an end
effector, the HAnimSite node shall have a name
consisting of the name of the HAnimSegment node to
which it is attached, with an "_tip"
suffix appended.
EXAMPLE 1 The end effector
HAnimSite node on the right index finger is
named "r_index_distal_tip"
, and the
HAnimSite node is a child of the
"r_index_distal"
HAnimSegment object.
HAnimSite nodes that are used to define camera
locations shall have an "_view"
suffix appended.
HAnimSite nodes that are not end effectors and not
camera locations shall have an "_pt"
suffix.
HAnimSite nodes that are required by an
application but are not defined in this document shall be
prefixed with "x_"
. Each
HAnimSite node shall have a name that matches
the name field for that HAnimSite node, but
with a distinguishing prefix in front of it. That prefix can be anything,
but shall be the same for all the HAnimSite nodes
in a particular humanoid. The distinguishing prefix is useful in the case of
static routing to the HAnimSite nodes of multiple
humanoids in the same file. If only a single humanoid is stored in a file,
the prefix may be "hanim_"
.
EXAMPLE 2 The right index finger has a name of
"hanim_r_index_distal_tip"
.
PROTO HAnimDisplacer [ exposedField MFInt32 coordIndex [] exposedField MFVec3f displacements [] exposedField SFString name "" exposedField SFFloat weight 0 ]
The name field provides a name for the
HAnimDisplacer node, by which it can be identified
by an application at runtime. That name shall also be used as the DEF name
of the HAnimDisplacer node itself, but with a
distinguishing prefix in front of it. That prefix can be anything, but shall
be the same for all the HAnimDisplacer nodes in a
particular humanoid. The name field shall be present, so that the
HAnimDisplacer node can be identified at runtime.
HAnimDisplacer nodes that are used to identify
features shall have a name with an "_feature"
suffix.
HAnimDisplacer nodes that are used to move a
feature shall be given a name with an "_action"
suffix, usually with an additional pre-suffix to indicate the kind of motion
(such as "l_eyebrow_raiser_action"
).
HAnimDisplacer nodes that correspond to a
particular configuration of the vertices shall have an
"_config"
suffix.