<div style="color:rgb(0,0,0);font-family:arial,sans-serif;font-size:12pt"><p style="margin: 0.1rem 0; line-height: 1.0;">Hi  John and All,  </p>
<p style="margin: 0.1rem 0; line-height: 1.0;">Again, that evolution of jinloa4, Humanoid4.x3d has some  fine points. There are steps to make a skin work with a skeleton, see below, please. Follow that process and we can activate any skin using any skeleton. </p>
<p style="margin: 0.1rem 0; line-height: 1.0;">The so-called blender armature is just an elementary archaic preset and has no real value because the gui is also presented in those terms and that is not hanim enough.  </p>
<p style="margin: 0.1rem 0; line-height: 1.0;">   </p>
<p style="margin: 0.1rem 0; line-height: 1.0;">To use blender or any for anything else we want the blender gui presented in hanim terms using the hanim hierarchy so you can stand a chance of hanim skeleton import to blender, do whatever, mostly geometry and example poses, then export to your x3d hanim model to actually play in the virtuality.  </p>
<p style="margin: 0.1rem 0; line-height: 1.0;">When you can get a good hanim skeleton in blender GUI, add geometry using blender, then use the gltf to export back to your original hanim avatar to operate in the x3d scene environment.   </p>
<p style="margin: 0.1rem 0; line-height: 1.0;">For animation, If you are going to use blender to create animations, then it needs to export real axis-angle or unit quaternion interpolators (likely using gltf) to  get it back into x3d and tune for realtime.   </p>
<p style="margin: 0.1rem 0; line-height: 1.0;">Likewise for using blender to help with detailed work connecting skin to skeleton, get the index and weight data blender can suppluy using gltf export to x3d.  </p>
<p style="margin: 0.1rem 0; line-height: 1.0;">Actually, make the desired pose in blender, then export the skeleton state and use that to take control of the motion animations in the x3d tool.</p>
<p style="margin: 0.1rem 0; line-height: 1.0;">   </p>
<p style="margin: 0.1rem 0; line-height: 1.0;">The blender avatar is not structured for the hanim skeleton including joint centers, segment connectors, and site translations. It literally uses one end of the bone to designate a joint center, and only wants to use a shallow hierarchy, and does not know about interactivity or realtime event system.   </p>
<p style="margin: 0.1rem 0; line-height: 1.0;">   </p>
<p style="margin: 0.1rem 0; line-height: 1.0;">For the Humaoid4, again, some nice additions and thanks for getting me to look a the transforms under segment, and assigning a translation to Segment.again.</p>
<p style="margin: 0.1rem 0; line-height: 1.0;">The Segment should be a default transform and each shape should have its own translation (and then the line coordinates work) so thanks, and keep it as you had it:) </p>
<p style="margin: 0.1rem 0; line-height: 1.0;">  </p>
<p style="margin: 0.1rem 0; line-height: 1.0;">Attached is latest loa4 minimum. If we get the blender hierarchy gui looking like this (no skeleton geometry) it is a big advance. </p>
<p style="margin: 0.1rem 0; line-height: 1.0;">  </p>
<p style="margin: 0.1rem 0; line-height: 1.0;">All Best,</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>
<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: John Carlson <yottzumm@gmail.com><br>Sent: Jul 6, 2024 8:39 AM<br>To: X3D Ecosystem public discussion <x3d-ecosystem@web3d.org>, Katy Schildmeyer KS APPAREL DESIGN <katy@ksappareldesign.com>, Carol McDonald <cemd2@comcast.net>, Joe D Williams <joedwil@earthlink.net><br>Subject: Attachment to Blender armature/bones</p>
<p style="margin: 0.1rem 0; line-height: 1.0;"> </p>
<div dir="ltr">
<div dir="ltr">So from this video, it appears that one can attach segments to Blender bones (well, armature in the hierarchy):</div>
<div dir="ltr"> </div>
<div dir="ltr"><a href="https://coderextreme.net/AttachmentToBones.mp4">https://coderextreme.net/AttachmentToBones.mp4</a> (Humanoid4.x3d minus skin weights).</div>
<div dir="ltr"> </div>
<div>I'm not quite sure which is farther ahead at this point, the importer (above) or my sample script, localfinal.py.</div>
<div> </div>
<div>I guess the next step is to attach geometry, sites, groups and transforms to segments.</div>
<div> </div>
<div>Should we follow a non-Blender bone or a Blender bone path?</div>
<div> </div>
<div>It still seems like we need to investigate animation some more as well.</div>
<div> </div>
<div>Hmm!</div>
<div> </div>
<div>John</div>
</div>
</div>

