[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