[x3d-public] upgrade HAnim1 to HAnim2 models using X3dTidy.xslt stylesheet conversion; new examples

Don Brutzman brutzman at nps.edu
Mon Jul 13 10:52:10 PDT 2020


1. HAnim1 to HAnim2 conversion.

X3dTidy.xslt stylesheet is now able to perform HAnim1 to HAnim2 conversion, demonstrated on multiple models.

Am happy to report that a new build is online for the new HumanoidAnimation collection in the X3D Examples Archive.

[1] HumanoidAnimation X3D Examples Archive
     https://www.web3d.org/x3d/content/examples/HumanoidAnimation

Examples of HAnim1 to HAnim2 conversions are copied from console logs in the following reference, with excerpts following:

[2] HumanoidAnimation HAnim2 build.conversions.log.txt
     https://www.web3d.org/x3d/content/examples/HumanoidAnimation/build.conversions.log.txt

next check X3dTidy...
C:\x3d-code\www.web3d.org\x3d\content\examples\HumanoidAnimation/Characters//KoreanCharacter01Jin.x3d processing with X3dTidy.xslt stylesheet for tidied-up .x3d
*** HAnim2  DEF replaced: HAnimJoint DEF='hanim_l_ankle' alias replaced with standardized newDEFvalue='hanim_l_talocrural'
*** HAnim2 name replaced: HAnimJoint name='l_ankle' alias with preferred name='l_talocrural'
*** HAnim2  DEF replaced: HAnimSegment DEF='hanim_l_hindfoot' alias replaced with standardized newDEFvalue='hanim_l_talus'
*** HAnim2 name replaced: HAnimSegment name='l_hindfoot' alias with preferred name='l_talus'
*** HAnim2  DEF replaced: HAnimJoint DEF='hanim_l_midtarsal' alias replaced with standardized newDEFvalue='hanim_l_metatarsophalangeal_2'
*** HAnim2 name replaced: HAnimJoint name='l_midtarsal' alias with preferred name='l_metatarsophalangeal_2'
*** HAnim2  DEF replaced: HAnimSegment DEF='hanim_l_middistal' alias replaced with standardized newDEFvalue='hanim_l_tarsal_proximal_phalanx_2'
*** HAnim2 name replaced: HAnimSegment name='l_middistal' alias with preferred name='l_tarsal_proximal_phalanx_2'
*** HAnim2  DEF replaced: HAnimJoint DEF='hanim_r_ankle' alias replaced with standardized newDEFvalue='hanim_r_talocrural'
*** HAnim2 name replaced: HAnimJoint name='r_ankle' alias with preferred name='r_talocrural'
*** HAnim2  DEF replaced: HAnimSegment DEF='hanim_r_hindfoot' alias replaced with standardized newDEFvalue='hanim_r_talus'
*** HAnim2 name replaced: HAnimSegment name='r_hindfoot' alias with preferred name='r_talus'
*** HAnim2  DEF replaced: HAnimJoint DEF='hanim_r_midtarsal' alias replaced with standardized newDEFvalue='hanim_r_metatarsophalangeal_2'
*** HAnim2 name replaced: HAnimJoint name='r_midtarsal' alias with preferred name='r_metatarsophalangeal_2'
*** HAnim2  DEF replaced: HAnimSegment DEF='hanim_r_middistal' alias replaced with standardized newDEFvalue='hanim_r_tarsal_proximal_phalanx_2'
*** HAnim2 name replaced: HAnimSegment name='r_middistal' alias with preferred name='r_tarsal_proximal_phalanx_2'
*** HAnim2  DEF replaced: HAnimJoint DEF='hanim_l_wrist' alias replaced with standardized newDEFvalue='hanim_l_radiocarpal'
*** HAnim2 name replaced: HAnimJoint name='l_wrist' alias with preferred name='l_radiocarpal'
*** HAnim2  DEF replaced: HAnimSegment DEF='hanim_l_hand' alias replaced with standardized newDEFvalue='hanim_l_carpal'
*** HAnim2 name replaced: HAnimSegment name='l_hand' alias with preferred name='l_carpal'
*** HAnim2  DEF replaced: HAnimJoint DEF='hanim_r_wrist' alias replaced with standardized newDEFvalue='hanim_r_radiocarpal'
*** HAnim2 name replaced: HAnimJoint name='r_wrist' alias with preferred name='r_radiocarpal'
*** HAnim2  DEF replaced: HAnimSegment DEF='hanim_r_hand' alias replaced with standardized newDEFvalue='hanim_r_carpal'
*** HAnim2 name replaced: HAnimSegment name='r_hand' alias with preferred name='r_carpal'
*** HAnim2  USE replaced: HAnimJoint USE='hanim_l_ankle' alias replaced with standardized newUSEvalue='hanim_l_talocrural'
*** HAnim2  USE replaced: HAnimJoint USE='hanim_r_ankle' alias replaced with standardized newUSEvalue='hanim_r_talocrural'
*** HAnim2  USE replaced: HAnimJoint USE='hanim_l_midtarsal' alias replaced with standardized newUSEvalue='hanim_l_metatarsophalangeal_2'
*** HAnim2  USE replaced: HAnimJoint USE='hanim_r_midtarsal' alias replaced with standardized newUSEvalue='hanim_r_metatarsophalangeal_2'
*** HAnim2  USE replaced: HAnimJoint USE='hanim_l_wrist' alias replaced with standardized newUSEvalue='hanim_l_radiocarpal'
*** HAnim2  USE replaced: HAnimJoint USE='hanim_r_wrist' alias replaced with standardized newUSEvalue='hanim_r_radiocarpal'
*** HAnim2  USE replaced: HAnimSegment USE='hanim_l_hand' alias replaced with standardized newUSEvalue='hanim_l_carpal'
*** HAnim2  USE replaced: HAnimSegment USE='hanim_r_hand' alias replaced with standardized newUSEvalue='hanim_r_carpal'
*** HAnim2  USE replaced: HAnimSegment USE='hanim_l_hindfoot' alias replaced with standardized newUSEvalue='hanim_l_talus'
*** HAnim2  USE replaced: HAnimSegment USE='hanim_r_hindfoot' alias replaced with standardized newUSEvalue='hanim_r_talus'
*** HAnim2  USE replaced: HAnimSegment USE='hanim_l_middistal' alias replaced with standardized newUSEvalue='hanim_l_tarsal_proximal_phalanx_2'
*** HAnim2  USE replaced: HAnimSegment USE='hanim_r_middistal' alias replaced with standardized newUSEvalue='hanim_r_tarsal_proximal_phalanx_2'
=========================================================================================
HAnimHumanoid skeleton holds HAnimJoint : HAnimSegment : HAnimSite triplets (X3D4 HAnim2)
=========================================================================================
HAnimHumanoid DEF='hanim_Jin name='Jin'
   humanoid_root : sacrum
     l_hip : l_thigh
     | l_knee : l_calf
     |   l_ankle (HAnim2 name replaced: l_talocrural) : l_hindfoot (HAnim2 name replaced: l_talocrural)
     |     l_midtarsal (HAnim2 name replaced: l_metatarsophalangeal_2) : l_middistal (HAnim2 name replaced: l_metatarsophalangeal_2)
     r_hip : r_thigh
     | r_knee : r_calf
     |   r_ankle (HAnim2 name replaced: r_talocrural) : r_hindfoot (HAnim2 name replaced: r_talocrural)
     |     r_midtarsal (HAnim2 name replaced: r_metatarsophalangeal_2) : r_middistal (HAnim2 name replaced: r_metatarsophalangeal_2)
     sacroiliac : pelvis
       l_shoulder : l_upperarm
       | l_elbow : l_forearm
       |   l_wrist (HAnim2 name replaced: l_radiocarpal) : l_hand (HAnim2 name replaced: l_radiocarpal)
       r_shoulder : r_upperarm
       | r_elbow : r_forearm
       |   r_wrist (HAnim2 name replaced: r_radiocarpal) : r_hand (HAnim2 name replaced: r_radiocarpal)
       vl5 : l5
         skullbase : skull