<div class="reply-comment"> </div>
<div class="reply-comment"> </div>
<div class="reply-comment">
<div style="color: #000000; white-space: normal; font-family: 'Times New Roman'; font-size: medium;"><a href="https://github.com/coderextreme/X3DJSONLD/blob/master/blend/localtest/Humanoid4.x3d" target="_blank" rel="noopener">X3DJSONLD/blend/localtest/Humanoid4.x3d at master ยท coderextreme/X3DJSONLD (github.com)</a></div>
<p style="color: #000000; white-space: normal; font-family: 'Times New Roman'; font-size: medium; margin: 0.1rem 0px; line-height: 1;">> This has skin that doesn't move--maybe someone can add skin weights   </p>
<p style="color: #000000; white-space: normal; font-family: 'Times New Roman'; font-size: medium; margin: 0.1rem 0px; line-height: 1;"> </p>
<p style="color: #000000; white-space: normal; font-family: 'Times New Roman'; font-size: medium; margin: 0.1rem 0px; line-height: 1;">The skin is there, but not animated. This skin from a different skeleton. You get to do the final point to joint rigging.  The most simple skin consists of triangles made from the set surface feature points. This skin uses V1 feature points and some added, but does not include all the V2 feature points. So, the skin either needs to  be re-triangulated adding new V2 points, and connected to the skeleton, or, using hints from the V1 skeleton that this skin was last used on, simply assign these points to joints. Please just go ahead and add the new V2 points, then connect it up.    </p>
<p style="color: #000000; white-space: normal; font-family: 'Times New Roman'; font-size: medium; margin: 0.1rem 0px; line-height: 1;">                   </p>
<p style="color: #000000; white-space: normal; font-family: 'Times New Roman'; font-size: medium; margin: 0.1rem 0px; line-height: 1;">The x3d way of documenting this step in the"rigging" process is using the Joint node. The fields are skinCoordIndex and skinCoordWeight where the skinCoordIndex is a list of numbers in order of appearance in the Coord point list of x y z coordinates of the skin geometry and the skinCoordWeight is the 0 to 1 scaling value that is to be applied to the corresponding index. More than 1 Joint may produce a motion to the point, so the index can appear multiple times, and if multiple, the weights defined for that index should total to be max 1. </p>
<p style="color: #000000; white-space: normal; font-family: 'Times New Roman'; font-size: medium; margin: 0.1rem 0px; line-height: 1;">  </p>
<p style="color: #000000; white-space: normal; font-family: 'Times New Roman'; font-size: medium; margin: 0.1rem 0px; line-height: 1;">For example, for the geometry associated with left arm, assign these indexes to the left shoulder Joint with all weights=1. A roll action of the shoulder joint, 0 0 -1 1, will move those vertices away from the body, ccw to  the viewer. </p>
<p style="color: #000000; white-space: normal; font-family: 'Times New Roman'; font-size: medium; margin: 0.1rem 0px; line-height: 1;">   </p>
<p style="color: #000000; white-space: normal; font-family: 'Times New Roman'; font-size: medium; margin: 0.1rem 0px; line-height: 1;">Most authoring tools will offer a method of defining this point to joint data where a shading graphic allows you to give a general definition of which vertices are controlled by which Joints. This will give a basis for getting the skin to operate the way you wish over a range of postures and motions you design. Whatever the process, the end result is that every point is assigned to at least one Joint. In general, the farthest from the Joint center has a higher weight and nearest has a lower weight. The actual motion of a point depends on the actual joint rotation and the radial distance of the point from the Joint center. If multiple joints, then the result is accumulated. Achieving hifi results means careful attention to the relationship of the Joint center locations with respect to the animated mesh points.  </p>
<p style="color: #000000; white-space: normal; font-family: 'Times New Roman'; font-size: medium; margin: 0.1rem 0px; line-height: 1;"> </p>
<p style="color: #000000; white-space: normal; font-family: 'Times New Roman'; font-size: medium; margin: 0.1rem 0px; line-height: 1;">Next note that the user code form for x3d joint to point bindings is to list the index and weight in fields of the Joint node. For the closest to the metal form this data for each frame is stored where each vertex data point includes a list of values applied by each joint to be applied to that point for that frame to accomplish the motion. For this reason and others, the non-x3d authoring system may store the data in many forms, most never intended to be actually exposed and editable by the author.  </p>
<p style="color: #000000; white-space: normal; font-family: 'Times New Roman'; font-size: medium; margin: 0.1rem 0px; line-height: 1;">However, under the covers there is always a list of these connections in some form. If you work with a reasonable number of points for your skin, distributed effectively, then some fine tuning can be done with a simple text editor and x3d player. </p>
<p style="color: #000000; white-space: normal; font-family: 'Times New Roman'; font-size: medium; margin: 0.1rem 0px; line-height: 1;">   </p>
<p style="color: #000000; white-space: normal; font-family: 'Times New Roman'; font-size: medium; margin: 0.1rem 0px; line-height: 1;">Thanks and Best, </p>
<p style="color: #000000; white-space: normal; font-family: 'Times New Roman'; font-size: medium; margin: 0.1rem 0px; line-height: 1;">Joe</p>
<p style="color: #000000; white-space: normal; font-family: 'Times New Roman'; font-size: medium; margin: 0.1rem 0px; line-height: 1;">  </p>
<p style="color: #000000; white-space: normal; font-family: 'Times New Roman'; font-size: medium; margin: 0.1rem 0px; line-height: 1;"> </p>
</div>
<p style="margin: 0.1rem 0; line-height: 1.0;"> </p>