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, ABnetCybertown, 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]