This component defines nodes for humanoid animation.
We support the H-Anim component, so you can render your humanoid and animate it through interpolators. Both skeletal and skinned animation is supported.
Supported nodes:
Humanoid
(Pascal API: THumanoidNode
),
Joint
(Pascal API: TJointNode
),
Segment
(Pascal API: TSegmentNode
),
Site
(Pascal API: TSiteNode
),
Displacer
(Pascal API: TDisplacerNode
) (VRML 2.0 (97) version)
HAnimHumanoid
(Pascal API: THAnimHumanoidNode
),
HAnimJoint
(Pascal API: THAnimJointNode
),
HAnimSegment
(Pascal API: THAnimSegmentNode
),
HAnimSite
(Pascal API: THAnimSiteNode
),
HAnimDisplacer
(Pascal API: THAnimDisplacerNode
) (X3D version)
As you see, X3D version has exactly the same nodes, working the same way,
but with HAnim
prefix before node name. (I have no idea why
this prefix was added in X3D specification, but it's supported.)
Actually we allow both versions (with HAnim
prefix and without)
in all VRML and X3D versions (with our
engine you can generally mix VRML/X3D versions). But VRML authors/generators should
not overuse this, and try to conform to appropriate spec where possible.
The implementation takes some care to handle all existing H-Anim versions: HAnim 1.0, HAnim 1.1, HAnim 200x.
Both H-Anim animation types are supported (they can also be mixed in one model):
skeletal — you place your geometry inside
joints (as segments or sites). This is simple, and joints
work then quite like animated transform nodes.
Animating transformations of Joint
nodes and such
is optimized, just like for Transform
node.
skinned — place the actual geometry (shapes)
inside "HAnimHumanoid.skin
" field.
Then you refer (USE
) the skin coordinates in
"HAnimHumanoid.skinCoord
". And finally,
in each joint you modify skin coordinates by
"HAnimJoint.skinCoordIndex
", "HAnimJoint.skinCoordWeight
".
Remember that you also have to list (USE
) all
the joints inside flat list "HAnimHumanoid.joints
".
Actually, specification requires them in every case (not only
for skinned animation), but our engine for now uses them only
for joints that affect "skinCoordIndex
".
InstantReality has a nice overview of how the X3D nodes should be set up, see also the X3D and latest H-Anim specifications of course.
One nice open-source modeller that can create such humanoids is Seamless3D, our implementation was tested on Lucy. Make sure to export a version without JavaScript.
You can try the Castle Model Viewer "Edit -> Add Humanoids Joints Visualization" menu option to see the joints centers and their names.
TODO: skinNormal
is not supported yet.