[x3d-public] HAnim implementation minutes 2 July 2020, substantial progress

John Carlson yottzumm at gmail.com
Sun Jul 5 05:38:23 PDT 2020


I’m not sure if it’s JoeKick or your hierarchy generating code Don.   Many
segments do not exist in output hierarchy.

John
On Sun, Jul 5, 2020 at 12:40 AM Don Brutzman <brutzman at nps.edu> wrote:

> Attendees: John Carlson, Joe Williams, Don Brutzman
>
> No members-only information is present in these minutes & progress report.
>
> We typically meet in Web3D Zoom room Thursday afternoons, 1300-1430
> pacific.
>
> ----
>
> 1. *Examples Archive*
>
> We reviewed numerous errors and warnings in 66 example scenes, all ported
> from the Basic examples archive.
>
> [1] HumanoidAnimation X3D Examples Archive
>      https://www.web3d.org/x3d/content/examples/HumanoidAnimation
>
> Validation with X3D XML Schema and DTD is working well.
>
> We have been focusing on X3D Schematron warnings and X3dTidy.xslt
> corrections.  Recent checks have included tests autogenerated from X3DUOM
> information on HAnim nodes, field types, accessTypes, allowed names,
> expected parent-child relationships, and allowed alias names.
>
> Build logs and (most importantly) regression-testing outputs are found at
>
> [2] HumanoidAnimation build log
>
> https://www.web3d.org/x3d/content/examples/HumanoidAnimation/build.log.txt
>
> [3] HumanoidAnimation regression-testing log, X3D Schematron and X3D Tidy
> stylesheets
>
> https://www.web3d.org/x3d/content/examples/HumanoidAnimation/build.X3dSchematronX3dTidy.log.txt
>
> Numerous discussion points clarified test relevance and focus.  Subsequent
> progress follows.
>
> a. Although some warnings may be considered excessive, we decided to keep
> everything so that these checks can continue to improve.  Heuristic: the
> worst errors are the ones with no indication that a problem is occurring.
>
> b. Left/right asymmetry warnings: silenced if only one side is present.
>
> c. center='0 0 0' is a common error but it is also the default.  Usually a
> value must be provided, each center is relative to the humanoid coordinate
> system, NOT the local fram of the HAnimJoint or HAnimSegment or HAnimSIte.
>
> d. TODO: continued look at automatically upgrading HAnim1 names to HAnim2
> preferred name if an alias is provided.  Am expecting we will add that
> correction is it leads to better interoperability of animations.
> Considering how/whether to nevertheless note original name, perhaps in the
> description field.
>
> e. HAnimSite names are supposed to end with suffix _pt _tip (end effector)
> or _view (viewpoint).  Now appending _pt if other values not provided.
>
> f. Better diagnostics of humanoid_root
>
> g. Fixed hundreds of naming inconsistencies/glitches through a mix of
> rules, corrections and editing.  More remain but we are getting much closer
> to strict compliance, and logs are much cleaner.
>
> h. Improved addition/replacement/removal of USE nodes is occurring under
> HAnimHumanoid.
>
> Also now sorting USE nodes so that left and right values alternate,
> facilitating troubleshooting of missing or misspelled names.  Example:
>
> [...]
> <HAnimJoint USE='Joe_vt7' containerField='joints'/>
> <HAnimJoint USE='Joe_vt8' containerField='joints'/>
> <HAnimJoint USE='Joe_vt9' containerField='joints'/>
> <HAnimJoint USE='Joe_l_acromioclavicular' containerField='joints'/>
> <HAnimJoint USE='Joe_r_acromioclavicular' containerField='joints'/>
> <HAnimJoint USE='Joe_l_ankle' containerField='joints'/>
> <HAnimJoint USE='Joe_r_ankle' containerField='joints'/>
> <HAnimJoint USE='Joe_l_elbow' containerField='joints'/>
> <HAnimJoint USE='Joe_r_elbow' containerField='joints'/>
> <HAnimJoint USE='Joe_l_eyeball_joint' containerField='joints'/>
> <HAnimJoint USE='Joe_r_eyeball_joint' containerField='joints'/>
> <HAnimJoint USE='Joe_l_eyebrow_joint' containerField='joints'/>
> <HAnimJoint USE='Joe_r_eyebrow_joint' containerField='joints'/>
> <HAnimJoint USE='Joe_l_eyelid_joint' containerField='joints'/>
> <HAnimJoint USE='Joe_r_eyelid_joint' containerField='joints'/>
> <HAnimJoint USE='Joe_l_hip' containerField='joints'/>
> <HAnimJoint USE='Joe_r_hip' containerField='joints'/>
> <HAnimJoint USE='Joe_l_index0' containerField='joints'/>
> <HAnimJoint USE='Joe_r_index0' containerField='joints'/>
> <HAnimJoint USE='Joe_l_index1' containerField='joints'/>
> <HAnimJoint USE='Joe_r_index1' containerField='joints'/>
> etc.
>
> i. Troubleshooting technique: when names are confusing or garbled, or
> duplicate name/DEF pairs are confounding, then looking at parent node often
> helps disambiguate what the correct value is.
>
> ----
>
> 2. *Specification questions*
>
> a. Legacy question: wondering if we need HAnim component level
> corresponding to higher LOAs?  Am thinking no, because no special player
> capabilities are required.  Right now we have level 2 for HAnimMotion and
> level 1 for everything else in HAnim2, seems sufficient and a good
> evolution from HAnim1.
>
> ----
>
> b. Noted mismatched field names, expecting to correct them in near future.
>
> [4] Mantis 1314: X3D4 HAnimHumanoid spelling of skinBindingCoords,
> skinBindingNormals
>      https://www.web3d.org/member-only/mantis/view.php?id=1314
>
> [4] Mantis 1315: HAnim2 Humanoid spelling of skinBindingCoords,
> skinBindingNormals should be singular
>      https://www.web3d.org/member-only/mantis/view.php?id=1315
>
> =====================
> HAnim2 Humanoid spelling of skinBindingCoords, skinBindingNormals is
> inconsistent with spelling of skinCoord, skinNormal. Inclusion of "s" seems
> mistaken since these are all SFNode fields.
>
> Proposed remedy: avoid "s" suffix in X3D Architecture, submit erratum to
> HAnim2 abstract reference model as a proposed corrigendum to ISO. This
> would be submitted to SC24 as a change document.
> =====================
>
> c. Editorial omission, corrections underway:
>
> [5] Mantis 1322: X3D4 HAnimMotion node is missing startFrame, endFrame
> fields
>      https://www.web3d.org/member-only/mantis/view.php?id=1322
>
> ----
>
> 3. *Generating the HAnim model skeleton as an ASCII-art text tree*
>
> a. Really important references in the HAnim2 specification are the text
> trees showing Joint/Segment pairs and hierarchy.  Check it out:
>
> [6] HAnim2 part 1, 4.9.6 Hierarchy
>
> https://www.web3d.org/documents/specifications/19774/V2.0/Architecture/concepts.html#Hierarchy
>
> > 4.9.6.1 LOA‑1 hierarchy
> >
> > The LOA‑1 hierarchy forming the basic set of Joint objects is specified
> in Figure 4.10 with the segment names listed after the joints to which they
> are attached.
> >
> > 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
> >
> > Figure 4.10 — Basic set of Joint:Segment hierarchy for LOA‑1 (joint name
> : segment name)
>
> ----
>
> b. Inspired by these diagrams, X3dTidy now produces diagrams for each
> HAnim model by walking the tree.
>
> This _really_ helps debugging!  Example excerpt:
>
> 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 pairs, names
> follow...
>
> =============================================================================
> Jin
>    humanoid_root : sacrum
>      l_hip : l_thigh
>      | l_knee : l_calf
>      |   l_ankle : l_hindfoot
>      |     l_midtarsal : l_middistal
>      r_hip : r_thigh
>      | r_knee : r_calf
>      |   r_ankle : r_hindfoot
>      |     r_midtarsal : r_middistal
>      sacroiliac : pelvis
>        l_shoulder : l_upperarm
>        | l_elbow : l_forearm
>        |   l_wrist : l_hand
>        r_shoulder : r_upperarm
>        | r_elbow : r_forearm
>        |   r_wrist : r_hand
>        vl5 : l5
>          skullbase : skull
>
> =============================================================================
>
> wow.  we've had this model for years without knowing if it is exactly
> correct since checking monster trees is challenging.  compare this diagram
> to just-preceding tree excerpted from specification... uh oh, it does not
> match the LOA-1 hierarchy!  The Jin model has hips as peers of sacroiliac,
> rather than children.
>
> We're turning a corner here, proper understanding to match low-level
> debugging of models appears to be emerging.  8)
>
> Myeong Won Lee, I believe all of your models and corresponding animations
> have this topological variation from HAnim standard skeleton.  It will be
> interesting to see if we can straighten these out in a simple manner.
>
> ----
>
> c. Here is a longer example.  Joe, does this actually match LOA-3, for
> Joint nodes at least?
>
> C:\x3d-code\www.web3d.org\x3d\content\examples\HumanoidAnimation\Characters\JoeKick.x3d
> validation using X3D Schematron rules
> X3D version 4.0 is experimental and under development, focused on
> HTML5/DOM interoperabiliity. [/X3D, diagnostic]
> <meta name='TODO' content='Record information about skin coordinates
> (found in comment at end of scene) as a structured MetadataSet containing
> MetadataString nodes'/>[/X3D/head/meta[7], diagnostic]
>
> ====================================================================================================================[/X3D/Scene/Group[1]/HAnimHumanoid,
> diagnostic]
> <HAnimHumanoid DEF='Joe_Human' name='Human'/> node count(HAnimJoint)
>      within skeleton hierarchy        =
> 94[/X3D/Scene/Group[1]/HAnimHumanoid, diagnostic]
> <HAnimHumanoid DEF='Joe_Human' name='Human'/> node count(HAnimSegment)
>      within skeleton hierarchy        =
> 1[/X3D/Scene/Group[1]/HAnimHumanoid, diagnostic]
> <HAnimHumanoid DEF='Joe_Human' name='Human'/> node count(HAnimSite)
>     within HAnimHumanoid             = 1[/X3D/Scene/Group[1]/HAnimHumanoid,
> diagnostic]
> <HAnimHumanoid DEF='Joe_Human' name='Human'/> node
> count(HAnimSite//Viewpoint) within skeleton hierarchy        =
> 1[/X3D/Scene/Group[1]/HAnimHumanoid, diagnostic]
> <HAnimHumanoid DEF='Joe_Human' name='Human'/> node count(HAnimDisplacer)
>      within skeleton hierarchy        =
> 1[/X3D/Scene/Group[1]/HAnimHumanoid, diagnostic]
> <HAnimHumanoid DEF='Joe_Human' name='Human'/> node count(<HAnimJoint
>  USE='*' containerField = 'joints'/>      =
> 94[/X3D/Scene/Group[1]/HAnimHumanoid, diagnostic]
> <HAnimHumanoid DEF='Joe_Human' name='Human'/> node count(<HAnimSegment
> USE='*' containerField = 'segments'/>    =
> 1[/X3D/Scene/Group[1]/HAnimHumanoid, diagnostic]
> <HAnimHumanoid DEF='Joe_Human' name='Human'/> node count(<HAnimSite
> USE='*' containerField = 'sites'/>       =
> 1[/X3D/Scene/Group[1]/HAnimHumanoid, diagnostic]
> <HAnimHumanoid DEF='Joe_Human' name='Human'/> node count(<HAnimSite
> DEF='*' name ends with '_view'/>         =
> 0[/X3D/Scene/Group[1]/HAnimHumanoid, diagnostic]
> ====================================================================================================================[/X3D/Scene/Group[1]/HAnimHumanoid,
> diagnostic]
> <HAnimSite DEF='Joe_RootFront_view' name='RootFront_view'/> is not a
> recognized name for HAnimSite in
> HAnim2[/X3D/Scene/Group[1]/HAnimHumanoid/HAnimJoint[1]/HAnimSegment/HAnimSite,
> warning]
> <HAnimJoint DEF='Joe_l_ankle' name='l_ankle'/> is not a recognized name
> for HAnimJoint in
> HAnim2[/X3D/Scene/Group[1]/HAnimHumanoid/HAnimJoint[1]/HAnimJoint[1]/HAnimJoint[1]/HAnimJoint/HAnimJoint,
> warning]
> <HAnimJoint DEF='Joe_l_ankle' name='l_ankle'/> is an HAnimJoint alias for
> 'l_talocrural', recommend updating
> model[/X3D/Scene/Group[1]/HAnimHumanoid/HAnimJoint[1]/HAnimJoint[1]/HAnimJoint[1]/HAnimJoint/HAnimJoint,
> warning]
> <HAnimJoint DEF='Joe_l_subtalar' name='l_subtalar'/> is not a recognized
> name for HAnimJoint in
> HAnim2[/X3D/Scene/Group[1]/HAnimHumanoid/HAnimJoint[1]/HAnimJoint[1]/HAnimJoint[1]/HAnimJoint/HAnimJoint/HAnimJoint,
> warning]
> <HAnimJoint DEF='Joe_l_subtalar' name='l_subtalar'/> is an HAnimJoint
> alias for 'l_tarsometatarsal_2', recommend updating
> model[/X3D/Scene/Group[1]/HAnimHumanoid/HAnimJoint[1]/HAnimJoint[1]/HAnimJoint[1]/HAnimJoint/HAnimJoint/HAnimJoint,
> warning]
> <HAnimJoint DEF='Joe_l_midtarsal' name='l_midtarsal'/> is not a recognized
> name for HAnimJoint in
> HAnim2[/X3D/Scene/Group[1]/HAnimHumanoid/HAnimJoint[1]/HAnimJoint[1]/HAnimJoint[1]/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint,
> warning]
> <HAnimJoint DEF='Joe_l_midtarsal' name='l_midtarsal'/> is an HAnimJoint
> alias for 'l_metatarsophalangeal_2', recommend updating
> model[/X3D/Scene/Group[1]/HAnimHumanoid/HAnimJoint[1]/HAnimJoint[1]/HAnimJoint[1]/HAnimJoint/HAnimJoint/HAnimJoint/HAnimJoint,
> warning]
> [...]
>
> note that we can likely clean up names when transitioning models from
> HAnim1 to HAnim2.  Will continue working at deliberate pace with Joe on
> these improvements, it is better to produce rules and correction heuristics
> as we go, rather than simply "fixing" an apparent error that simply
> reemerges when the next model comes along.
>
> next check X3dTidy...
> C:\x3d-code\www.web3d.org\x3d\content\examples\HumanoidAnimation/Characters//JoeKick.x3d
> processing with X3dTidy.xslt stylesheet for tidied-up .x3d
>
> =============================================================================
> HAnimHumanoid skeleton holds HAnimJoint : HAnimSegment pairs, names
> follow...
>
> =============================================================================
> Human
>    humanoid_root : sacrum
>    | sacroiliac
>    | | l_hip
>    | | | l_knee
>    | | |   l_ankle
>    | | |     l_subtalar
>    | | |       l_midtarsal
>    | | |         l_metatarsal
>    | | r_hip
>    | |   r_knee
>    | |     r_ankle
>    | |       r_subtalar
>    | |         r_midtarsal
>    | |           r_metatarsal
>    | vl5
>    |   vl4
>    |     vl3
>    |       vl2
>    |         vl1
>    |           vt12
>    |             vt11
>    |               vt10
>    |                 vt9
>    |                   vt8
>    |                     vt7
>    |                       vt6
>    |                         vt5
>    |                           vt4
>    |                             vt3
>    |                               vt2
>    |                                 vt1
>    |                                   vc7
>    |                                     vc6
>    |                                     | vc5
>    |                                     |   vc4
>    |                                     |     vc3
>    |                                     |       vc2
>    |                                     |         vc1
>    |                                     |           skullbase
>    |                                     |             l_eyelid_joint
>    |                                     |             l_eyeball_joint
>    |                                     |             l_eyebrow_joint
>    |                                     |             r_eyelid_joint
>    |                                     |             r_eyeball_joint
>    |                                     |             r_eyebrow_joint
>    |                                     |             temporomandibular
>    |                                     l_sternoclavicular
>    |                                     | l_acromioclavicular
>    |                                     |   l_shoulder
>    |                                     |     l_elbow
>    |                                     |       l_wrist
>    |                                     |         l_thumb1
>    |                                     |         | l_thumb2
>    |                                     |         |   l_thumb3
>    |                                     |         l_index0
>    |                                     |         | l_index1
>    |                                     |         |   l_index2
>    |                                     |         |     l_index3
>    |                                     |         l_middle0
>    |                                     |         | l_middle1
>    |                                     |         |   l_middle2
>    |                                     |         |     l_middle3
>    |                                     |         l_ring0
>    |                                     |         | l_ring1
>    |                                     |         |   l_ring2
>    |                                     |         |     l_ring3
>    |                                     |         l_pinky0
>    |                                     |           l_pinky1
>    |                                     |             l_pinky2
>    |                                     |               l_pinky3
>    |                                     r_sternoclavicular
>    |                                       r_acromioclavicular
>    |                                         r_shoulder
>    |                                           r_elbow
>    |                                             r_wrist
>    |                                               r_thumb1
>    |                                               | r_thumb2
>    |                                               |   r_thumb3
>    |                                               r_index0
>    |                                               | r_index1
>    |                                               |   r_index2
>    |                                               |     r_index3
>    |                                               r_middle0
>    |                                               | r_middle1
>    |                                               |   r_middle2
>    |                                               |     r_middle3
>    |                                               r_ring0
>    |                                               | r_ring1
>    |                                               |   r_ring2
>    |                                               |     r_ring3
>    |                                               r_pinky0
>    |                                                 r_pinky1
>    |                                                   r_pinky2
>    |                                                     r_pinky3
>
> ----
>
> d. Future diagnostics need to be designed for assessing Level of
> Articulation (LOA) 1, 2, 3, 4 for HAnim2 models.
>
> ----
>
> 4. *Feature request and implementation planning*
>
> X3DOM seems to be handling X3D version='4.0' HAnimHumanoid version='2.0'
> and <component level='1' name='HAnim'/> satisfactorily.
>
> Hoping other X3D players can support these capabilities.
>
> The examples provided in [1] are now mature enough that testing on most
> HAnim1/HAnim2 capabilities can proceed.
>
> We still have more work to do regarding HAnimMotion, including potential
> refactoring into multiple nodes for better support of DEF/USE as proposed
> by Doug Sanden.
>
> Implementers are encouraged to check scene validation, warnings and
> regression-test build logs when questionable results occur.
>
> ----
>
> All feedback welcome, we are now "ready to receive" and continuing steady
> progress.
>
> Have fun with X3D4 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
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://web3d.org/pipermail/x3d-public_web3d.org/attachments/20200705/6374bb3f/attachment-0001.html>


More information about the x3d-public mailing list