[x3d-public] Fw: RE: HAnimHumanoid Question

joedwil at earthlink.net joedwil at earthlink.net
Fri Jan 31 18:39:45 PST 2025


-----Forwarded Message-----
From: <joedwil at earthlink.net>
Sent: Jan 31, 2025 6:38 PM
To: Bergstrom Aaron <aaron.bergstrom at und.edu>, John Carlson <yottzumm at gmail.com>, Don Brutzman <brutzman at nps.edu>
Subject: RE: HAnimHumanoid Question

> Or am I not understanding the relationship between the “joints” field and the “skeleton” field? 

The Humanoid skeleton field is the container field for the Joint hierarchy that describes the skeleton. Like skin is container for certain geometry. 
Note in the Classic encoding the skeleton keyword shows as the container for the entire Joint, Segment,,and Site structure,
Only the first Joint has containerField=skeleton, the rest are children. .
The skeleton Joints also contain binding and weight information if a skin is used. 

The joints and segments and sites fields (lowercase plural) are containers for a list of those skeleton parts.
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.  
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.
Anyway, from me, the fields should not contain the USE to reference the DEF, but just simply list the "name" fields of the node.
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.

Other Inputs:
:
Notes for X3D HAnim
https://portal.metaverse-standards.org/wiki/21/joe-d-williams
  
Humanoid Animation Concept,
https://portal.metaverse-standards.org/wiki/21/joe-williams 

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. 

pseudo Code:
   
Scene  Humanoid    skeleton     Joint name='humanoid_root' center='0 0.8 -0.01'     Segment DEF='hanim_sacrum' name='sacrum'>     Shape name='sacrumShape'     Site name='sacrumSites'    /Segment    Joint      (entire skeleton Joint, Segment, Site hierarchy      including geometry, viewpoints, and sensors)    /Joint   /Joint  /skeleton   skin Shape name='indexedMesh'   Group name='Sensing and Animation Processes' /Humanoid Other Scene Environment Stuff/Scene

Thanks and Best Fun with HAnim,
Joe



-----Original Message-----
From: Bergstrom, Aaron <aaron.bergstrom at und.edu>
Sent: Jan 31, 2025 2:32 PM
To: John Carlson <yottzumm at gmail.com>, Don Brutzman <brutzman at nps.edu>, Joe D Williams <joedwil at earthlink.net>
Subject: RE: HAnimHumanoid Question

John,

Thanks for the response.

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.

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.

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.

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.

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?

If I did that, it would probably helpful to get some guidance from you.

Aaron

From: John Carlson <yottzumm at gmail.com> 
Sent: Friday, January 31, 2025 4:11 PM
To: Bergstrom, Aaron <aaron.bergstrom at und.edu>; Don Brutzman <brutzman at nps.edu>; Joe D Williams <joedwil at earthlink.net>
Subject: Re: HAnimHumanoid Question


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.


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.



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



I can probably give advice on how to change the sorting order if you want to manage your own x3d.py.



John



On Fri, Jan 31, 2025 at 3:13 PM Bergstrom, Aaron <aaron.bergstrom at und.edu (mailto:aaron.bergstrom at und.edu)> wrote:

John,

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.

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.

>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.

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?

As in:
[assumes that x3d.py’s X3D.XML() method writes the ‘joints’ field before the ‘skeleton’ field]

joints
        | - DEF rootname
        |    |-children
        |                   |- DEF nextJointName
        |                                 |-children
        |                                               |- DEF nextNextJointName
        |- USE nextJointName
        |- USE nextNextJointName

skeleton
        | - USE rootname

Or am I not understanding the relationship between the “joints” field and the “skeleton” field?

Maybe, depending on the situation, you only need to put joint nodes in one of these two fields?

I’d appreciate any advice you can give me on this.

Thanks,

Aaron










-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://web3d.org/pipermail/x3d-public_web3d.org/attachments/20250201/d6f34b70/attachment-0001.html>


More information about the x3d-public mailing list