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

Don Brutzman don.brutzman at gmail.com
Fri Oct 24 20:57:30 PDT 2025


John, a fix can be tested by anyone through online editing.  As attached
screen capture shows, I went to the X_ITE Playground page at

   - 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.
   - Humanoid Animation X3D Examples Archive, Specifications, Korean
   Character Motion Annex D 01 Jin
   <https://www.web3d.org/x3d/content/examples/HumanoidAnimation/Specifications/KoreanCharacterMotionAnnexD01JinIndex.html>
   - with link  (Playground
   <https://create3000.github.io/x_ite/playground/?url=https://www.web3d.org/x3d/content/examples/HumanoidAnimation/Specifications/KoreanCharacterMotionAnnexD01Jin.x3d>
   )

and changed

   -       <HAnimMotion DEF='hanim_motion_animation'
             name='motion_animation'
             enabled='true' loop='true'

to see a continuously running animation.

Issue report follows.

all the best, Don
-- 
X3D Graphics, Maritime Robotics, Distributed Simulation
Relative Motion Consulting  https://RelativeMotion.info


On Thu, Oct 23, 2025 at 4:48 AM John Carlson via x3d-public <
x3d-public at web3d.org> wrote:

> Thanks, Holger, that’s the point I was trying to make!   CTRL-F works
> wonders!
>
> Don, can this be fixed in the archive?
>
> John
>
> On Thu, Oct 23, 2025 at 4:22 AM Holger Seelig via x3d-public <
> x3d-public at web3d.org> wrote:
>
>> 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.
>> ..
>> 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.
>> ..
>> 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.
>> ..
>> 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>
>> 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:
>>>
>>>    1. 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.
>>>    2. 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>
>>> *Sent:* Wednesday, October 22, 2025 9:46 AM
>>> *To:* Don Brutzman <don.brutzman at gmail.com>; Bergstrom, Aaron <
>>> aaron.bergstrom at und.edu>
>>> *Cc:* John Carlson <yottzumm at gmail.com>; Joe D Williams <
>>> 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>
>>> Sent: Oct 21, 2025 2:59 PM
>>> To: Bergstrom, Aaron <aaron.bergstrom at und.edu>
>>> Cc: John Carlson <yottzumm at gmail.com>, Joe D Williams <
>>> 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> 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
>>
>>
>> _______________________________________________
>> x3d-public mailing list
>> x3d-public at web3d.org
>> http://web3d.org/mailman/listinfo/x3d-public_web3d.org
>>
> _______________________________________________
> 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/20251024/f3992827/attachment-0001.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: HAnimMotionJinAnimationX_ITEplayground.png
Type: image/png
Size: 205675 bytes
Desc: not available
URL: <http://web3d.org/pipermail/x3d-public_web3d.org/attachments/20251024/f3992827/attachment-0001.png>


More information about the x3d-public mailing list