===========================================================================

... with subsequent recheck of modified source X3D model showing:

next check X3dTidy...
C:\x3d-code\www.web3d.org\x3d\content\examples\HumanoidAnimation/Characters//KoreanCharacter01Jin.x3d processing with X3dTidy.xslt stylesheet for tidied-up .x3d
=========================================================================================
HAnimHumanoid skeleton holds HAnimJoint : HAnimSegment : HAnimSite triplets (X3D4 HAnim2)
=========================================================================================
HAnimHumanoid DEF='hanim_Jin name='Jin'
   humanoid_root : sacrum
     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
     sacroiliac : pelvis
       l_shoulder : l_upperarm
       | l_elbow : l_forearm
       |   l_radiocarpal : l_carpal
       r_shoulder : r_upperarm
       | r_elbow : r_forearm
       |   r_radiocarpal : r_carpal
       vl5 : l5
         skullbase : skull
===========================================================================

Interestingly the specific stylesheet rules used to create diagnostics and corrections are autogenerated from parent-child-alias information in X3D XML Schema and X3D Unified Object Model (X3DUOM).

All of the latest Quality Assurance (QA) efforts are documented with diagnostics, warnings and error messages.

[3] build.X3dSchematronX3dTidy.log.txt
     https://www.web3d.org/x3d/content/examples/HumanoidAnimation/build.X3dSchematronX3dTidy.log.txt

