HAnim, H-Anim, Humanoid Animation
Seamless3d is on the forefront of modellers that supports HAnim. It is the only
modelling software that can both import and export HAnim 200x models. Because
Seamless3d is designed around it's native Part node which can be exported to
HAnimJoint nodes, most of it's animations can be freely exported to HAnim 200x.
Seamless3d is also the first and only Modeller to support the HAnimDislacer node.
What is HAnim?
The HAnim standard defines a set of VRML/X3D HAnim nodes for animated models.
Skinning is supported natively in X3D through its set of HAnim 200x nodes.
As with skinning in general, a set of bones (HAnimJoint nodes) define the pivot points for the animated model. Despite all HAnim nodes beginning with the HAnim prefix, HAnim nodes are not limited to defining humanoid type skeletons, HAnim nodes can be used to define a skeleton for any animal or machine.
The HAnim standard is ISO approved but much of the specification for the HAnim standard is sketchy and unfortunately
there is very little information on HAnim outside the specification. Most of the
original designers no longer seem to actively discuss HAnim on the web3d mailing
lists or forums, This leaves very little accountability for why the HAnim
standard is designed the way it is. If you search the net for HAnim most search results
relevant to the HAnim standard will be for the out dated HAnim 1.1 specification
and since this standard did not support skinning, there seems little point to it
since VRML97 could do this type of animation using native Transform and Shape
nodes. My only interest in HAnim lies in the HAnim 200x standard. To be in
the X3D standard, all HAnim nodes must be prefixed with HAnim yet all the
skeleton examples shown in the
The HAnim 200x
specification use HAnim nodes that are not prefixed with HAnim. Also a field
named humanoidBody is used for the Humanoid (HAnimHumanoid) node which is not in
the X3D specification. In X3D this field should be named skeleton.
Interchangable HAnim Animations
The HAnim standard specifies a complete human skeleton but
because this involves such a large number of joints, most in the VR/gaming
industry will find this impractical. A full HAnim skeleton will take up a huge
amount of
space in the scene tree window and imagine trying to animate each joint
manually.
Motion capture shows only a fraction of this number of joints are needed to
achieve convincing human
like movement. Animators can reduce the number joints when using HAnim but because
there is no "Reduced HAnim Skeleton" standard, much of the interchangeability
will be lost.
Also it is worth noting that 2 models that use the same skeleton structure won't
behave exactly the same if the distances between
the joints are not exactly the same.
Exporting and Importing to HAnim
When exporting to HAnim using Seamless3d, the Scene node's genHAnimNodes check box must be
ticked. For some examples of HAnim export options, see
the browser avatar compatibility page
When exporting to HAnim Seamless3d exports it's native Part nodes to HAnimJoint
nodes and when importing HAnim, HAnimJoint and HAnimSegment nodes are converted
to Part nodes. For exporting HAnim see:
Import HAnim Avatar
The controversy that surrounds generating normals from a deformed HAnim mesh
In 2004 Justin Couch began a thread
H-anim with hardware shaders issues
on the HAnim mailing list in which he
explained that when creaseAngle and IndexedFaceSets are used for HAnimJoint
nodes, the
browser must regenerate normals from the deformed mesh and is the same
rule that applies to using a CoordinateInterpolator. I have never
understood how this makes sense because skinning implies that you are
transforming the mesh which is very different to what a CoordinateInterpolator
does (When a mesh is transformed the point field is not modified). Not only do I believe
the practice of generating normals from a deformed mesh to be a misinterpretation of the existing
specification (from what little there is to go by), it is very inefficient to do
this for each frame and can easily cause discolouration to appear in the joints as shown in the following screen
shot taken from a VRML/X3D browser (look for dark discolorations in the hip, elbow and even shoulder in the
model to the right):
If I misunderstand the specifications and this is how it is meant to be then
HAnim's design is horribly flawed. Sadly all browsers I have tested regenerate
normals from a deformed mesh (when using an IndexedFaceSet) unless normals are
specified. This problem is not limited to my own examples as this
maria_noscript
HAnim model made and copyrighted by
Vcom3D
reveals
and this model is quite low in polygons. In this debate I was not alone in my belief that
regenerating the normals is a misunderstanding of the specifications as
Mark
Callow joined in saying:
If I provide an array of normals along with my vertex positions, does
X3D recompute my normals after transforming the vertices? I don't think
so. (For one thing performance with any graphics hardware (that does
transforms in hardware) would be horrible.) It just transforms them.
Shortly before Mark Callow posted, Justin Couch replied to one of my posts
stating:
It is a
case of follow it or else be labelled as non-conformant. In the grand
scheme of things that could also potentially result in legal action over
the use of service marks, usage of the term "X3D" etc.
If at a later date things conclude that Justin Couch is the one who has misinterpreted the specs, will this mean
a lawsuit will have to be filed against him for using the X3D term falsely after all these
years? or does a different set of
rules apply to members of the of the web3d consortium in this grand scheme ?
You can not have an open standard and have threats like this. Such threats
can not only catch your self out, they undermine support and confidence from those who seek a standard that offers freedom.
C++ is a very successful open standard and has achieved its success without
these kinds of restrictions.
What made this more surprising was earlier in the debate I asked Justin Couch:
Does the spec actually state the Coordinate's point values must be read
in a deformed state?
he replied with:
Unfortunately, the spec doesn't say anything about any of these sorts of
issues. It just washes it's hands of it. X3D, OTOH, just points at the
H-Anim spec and states "do what they say". Both of which are less than
useful to us :(
Yet later (in the same thread) after I said:
Thank you for going to the trouble to try and explain things more
clearly but sorry I think You, Justin and others seriously
misunderstand weighted vertex animation and shading.
Justin Couch replied with:
Actually, we understand it perfectly. We also happen to understand the
X3D spec perfectly. In fact, I wrote a large portion of X3D (and a large
part of VRML97 Part 2), so I know exactly what the spec means. We're
trying to tell you that your interpretation of the spec is not correct
but that does not seem to be getting through to you.
This sounds inconsistant with:
the spec doesn't say anything about any of these sorts of issues
If a standard is not developed by those who use it, it is a standard of academia
insulated from the real world.
Examples of HAnim
It is very hard to find examples of HAnim models that
conform to the HAnim 200x standard and which are legally open to be dissected
and which actually work in a VRML/X3D browser. Many Web3d consortium's HAnim
examples from the
HAnim example page do not work in any browser.
All the avatars on my avatar page in smls format
can be exported to
HAnim x3dv/z format. After exporting to HAnim, they can also be imported back to smls format.
You won't however get back all the goodies that it exist in the original smls
file such as the nurbs control points and because the original smls files use
features like nurbs to generate the meshes, smls files are about half the size
of the HAnim files.
For some smls files online already exported to HAnim, I have 3 of Lucy (exported
with different HAnim options) on my browser avatar compatibility page:
http://www.seamless3d.com/browser_test/lucy_test0.x3dvz
http://www.seamless3d.com/browser_test/lucy_test2.x3dvz
http://www.seamless3d.com/browser_test/lucy_test4.x3dvz
Joe D Williams has a few hand coded examples on his page under X3D
H-Anim Examples:
http://www.hypermultimedia.com/acontents.htm
I successfully imported his first example: H-Anim Example 0 .x3dv
Although I asked Joe D Wilaims if I can reference his avatar as an example I do
not know if they are exactly open source like all my avatars are so you may need
to check with him first if you want to modify them for online use.
From Vcom3D
there is the HAnim model
maria_noscript
Maria's HAnimHumanoid info states:
"authorName=Vcom3D, Inc.",
"authorEmail=info@vcom3d.com",
"copyright=Copyright 2004 Vcom3D, Inc., all rights reserved.",
"usageRestrictions=Property of Vcom3D, Inc. Provided to Yumetech, Inc.
and NIST for use development the H-Anim+ System.
May be used by third parties for non-commercial
applications. Vcom3D nametag and these credits must
be included."
ExitReality supports HAnim and allows for custom HAnim avatars to be used freely
for their 3d chat platform. Allthough ExitReality supports HAnimJoint nodes, the
HAnim avatars must be exported to VRML97 format.
Vivaty uses impressive HAnim avatars for their 3d chat platform but there is no option for
uploading your own custom made HAnim avatars to their 3d chat platform.
HAnim models exported from Vivaty studio don't open in any other browser than
Vivaty player but they can be imported using seamless3d and then exported to
other browsers including Vivaty Player. See the tutorial
Exporting a Vivaty Studio H-Anim Avatar
for Seamless3d
Bitmangement's VRML/X3D browser, Contact 7.2 has good support for HAnim.
and is supported by
Bitmangement chat platform, Collaborate. Contact 7.2 is also supported by the
Robotica,
ABnet,
Cybertown,
Oddessey,
3D Planets and
VR4All 3d chat servers. Unfortunately
Bitmangement's browser displays a floating logo unless you pay a
fee to have it removed.
[3d Modelling Software]
[Tutorials]
[Forum]
[Features]
[Download]
[Gallery]
[FAQ]
[Worlds]
[Avatars]
[Links]
[Thyme]