[x3d-public] Problems with HAnimMotion - WAS: RE: Example HAnimMotion node

Holger Seelig holger.seelig at yahoo.de
Thu Oct 23 02:21:22 PDT 2025


X_ITE would play that HAnimMotion if it would be enabled, unfortunately it has a enabled=‚false‘, which means it should not play at all.

Best regards,
Holger

—
Holger Seelig
holger.seelig at yahoo.de


> Am 22.10.2025 um 23:30 schrieb Don Brutzman via x3d-public <x3d-public at web3d.org>:
> 
> [added Dr. Myeong Won Lee plus hanim and x3d-public mailing lists]
> 
> BLUF:  HAnimMotion is well specified but various implementation efforts need improvement.
> 
> Thanks for your thoughtful, forward-leaning note and efforts Aaron.
> 
> We do have an HAnimMotion example in the archives, apologies I missed that model earlier:
> X3D Example Archives: Humanoid Animation, Specifications, Korean Character Motion Annex D 01 Jin
> Articulated 3D game character designed with a general graphics tool, then converted into an X3D HAnim model.
> https://www.web3d.org/x3d/content/examples/HumanoidAnimation/Specifications/KoreanCharacterMotionAnnexD01JinIndex.html
> X3D documentation links for HAnim in this model:
> https://www.web3d.org/x3d/content/examples/HumanoidAnimation/Specifications/KoreanCharacterMotionAnnexD01Jin.html#358 (line 358 <https://www.web3d.org/x3d/content/examples/HumanoidAnimation/Specifications/KoreanCharacterMotionAnnexD01Jin.html#358>)
> Visualization report for HAnimHumanoid model hanim_AnnexD01Jin
> https://www.web3d.org/x3d/content/examples/HumanoidAnimation/Specifications/KoreanCharacterMotionAnnexD01Jin.html#AnnexD01JinHAnimHumanoidReport
> =============================================================================================================================
> HAnimHumanoid hanim_AnnexD01Jin skeleton holds X3D4 HAnim2 joints/segments with an animating motion node.
>   [key] jointname : segmentname ^ sitename
> [nodes] HAnimJoint (18), : HAnimSegment (18), % HAnimDisplacer (0), $ HAnimMotion (1), ^ HAnimSite (0), @ skin nodes (0)
> =============================================================================================================================
> HAnimHumanoid DEF='hanim_AnnexD01Jin name='AnnexD01Jin' loa='-1'
> motions
>   HAnimMotion motion_animation
> skeleton
>   humanoid_root : sacrum
>     sacroiliac : pelvis
>       l_hip : l_thigh
>       | l_knee : l_calf
>       |   l_talocrural : l_talus
>       |     l_metatarsophalangeal_2 : l_tarsal_proximal_phalanx_2
>       r_hip : r_thigh
>       | r_knee : r_calf
>       |   r_talocrural : r_talus
>       |     r_metatarsophalangeal_2 : r_tarsal_proximal_phalanx_2
>       vl5 : l5
>         skullbase : skull
>         l_shoulder : l_upperarm
>         | l_elbow : l_forearm
>         |   l_radiocarpal : l_carpal
>         r_shoulder : r_upperarm
>           r_elbow : r_forearm
>             r_radiocarpal : r_carpal
> 
> $ HAnimHumanoid AnnexD01Jin holds 1 HAnimMotion node: motion_animation
> =============================================================================================================================
> with matching HAnim specification reference
> HAnim 2.0 Part 2: Humanoid animation (HAnim) motion data animation, Annex D (informative) Examples of HAnim motion data animation using a Motion object
> https://www.web3d.org/documents/specifications/19774/V2.0/MotionDataAnimation/ExampleMocapAnimationMotionObject.html
> Am getting very limited response to this model in current browsers.  X_ITE repositions but does not play.  X3DOM does not support HAnimMotion node, Castle Viewer and FreeWrl load the model but are silent about HAnimMotion.
> 
> Authoring tool support is provided by X3D-Edit, X3DJSAIL, X3DPSAIL, X3D Toolips and all of our XML validation tools.  X3D-Edit validation follows - this console output matches the build diagnostics created when model archives are built and deployed)  As ever, if anyone detects missing or overzealous tests for Quality Assurance (QA), am happy to add them.
> 
> --------- X3D Validator checks commenced for KoreanCharacterMotionAnnexD01Jin.x3d ---------
> Performing well-formed XML check...
> Checking file:/C:/x3d-code/www.web3d.org/x3d/content/examples/HumanoidAnimation/Specifications/KoreanCharacterMotionAnnexD01Jin.x3d. <http://www.web3d.org/x3d/content/examples/HumanoidAnimation/Specifications/KoreanCharacterMotionAnnexD01Jin.x3d.>..
> Well-formed XML check: pass
> 
> Performing DOCTYPE check...
> [X3dDoctypeChecker] success: valid XML declaration found.[X3dDoctypeChecker] success: final X3D 4.0 DOCTYPE found.
> 
> Performing DTD validation...
> Checking file:/C:/x3d-code/www.web3d.org/x3d/content/examples/HumanoidAnimation/Specifications/KoreanCharacterMotionAnnexD01Jin.x3d. <http://www.web3d.org/x3d/content/examples/HumanoidAnimation/Specifications/KoreanCharacterMotionAnnexD01Jin.x3d.>..
> Referenced entity at "http://www.w3.org/TR/2002/REC-xmldsig-core-20020212/xmldsig-core-schema.xsd".
> Referenced entity at "http://www.w3.org/2001/XMLSchema.dtd".
> Referenced entity at "jrt:/java.xml/jdk/xml/internal/jdkcatalog/w3c/dtd/schema10/datatypes.dtd".
> XML DTD validation: pass
> 
> Performing X3D schema validation...
> Checking file:/C:/x3d-code/www.web3d.org/x3d/content/examples/HumanoidAnimation/Specifications/KoreanCharacterMotionAnnexD01Jin.x3d. <http://www.web3d.org/x3d/content/examples/HumanoidAnimation/Specifications/KoreanCharacterMotionAnnexD01Jin.x3d.>..
> Referenced entity at "http://www.w3.org/TR/2002/REC-xmldsig-core-20020212/xmldsig-core-schema.xsd".
> Referenced entity at "http://www.w3.org/2001/XMLSchema.dtd".
> Referenced entity at "jrt:/java.xml/jdk/xml/internal/jdkcatalog/w3c/dtd/schema10/datatypes.dtd".
> XML schema validation: pass
> 
> Performing X3D regular expression (regex) values check...
> X3D regex check: complete
> 
> Performing X3D Schematron check...
> X3D version 4.0 was approved by Web3D Consortium and ISO in 2023.[/X3D, diagnostic]
> X3D version 4.0 offers many new features including interoperability with HTML5, glTF 2.0 Physically Based Rendering (PBR), and Web Audio API.[/X3D, diagnostic]
> <HAnimHumanoid DEF='hanim_AnnexD01Jin' name='AnnexD01Jin'/> version='2.0' with X3D version='4.0' [/X3D/Scene/HAnimHumanoid, diagnostic]
> ==================================================================================================================== [/X3D/Scene/HAnimHumanoid, diagnostic]
> <HAnimHumanoid DEF='hanim_AnnexD01Jin' name='AnnexD01Jin'/> node count(HAnimJoint)           within skeleton hierarchy        = 18[/X3D/Scene/HAnimHumanoid, diagnostic]
> <HAnimHumanoid DEF='hanim_AnnexD01Jin' name='AnnexD01Jin'/> node count(HAnimSegment)         within skeleton hierarchy        = 18[/X3D/Scene/HAnimHumanoid, diagnostic]
> <HAnimHumanoid DEF='hanim_AnnexD01Jin' name='AnnexD01Jin'/> node count(HAnimSite)            within HAnimHumanoid             = 0[/X3D/Scene/HAnimHumanoid, diagnostic]
> <HAnimHumanoid DEF='hanim_AnnexD01Jin' name='AnnexD01Jin'/> node count(HAnimSite//Viewpoint) within skeleton hierarchy        = 0[/X3D/Scene/HAnimHumanoid, diagnostic]
> <HAnimHumanoid DEF='hanim_AnnexD01Jin' name='AnnexD01Jin'/> node count(HAnimDisplacer)       within skeleton hierarchy        = 0[/X3D/Scene/HAnimHumanoid, diagnostic]
> <HAnimHumanoid DEF='hanim_AnnexD01Jin' name='AnnexD01Jin'/> node count(<HAnimJoint   USE='*' containerField = 'joints'/>)     = 18[/X3D/Scene/HAnimHumanoid, diagnostic]
> <HAnimHumanoid DEF='hanim_AnnexD01Jin' name='AnnexD01Jin'/> node count(<HAnimSegment USE='*' containerField = 'segments'/>)   = 18[/X3D/Scene/HAnimHumanoid, diagnostic]
> <HAnimHumanoid DEF='hanim_AnnexD01Jin' name='AnnexD01Jin'/> node count(<HAnimSite    USE='*' containerField = 'sites'/>)      = 0[/X3D/Scene/HAnimHumanoid, diagnostic]
> <HAnimHumanoid DEF='hanim_AnnexD01Jin' name='AnnexD01Jin'/> node count(<HAnimSite    DEF='*' name ends with '_view'/>)        = 0[/X3D/Scene/HAnimHumanoid, diagnostic]
> ==================================================================================================================== [/X3D/Scene/HAnimHumanoid, diagnostic]
> <HAnimJoint DEF='hanim_l_metatarsophalangeal_2' name='l_metatarsophalangeal_2'/> has parent HAnimJoint name='l_talocrural' rather than expected parent name='l_tarsometatarsal_2', recommend checking model [/X3D/Scene/HAnimHumanoid/HAnimJoint[1]/HAnimJoint/HAnimJoint[1]/HAnimJoint/HAnimJoint/HAnimJoint, warning]
> <HAnimJoint DEF='hanim_r_metatarsophalangeal_2' name='r_metatarsophalangeal_2'/> has parent HAnimJoint name='r_talocrural' rather than expected parent name='r_tarsometatarsal_2', recommend checking model [/X3D/Scene/HAnimHumanoid/HAnimJoint[1]/HAnimJoint/HAnimJoint[2]/HAnimJoint/HAnimJoint/HAnimJoint, warning]
> <HAnimJoint DEF='hanim_vl5' name='vl5'/> has parent HAnimJoint name='sacroiliac' rather than expected parent name='humanoid_root', recommend checking model [/X3D/Scene/HAnimHumanoid/HAnimJoint[1]/HAnimJoint/HAnimJoint[3], warning]
> <HAnimJoint DEF='hanim_skullbase' name='skullbase'/> has parent HAnimJoint name='vl5' rather than expected parent name='vc1', recommend checking model [/X3D/Scene/HAnimHumanoid/HAnimJoint[1]/HAnimJoint/HAnimJoint[3]/HAnimJoint[1], warning]
> <HAnimJoint DEF='hanim_l_shoulder' name='l_shoulder'/> has parent HAnimJoint name='vl5' rather than expected parent name='l_acromioclavicular', recommend checking model [/X3D/Scene/HAnimHumanoid/HAnimJoint[1]/HAnimJoint/HAnimJoint[3]/HAnimJoint[2], warning]
> <HAnimJoint DEF='hanim_r_shoulder' name='r_shoulder'/> has parent HAnimJoint name='vl5' rather than expected parent name='r_acromioclavicular', recommend checking model [/X3D/Scene/HAnimHumanoid/HAnimJoint[1]/HAnimJoint/HAnimJoint[3]/HAnimJoint[3], warning]
> 
> --------- X3D Validator checks complete for KoreanCharacterMotionAnnexD01Jin.x3d ---------
> 
> Implementation recap.  If memory serves, we depended on the Suwon HAnim Editor for animation demonstrations of this example.  To my knowledge, unfortunately no public version this tool has been shared, but we did see some compelling demonstrations together at the Web3D 2025 Conference in Siena.  I've copied Dr. Myeong Won Lee is you would like to pursue that further.
> 
> HAnimMotion is based directly on BVH files for motion-capture data.  BVH has been widely implemented but inconsistently utilized...  No particular standard can be found, and it seems to have been popular partly because the company BioVision was no longer in existence and thus unable to assert IPR or sue anyone.
> Wikipedia:  Biovision Hierarchy
> https://en.wikipedia.org/wiki/Biovision_Hierarchy
> Usually we are pretty insistent and onerous about insisting on 2 implementations before advancing any node in the standards.  There may have been another implementation besides the Suwon codebase, am simply not sure.  Given that it is very closely aligned with BVH, and we had multiple tools with a validating non-trivial example, I think we might have (reluctantly) moved forward with only one player... again, not sure.  Sorry to be uncertain.  Hopefully we did not blunder.
> 
> I don't blame you for questioning whether to go forward if no implementations exist... that is the primary bargain we make with the X3D and HAnim standards.  Nevertheless I have high confidence that HAnimMotion node is well specified, HAnimMotion data is validatable, and HAnimMotion can be consistently repeatable by other X3D players.
> 
> I welcome any corrections and improvements to the Example Archives model.
> 
> Thank you for pursuing this.  There are many thousands of BVH models out there (with some format variations and looseness involved).  It will be great when we become adept at massaging & converting them into well-defined HAnimMotion nodes (X3D-Edit has an initial implementation).  If we become really capable at that task, especially if using your planned implementation, we might then work on BVH validation reports during conversion as diagnostics, and perhaps even direct import (as a HAnimMotion node url field) as part of the draft HAnim v2.1 specification.
> 
> Seems like much excellent capability beckons!  Onward...
> 
> all the best, Don
> -- 
> X3D Graphics, Maritime Robotics, Distributed Simulation
> Relative Motion Consulting  https://RelativeMotion.info <https://relativemotion.info/>
> 
> On Wed, Oct 22, 2025 at 8:46 AM Bergstrom, Aaron <aaron.bergstrom at und.edu <mailto:aaron.bergstrom at und.edu>> wrote:
>> All,
>> 
>>  
>> 
>> My particular use case is not to perform any direct BVH to X3D conversion, or vice versa. Rather, my use cases are as follows:
>> 
>> BVH data is imported into Maya and applied to a Maya skeleton per established best practices for Maya character animation. Then the animation data is collected from the Maya skeleton by RawKee at export time (the way I currently do it), but instead of being written out as Routes, Interpolators, and a TimeSensor, it is written out as a HAnimMotion node.
>> A Maya animation artists animates an existing Maya character. Then the animation data is collected from the Maya skeleton by RawKee at export time (the way I currently do it), but instead of being written out as Routes, Interpolators, and a TimeSensor, it is written out as a HAnimMotion node.
>>  
>> 
>> In the end, it doesn’t matter to RawKee whether the original animation data comes from a BVH file or from an animator. I just want to properly populate an HAnimMotion node with animation data.
>> 
>>  
>> 
>> It seems that the only existing HAnimMotion example doesn’t work, and it also appears to not conform to the official X3D spec, per John’s description.
>> 
>>  
>> 
>> I have to question why the HAnimMotion node is even in the X3D spec since there seems to be no working implementation of it in any existing browser, nor even any version of it in an X3D file.
>> 
>>  
>> 
>> Neither X3DOM, nor CGE support the HAnimMotion node.
>> 
>>  
>> 
>> X_ITE documentation says it does, but I don’t see an example of the HAnimMotion node on the X_ITE website, and the one version of the node on the Web3D X3D example site doesn’t seem to work with X_ITE. Though, as discussed by John, that one example doesn’t appear to match the spec anyway.
>> 
>>  
>> 
>> I’m not sure it’s worth implementing HAnimMotion in RawKee if it can’t even be tested in any of the browsers.
>> 
>>  
>> 
>> Aaron
>> 
>>  
>> 
>> From: Joe D Williams <joedwil at earthlink.net <mailto:joedwil at earthlink.net>> 
>> Sent: Wednesday, October 22, 2025 9:46 AM
>> To: Don Brutzman <don.brutzman at gmail.com <mailto:don.brutzman at gmail.com>>; Bergstrom, Aaron <aaron.bergstrom at und.edu <mailto:aaron.bergstrom at und.edu>>
>> Cc: John Carlson <yottzumm at gmail.com <mailto:yottzumm at gmail.com>>; Joe D Williams <joedwil at earthlink.net <mailto:joedwil at earthlink.net>>
>> Subject: Re: Example HAnimMotion node
>> 
>>  
>> 
>> I would be interested in recoding JoeKick to a BVH, currently thinking of and study of glTF encoding for skeleton.
>> 
>>   
>> Otherwise I haven't seen anything since Pirroette: *spell check, that we looked at but I basically gave up on.
>> Still potentially a good notsimple example conversion since BVH skeleton obviously did not convert using rules we had then. 
>> Maybe now there might be convert BVH to FBX or OBJ or JSON.
>>  
>>  
>> -----Original Message-----
>> From: Don Brutzman <don.brutzman at gmail.com <mailto:don.brutzman at gmail.com>>
>> Sent: Oct 21, 2025 2:59 PM
>> To: Bergstrom, Aaron <aaron.bergstrom at und.edu <mailto:aaron.bergstrom at und.edu>>
>> Cc: John Carlson <yottzumm at gmail.com <mailto:yottzumm at gmail.com>>, Joe D Williams <joedwil at earthlink.net <mailto:joedwil at earthlink.net>>
>> Subject: Re: Example HAnimMotion node
>> 
>>  
>> cc: Joe
>> 
>>  
>> 
>> I don't think we have a working example in the archives, and have lost track with what we were doing for testing back then.
>> 
>>  
>> 
>> I'd welcome a simple Motion node example in the archives, for starters.  I suggest reaching out to the mailing lists and see who has one.
>> 
>>  
>> 
>> New years resolution, perhaps: we ought to get competent at BVH import and conversion to HAnimMotion node examples.
>> 
>>  
>> 
>> Thanks for asking Aaron.
>> 
>>  
>> 
>> all the best, Don
>> 
>> -- 
>> 
>> X3D Graphics, Maritime Robotics, Distributed Simulation
>> 
>> Relative Motion Consulting  https://RelativeMotion.info <https://relativemotion.info/>
>>  
>> 
>> On Mon, Oct 20, 2025 at 9:31 PM Bergstrom, Aaron <aaron.bergstrom at und.edu <mailto:aaron.bergstrom at und.edu>> wrote:
>> 
>> Don and John,
>> 
>>  
>> 
>> Do either of you have an example of HAnim content that uses an HAnimMotion node? I don’t see anything in the X3D examples website under HAnim.
>> 
>>  
>> 
>> After reading through the BVH specs, I think I understand how the HAnimMotion node works, but I would like to see a working version of it as an X3D file.
>> 
>>  
>> 
>> Thanks,
>> 
>>  
>> 
>> Aaron
>> 
>>  
> _______________________________________________
> x3d-public mailing list
> x3d-public at web3d.org
> http://web3d.org/mailman/listinfo/x3d-public_web3d.org

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://web3d.org/pipermail/x3d-public_web3d.org/attachments/20251023/3abd1b31/attachment-0001.html>


More information about the x3d-public mailing list