<div style="color:rgb(0,0,0);font-family:Arial;font-size:12pt"><p style="margin: 0.1rem 0; line-height: 1.0;"> </p>
</div>
<div class="elnk-inline-message-container" style="border-left: 1px solid #aaa; box-sizing: border-box; padding: 10px 0 10px 15px; margin: 0;">
<p>-----Forwarded Message-----<br>From: <joedwil@earthlink.net><br>Sent: Jan 31, 2025 6:38 PM<br>To: Bergstrom Aaron <aaron.bergstrom@und.edu>, John Carlson <yottzumm@gmail.com>, Don Brutzman <brutzman@nps.edu><br>Subject: RE: HAnimHumanoid Question</p>
<p style="margin: 0.1rem 0; line-height: 1.0;"> </p>
<div style="color: #000000; font-family: Arial; font-size: 12pt;">
<p style="margin: 0.1rem 0; line-height: 1.0;">> <span style="color: #000000; font-family: 'Times New Roman'; font-size: medium; white-space: normal; float: none; display: inline;">Or am I not understanding the relationship between the “joints” field and the “skeleton” field?</span> </p>
<p style="margin: 0.1rem 0; line-height: 1.0;">  </p>
<p style="margin: 0.1rem 0; line-height: 1.0;">The Humanoid skeleton field is the container field for the Joint hierarchy that describes the skeleton. Like skin is container for certain geometry. </p>
<p style="margin: 0.1rem 0; line-height: 1.0;">Note in the Classic encoding the skeleton keyword shows as the container for the entire Joint, Segment,,and Site structure,</p>
<p style="margin: 0.1rem 0; line-height: 1.0;">Only the first Joint has containerField=skeleton, the rest are children. .</p>
<p style="margin: 0.1rem 0; line-height: 1.0;">The skeleton Joints also contain binding and weight information if a skin is used. </p>
<p style="margin: 0.1rem 0; line-height: 1.0;">  </p>
<p style="margin: 0.1rem 0; line-height: 1.0;">The joints and segments and sites fields (lowercase plural) are containers for a list of those skeleton parts.</p>
<p style="margin: 0.1rem 0; line-height: 1.0;">These fields are, to me mostly archaic and confusing, a holdover from when the actual skeleton was not exposed to the user so here were the lists of stuffs handed to the Grand Pubah to apply to the sealed simulation skeleton hidden behind the curtain.  </p>
<p style="margin: 0.1rem 0; line-height: 1.0;">A browser could use the lists to configure something, like, if not in list don't process animation or responses for that transform, but default should be if no joints segments sites fields the entire hierarchy is in play.</p>
<p style="margin: 0.1rem 0; line-height: 1.0;">Anyway, from me, the fields should not contain the USE to reference the DEF, but just simply list the "name" fields of the node.</p>
<p style="margin: 0.1rem 0; line-height: 1.0;">The HAnim naming convention is defined so that user can easily find the pertinent DEF to run anims.from the name. That would be enough and much less confusing.</p>
<p style="margin: 0.1rem 0; line-height: 1.0;">  </p>
<p style="margin: 0.1rem 0; line-height: 1.0;">Other Inputs:</p>
<p style="margin: 0.1rem 0; line-height: 1.0;">:</p>
<p style="margin: 0.1rem 0; line-height: 1.0;">Notes for X3D HAnim<br><a href="https://portal.metaverse-standards.org/wiki/21/joe-d-williams">https://portal.metaverse-standards.org/wiki/21/joe-d-williams</a><br>  <br>Humanoid Animation Concept,<br><a href="https://portal.metaverse-standards.org/wiki/21/joe-williams">https://portal.metaverse-standards.org/wiki/21/joe-williams</a> </p>
<p style="margin: 0.1rem 0; line-height: 1.0;">  </p>
<p style="margin: 0.1rem 0; line-height: 1.0;">The concept of what is a Humanoid character/Avatar/whatever, ranging from the realistic Digital Twin to an autonomous IOT metafragment metaroaming the meteaversality is  much under discussion, but this is basic info at this point.. You will see some character animation tools use the Bone as the user interface to the Armature, but for taking control of animation of the skeleton we quickly find we wish to deal directly with the Joint. </p>
<p style="margin: 0.1rem 0; line-height: 1.0;"> </p>
<p style="margin: 0.1rem 0; line-height: 1.0;">pseudo Code:</p>
<p style="margin: 0.1rem 0; line-height: 1.0;">   </p>
<p style="margin: 0.1rem 0; line-height: 1.0;"><span style="color: #555555; font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif; font-size: 12px; white-space: normal; background-color: #ffffff; float: none; display: inline;">Scene </span><br style="color: #555555; font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif; font-size: 12px; white-space: normal; background-color: #ffffff;"><span style="color: #555555; font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif; font-size: 12px; white-space: normal; background-color: #ffffff; float: none; display: inline;"> Humanoid  </span><br style="color: #555555; font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif; font-size: 12px; white-space: normal; background-color: #ffffff;"><span style="color: #555555; font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif; font-size: 12px; white-space: normal; background-color: #ffffff; float: none; display: inline;">  skeleton  </span><br style="color: #555555; font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif; font-size: 12px; white-space: normal; background-color: #ffffff;"><span style="color: #555555; font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif; font-size: 12px; white-space: normal; background-color: #ffffff; float: none; display: inline;">   Joint name='humanoid_root' center='0 0.8 -0.01' </span><br style="color: #555555; font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif; font-size: 12px; white-space: normal; background-color: #ffffff;"><span style="color: #555555; font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif; font-size: 12px; white-space: normal; background-color: #ffffff; float: none; display: inline;">    Segment DEF='hanim_sacrum' name='sacrum'></span><br style="color: #555555; font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif; font-size: 12px; white-space: normal; background-color: #ffffff;"><span style="color: #555555; font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif; font-size: 12px; white-space: normal; background-color: #ffffff; float: none; display: inline;">     Shape name='sacrumShape'</span><br style="color: #555555; font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif; font-size: 12px; white-space: normal; background-color: #ffffff;"><span style="color: #555555; font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif; font-size: 12px; white-space: normal; background-color: #ffffff; float: none; display: inline;">     Site name='sacrumSites'</span><br style="color: #555555; font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif; font-size: 12px; white-space: normal; background-color: #ffffff;"><span style="color: #555555; font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif; font-size: 12px; white-space: normal; background-color: #ffffff; float: none; display: inline;">    /Segment</span><br style="color: #555555; font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif; font-size: 12px; white-space: normal; background-color: #ffffff;"><span style="color: #555555; font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif; font-size: 12px; white-space: normal; background-color: #ffffff; float: none; display: inline;">    Joint </span><br style="color: #555555; font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif; font-size: 12px; white-space: normal; background-color: #ffffff;"><span style="color: #555555; font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif; font-size: 12px; white-space: normal; background-color: #ffffff; float: none; display: inline;">     (entire skeleton Joint, Segment, Site hierarchy</span><br style="color: #555555; font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif; font-size: 12px; white-space: normal; background-color: #ffffff;"><span style="color: #555555; font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif; font-size: 12px; white-space: normal; background-color: #ffffff; float: none; display: inline;">      including geometry, viewpoints, and sensors)</span><br style="color: #555555; font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif; font-size: 12px; white-space: normal; background-color: #ffffff;"><span style="color: #555555; font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif; font-size: 12px; white-space: normal; background-color: #ffffff; float: none; display: inline;">    /Joint</span><br style="color: #555555; font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif; font-size: 12px; white-space: normal; background-color: #ffffff;"><span style="color: #555555; font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif; font-size: 12px; white-space: normal; background-color: #ffffff; float: none; display: inline;">   /Joint</span><br style="color: #555555; font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif; font-size: 12px; white-space: normal; background-color: #ffffff;"><span style="color: #555555; font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif; font-size: 12px; white-space: normal; background-color: #ffffff; float: none; display: inline;">  /skeleton </span><br style="color: #555555; font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif; font-size: 12px; white-space: normal; background-color: #ffffff;"><span style="color: #555555; font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif; font-size: 12px; white-space: normal; background-color: #ffffff; float: none; display: inline;">  skin Shape name='indexedMesh' </span><br style="color: #555555; font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif; font-size: 12px; white-space: normal; background-color: #ffffff;"><span style="color: #555555; font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif; font-size: 12px; white-space: normal; background-color: #ffffff; float: none; display: inline;">  Group name='Sensing and Animation Processes'</span><br style="color: #555555; font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif; font-size: 12px; white-space: normal; background-color: #ffffff;"><span style="color: #555555; font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif; font-size: 12px; white-space: normal; background-color: #ffffff; float: none; display: inline;"> /Humanoid</span><br style="color: #555555; font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif; font-size: 12px; white-space: normal; background-color: #ffffff;"><span style="color: #555555; font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif; font-size: 12px; white-space: normal; background-color: #ffffff; float: none; display: inline;"> Other Scene Environment Stuff</span><br style="color: #555555; font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif; font-size: 12px; white-space: normal; background-color: #ffffff;"><span style="color: #555555; font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif; font-size: 12px; white-space: normal; background-color: #ffffff; float: none; display: inline;">/Scene</span></p>
<p style="margin: 0.1rem 0; line-height: 1.0;">  </p>
<p style="margin: 0.1rem 0; line-height: 1.0;">Thanks and Best Fun with HAnim,</p>
<p style="margin: 0.1rem 0; line-height: 1.0;">Joe</p>
<p style="margin: 0.1rem 0; line-height: 1.0;"> </p>
<p style="margin: 0.1rem 0; line-height: 1.0;">  </p>
</div>
<div class="elnk-inline-message-container" style="border-left: 1px solid #aaa; box-sizing: border-box; padding: 10px 0 10px 15px; margin: 0;">
<p>-----Original Message-----<br>From: Bergstrom, Aaron <aaron.bergstrom@und.edu><br>Sent: Jan 31, 2025 2:32 PM<br>To: John Carlson <yottzumm@gmail.com>, Don Brutzman <brutzman@nps.edu>, Joe D Williams <joedwil@earthlink.net><br>Subject: RE: HAnimHumanoid Question</p>
<p style="margin: 0.1rem 0; line-height: 1.0;"> </p>
<!-- [if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!-- [if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
<div class="WordSection1">
<p class="MsoNormal">John,</p>
<p class="MsoNormal"> </p>
<p class="MsoNormal">Thanks for the response.</p>
<p class="MsoNormal"> </p>
<p class="MsoNormal">I’ll be honest… I’m not exactly up to speed on x3d.py… so I’m not entirely sure I’m doing it right.</p>
<p class="MsoNormal"> </p>
<p class="MsoNormal">Plus, I haven’t actually exported any HAnim it yet in this iteration of the plugin… but it just occurred to me last night as I was lying in bed that they would get exported that way since the DEF has to come before the USE.</p>
<p class="MsoNormal"> </p>
<p class="MsoNormal">In the end, I guess it doesn’t really matter for technical reasons as long as the DEF comes before the USE… it’s just looks weird to anyone looking through the actual text of the file.</p>
<p class="MsoNormal"> </p>
<p class="MsoNormal">I find the x3d.py documentation somewhat confusing. A lot of times, I just open it in a text reader and read/search through it until I think I understand what it’s doing.</p>
<p class="MsoNormal"> </p>
<p class="MsoNormal">Oof… managing my own x3d.py… ?? maybe… I suppose if I could sort the fields in a way that best suits maya, it might be worthwhile…. Are there instructions on how to do that somewhere?</p>
<p class="MsoNormal"> </p>
<p class="MsoNormal">If I did that, it would probably helpful to get some guidance from you.</p>
<p class="MsoNormal"> </p>
<p class="MsoNormal">Aaron</p>
<p class="MsoNormal"> </p>
<div style="border: none; border-top: solid #E1E1E1 1.0pt; padding: 3.0pt 0in 0in 0in;">
<p class="MsoNormal"><strong>From:</strong> John Carlson <yottzumm@gmail.com> <br><strong>Sent:</strong> Friday, January 31, 2025 4:11 PM<br><strong>To:</strong> Bergstrom, Aaron <aaron.bergstrom@und.edu>; Don Brutzman <brutzman@nps.edu>; Joe D Williams <joedwil@earthlink.net><br><strong>Subject:</strong> Re: HAnimHumanoid Question</p>
</div>
<p class="MsoNormal"> </p>
<div>
<div>
<p class="MsoNormal">Thanks for finding this issue, Aaron.  I also found this issue and reported it.  Ultimately, I created my own x3dv package, which avoided this problem.</p>
<div>
<p class="MsoNormal"> </p>
</div>
<div>
<p class="MsoNormal">You can hope that it will get fixed.  I recommend sending your example .x3d file or x3dv file to Don Brutzman, or file a report on wherever the issue tracker for the x3d package is.</p>
</div>
<div>
<p class="MsoNormal"> </p>
</div>
<div>
<p class="MsoNormal">If you need my x3dv.py, I can give it to you.  The key lies in sorting order (xsl:sort?)  of fields in the stylesheet that generates x3d.py</p>
</div>
<div>
<p class="MsoNormal"> </p>
</div>
<div>
<p class="MsoNormal">I can probably give advice on how to change the sorting order if you want to manage your own x3d.py.</p>
</div>
<div>
<p class="MsoNormal"> </p>
</div>
<div>
<p class="MsoNormal">John</p>
</div>
</div>
<p class="MsoNormal"> </p>
<div>
<div>
<p class="MsoNormal">On Fri, Jan 31, 2025 at 3:13 PM Bergstrom, Aaron <<a href="mailto:aaron.bergstrom@und.edu">aaron.bergstrom@und.edu</a>> wrote:</p>
</div>
<blockquote style="border: none; border-left: solid #CCCCCC 1.0pt; padding: 0in 0in 0in 6.0pt; margin-left: 4.8pt; margin-right: 0in;">
<div>
<div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto;">John,</p>
<p class="MsoNormal" style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto;"> </p>
<p class="MsoNormal" style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto;">I’m a bit confused by the HAnim spec, and I was hoping you might be able to answer a question for me, if you don’t mind me asking.</p>
<p class="MsoNormal" style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto;"> </p>
<p class="MsoNormal" style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto;">I’m getting close to writing the code for the HAnim export out of Maya, but I’m a little confused about the difference between the “joints” field and the “skeleton” field of the HAnimHumanoid node.</p>
<p class="MsoNormal" style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto;"> </p>
<p class="MsoNormal" style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto;">From reading the spec, it looks as though the “joints” field is just a list of all the HAnimJoint nodes in that are used by the humanoid node, but they are not in a traversable tree, but rather are just all siblings of each other. Where as the “skeleton” field is to hold the root joint node, and all others are tree children of that root node.</p>
<p class="MsoNormal" style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto;"> </p>
<p class="MsoNormal" style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto;">Which is getting a bit weird in that the “joints” field comes first in the X3D.py implementation before the “skeleton” field. So that if you have to put an HAnimJoint node under both fields by implementing USE/DEF, that would mean that the actual tree would get defined under the “joints” field, and the only joint listed in the “skeleton” field would the “used” root joint right?</p>
<p class="MsoNormal" style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto;"> </p>
<p class="MsoNormal" style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto;">As in:</p>
<p class="MsoNormal" style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto;">[assumes that x3d.py’s X3D.XML() method writes the ‘joints’ field before the ‘skeleton’ field]</p>
<p class="MsoNormal" style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto;"> </p>
<p class="MsoNormal" style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto;">joints</p>
<p class="MsoNormal" style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto;">        | - DEF rootname</p>
<p class="MsoNormal" style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto;">        |    |-children</p>
<p class="MsoNormal" style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto;">        |                   |- DEF nextJointName</p>
<p class="MsoNormal" style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto;">        |                                 |-children</p>
<p class="MsoNormal" style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto;">        |                                               |- DEF nextNextJointName</p>
<p class="MsoNormal" style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto;">        |- USE nextJointName</p>
<p class="MsoNormal" style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto;">        |- USE nextNextJointName</p>
<p class="MsoNormal" style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto;"> </p>
<p class="MsoNormal" style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto;">skeleton</p>
<p class="MsoNormal" style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto;">        | - USE rootname</p>
<p class="MsoNormal" style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto;"> </p>
<p class="MsoNormal" style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto;">Or am I not understanding the relationship between the “joints” field and the “skeleton” field?</p>
<p class="MsoNormal" style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto;"> </p>
<p class="MsoNormal" style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto;">Maybe, depending on the situation, you only need to put joint nodes in one of these two fields?</p>
<p class="MsoNormal" style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto;"> </p>
<p class="MsoNormal" style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto;">I’d appreciate any advice you can give me on this.</p>
<p class="MsoNormal" style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto;"> </p>
<p class="MsoNormal" style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto;">Thanks,</p>
<p class="MsoNormal" style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto;"> </p>
<p class="MsoNormal" style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto;">Aaron</p>
</div>
</div>
</div>
</blockquote>
</div>
</div>
</div>
</div>
<p style="margin: 0.1rem 0; line-height: 1.0;"> </p>
</div>

<p style="margin: 0.1rem 0; line-height: 1.0;"> </p>