<div dir="ltr"><div dir="ltr"><div id="gmail-:hi" class="gmail-Am gmail-aiL gmail-aO9 gmail-Al editable gmail-LW-avf gmail-tS-tW gmail-tS-tY" aria-label="Message Body" role="textbox" aria-multiline="true" tabindex="1" style="direction:ltr;min-height:85px" aria-controls=":jt" aria-expanded="false">I am also well aware that the HAnimSegments are not showing up in the right location. Since they have no transform data, they are showing up at 0,0,0 (the default transform). But that's not what Blender says their location is, so weird.</div><div id="gmail-:hi" class="gmail-Am gmail-aiL gmail-aO9 gmail-Al editable gmail-LW-avf gmail-tS-tW gmail-tS-tY" aria-label="Message Body" role="textbox" aria-multiline="true" tabindex="1" style="direction:ltr;min-height:85px" aria-controls=":jt" aria-expanded="false">I will look at current Jin 20e. I don't expect to see anything different than 20 c.<br></div><div id="gmail-:hi" class="gmail-Am gmail-aiL gmail-aO9 gmail-Al editable gmail-LW-avf gmail-tS-tW gmail-tS-tY" aria-label="Message Body" role="textbox" aria-multiline="true" tabindex="1" style="min-height:85px" aria-controls=":jt" aria-expanded="false">John</div></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sat, Jul 6, 2024 at 2:50 PM Joe D Williams <<a href="mailto:joedwil@earthlink.net">joedwil@earthlink.net</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div style="color:rgb(0,0,0);font-family:arial,sans-serif;font-size:12pt"><p style="margin:0.1rem 0px;line-height:1">Hi John and All, </p>
<p style="margin:0.1rem 0px;line-height:1">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 0px;line-height:1">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 0px;line-height:1"> </p>
<p style="margin:0.1rem 0px;line-height:1">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 0px;line-height:1">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 0px;line-height:1">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 0px;line-height:1">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 0px;line-height:1">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 0px;line-height:1"> </p>
<p style="margin:0.1rem 0px;line-height:1">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 0px;line-height:1"> </p>
<p style="margin:0.1rem 0px;line-height:1">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 0px;line-height:1">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 0px;line-height:1"> </p>
<p style="margin:0.1rem 0px;line-height:1">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 0px;line-height:1"> </p>
<p style="margin:0.1rem 0px;line-height:1">All Best,</p>
<p style="margin:0.1rem 0px;line-height:1">Joe</p>
<p style="margin:0.1rem 0px;line-height:1"> </p>
<p style="margin:0.1rem 0px;line-height:1"> </p>
<p style="margin:0.1rem 0px;line-height:1"> </p>
<p style="margin:0.1rem 0px;line-height:1"> </p>
</div>
<div style="border-left:1px solid rgb(170,170,170);box-sizing:border-box;padding:10px 0px 10px 15px;margin:0px">
<p>-----Original Message-----<br>From: John Carlson <<a href="mailto:yottzumm@gmail.com" target="_blank">yottzumm@gmail.com</a>><br>Sent: Jul 6, 2024 8:39 AM<br>To: X3D Ecosystem public discussion <<a href="mailto:x3d-ecosystem@web3d.org" target="_blank">x3d-ecosystem@web3d.org</a>>, Katy Schildmeyer KS APPAREL DESIGN <<a href="mailto:katy@ksappareldesign.com" target="_blank">katy@ksappareldesign.com</a>>, Carol McDonald <<a href="mailto:cemd2@comcast.net" target="_blank">cemd2@comcast.net</a>>, Joe D Williams <<a href="mailto:joedwil@earthlink.net" target="_blank">joedwil@earthlink.net</a>><br>Subject: Attachment to Blender armature/bones</p>
<p style="margin:0.1rem 0px;line-height:1"> </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" target="_blank">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> </div>
<div> </div>
<div>
<div style="color:rgb(0,0,0);white-space:normal;font-family:"Times New Roman";font-size:medium"><a href="https://github.com/coderextreme/X3DJSONLD/blob/master/blend/localtest/Humanoid4.x3d" rel="noopener" target="_blank">X3DJSONLD/blend/localtest/Humanoid4.x3d at master · coderextreme/X3DJSONLD (github.com)</a></div>
<p style="color:rgb(0,0,0);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:rgb(0,0,0);white-space:normal;font-family:"Times New Roman";font-size:medium;margin:0.1rem 0px;line-height:1"> </p>
<p style="color:rgb(0,0,0);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:rgb(0,0,0);white-space:normal;font-family:"Times New Roman";font-size:medium;margin:0.1rem 0px;line-height:1"> </p>
<p style="color:rgb(0,0,0);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:rgb(0,0,0);white-space:normal;font-family:"Times New Roman";font-size:medium;margin:0.1rem 0px;line-height:1"> </p>
<p style="color:rgb(0,0,0);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:rgb(0,0,0);white-space:normal;font-family:"Times New Roman";font-size:medium;margin:0.1rem 0px;line-height:1"> </p>
<p style="color:rgb(0,0,0);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:rgb(0,0,0);white-space:normal;font-family:"Times New Roman";font-size:medium;margin:0.1rem 0px;line-height:1"> </p>
<p style="color:rgb(0,0,0);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:rgb(0,0,0);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:rgb(0,0,0);white-space:normal;font-family:"Times New Roman";font-size:medium;margin:0.1rem 0px;line-height:1"> </p>
<p style="color:rgb(0,0,0);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:rgb(0,0,0);white-space:normal;font-family:"Times New Roman";font-size:medium;margin:0.1rem 0px;line-height:1">Joe</p>
<p style="color:rgb(0,0,0);white-space:normal;font-family:"Times New Roman";font-size:medium;margin:0.1rem 0px;line-height:1"> </p>
<p style="color:rgb(0,0,0);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 0px;line-height:1"> </p></blockquote></div>