----

2. Increasing fidelity and support.

Am also happy to report addition of four Jin models illustrating progressive Level of Articulation (LOA) 1, 2, 3, and 4.  LOA 4 consists of full human skeleton, including high-fidelity hands and feet.

[3] X3D Example Archives: Humanoid Animation, Characters (X3D4, HAnim2)
     https://www.web3d.org/x3d/content/examples/HumanoidAnimation/Characters

[3.1] X3D Example Archives: Humanoid Animation, Characters, Jin LOA 1
       https://www.web3d.org/x3d/content/examples/HumanoidAnimation/Characters/JinLOA1Index.html

[3.2] X3D Example Archives: Humanoid Animation, Characters, Jin LOA 2
       https://www.web3d.org/x3d/content/examples/HumanoidAnimation/Characters/JinLOA2Index.html

[3.3] X3D Example Archives: Humanoid Animation, Characters, Jin LOA 3
       https://www.web3d.org/x3d/content/examples/HumanoidAnimation/Characters/JinLOA3Index.html

[3.4] X3D Example Archives: Humanoid Animation, Characters, Jin LOA 4
       https://www.web3d.org/x3d/content/examples/HumanoidAnimation/Characters/JinLOA1Index.html

Although these were previously lost two summers ago, special thanks to Myeong Won Lee for recovering them.  Only minor changes were necessary to pass all conformance testing.

In addition to Web3D archives, all HumanoidAnimation models are maintained in version control at

[4] SourceForge X3D Examples, HumanoidAnimation
     https://sourceforge.net/p/x3d/code/HEAD/tree/www.web3d.org/x3d/content/examples/HumanoidAnimation

Implementation note.  These work in X3DOM.  We believe the following requirements must be met to also achieve X_ITE support:
- For <component> statement, in the newly released HAnim standard, we have removed the hyphen from "H-Anim".
- In the corresponding X3D4 specification, version 2 "HAnim" component will be correct.
- In X3D3 specification, "H-Anim" component will be unchanged.
- HAnimHumanoid node now includes version="2.0" in X3D version="4.0".

[5] X3D Tooltips 4.0, HAnimHumanoid
     https://www.web3d.org/x3d/content/X3dTooltips.html#HAnimHumanoid

----

3. Better and Better.

As one might guess, immense attention to detail is necessary for ensuring in-depth Quality Assurance (QA) of high-fidelity human skeletons.  Our current diagnostics cover Joint, Segment and Site hierarchies from the new specification.  Next coming into view for further efforts this summer: HAnimMotion.

[6] HAnim2 Specification
     https://www.web3d.org/documents/specifications/19774/V2.0

Thanks to Joe Williams and John Carlson for weekly HAnim videoconferences that have been essential for climbing this mountain.  The journey continues, others may find it interesting too.

All questions and improvements welcome.  Have fun with X3D4 and HAnim2!  8)

all the best, Don
-- 
Don Brutzman  Naval Postgraduate School, Code USW/Br       brutzman at nps.edu
Watkins 270,  MOVES Institute, Monterey CA 93943-5000 USA   +1.831.656.2149
X3D graphics, virtual worlds, navy robotics http://faculty.nps.edu/brutzman



More information about the x3d-public mailing list