<div dir="auto">Looking through the glTF spec. github issues is also insightful. For example, I learned that it is not possible to share a skeleton with multiple skinned meshes. Also the weights are expected to sum to 1 for each vertex. Overall the glTF skinning seems less capable, and there is some amount of confusion.<div dir="auto"><br></div><div dir="auto">Andreas</div></div><br><div class="gmail_quote"><div dir="ltr">On Tue, Jul 17, 2018, 8:09 PM John Carlson <<a href="mailto:yottzumm@gmail.com">yottzumm@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div lang="EN-US" link="blue" vlink="#954F72"><div class="m_1187024749986757779WordSection1"><p class="MsoNormal">Wow, I wish I could read specifications better!</p><p class="MsoNormal"><u></u> <u></u></p><p class="MsoNormal">Thanks for an email introduction!</p><p class="MsoNormal"><u></u> <u></u></p><p class="MsoNormal">John</p><p class="MsoNormal"><u></u> <u></u></p><p class="MsoNormal">Sent from <a href="https://go.microsoft.com/fwlink/?LinkId=550986" target="_blank" rel="noreferrer">Mail</a> for Windows 10</p><p class="MsoNormal"><u></u> <u></u></p><div style="border:none;border-top:solid #e1e1e1 1.0pt;padding:3.0pt 0in 0in 0in"><p class="MsoNormal" style="border:none;padding:0in"><b>From: </b><a href="mailto:andreasplesch@gmail.com" target="_blank" rel="noreferrer">Andreas Plesch</a><br><b>Sent: </b>Tuesday, July 17, 2018 8:01 PM<br><b>To: </b><a href="mailto:yottzumm@gmail.com" target="_blank" rel="noreferrer">John Carlson</a><br><b>Cc: </b><a href="mailto:x3d-public@web3d.org" target="_blank" rel="noreferrer">X3D Graphics public mailing list</a><br><b>Subject: </b>Re: [x3d-public] HAnim Displacer examples</p></div><p class="MsoNormal"><u></u> <u></u></p><p class="MsoNormal">I found this tutorial the best introduction into how skinning is</p><p class="MsoNormal">performed with glTF:</p><p class="MsoNormal"><u></u> <u></u></p><p class="MsoNormal"><a href="https://github.com/KhronosGroup/glTF-Tutorials/blob/master/gltfTutorial/gltfTutorial_019_SimpleSkin.md" target="_blank" rel="noreferrer">https://github.com/KhronosGroup/glTF-Tutorials/blob/master/gltfTutorial/gltfTutorial_019_SimpleSkin.md</a></p><p class="MsoNormal"><u></u> <u></u></p><p class="MsoNormal">The spec. itself is short on detail:</p><p class="MsoNormal"><u></u> <u></u></p><p class="MsoNormal"><a href="https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#skins" target="_blank" rel="noreferrer">https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#skins</a></p><p class="MsoNormal"><u></u> <u></u></p><p class="MsoNormal">The principles at work in both HAnim and glTF are very similar:</p><p class="MsoNormal">joints, weights, transforming from and to joint space, taking into</p><p class="MsoNormal">account the root trafo.</p><p class="MsoNormal"><u></u> <u></u></p><p class="MsoNormal">There are some important differences. Apparently, the weights in glTF</p><p class="MsoNormal">are direct factors for the joint matrices, and not applied to the</p><p class="MsoNormal">transformed vertex positions like in HAnim. That is how the tutorial</p><p class="MsoNormal">explains it although let's check Three.js implementation to be sure.</p><p class="MsoNormal">The inverse bind matrix needs to be precomputed and provided (although</p><p class="MsoNormal">I think it could be derived from the joint local coordinate system).</p><p class="MsoNormal">The mapping of vertices to be deformed to weighted joints is</p><p class="MsoNormal">different. In glTF each vertex of a skinned mesh is mapped, perhaps</p><p class="MsoNormal">most with 0 weights. In HAnim the joint defines the vertices it</p><p class="MsoNormal">influences.</p><p class="MsoNormal"><u></u> <u></u></p><p class="MsoNormal">I think the shader idea in glTF can be perhaps applied to HAnim: Per</p><p class="MsoNormal">vertex two additional vec4 attributes which are four indices into a</p><p class="MsoNormal">joint matrix array and four weights (as floats).</p><p class="MsoNormal"><u></u> <u></u></p><p class="MsoNormal">-Andreas</p><p class="MsoNormal"><u></u> <u></u></p><p class="MsoNormal"><u></u> <u></u></p><p class="MsoNormal"><u></u> <u></u></p><p class="MsoNormal">On Tue, Jul 17, 2018 at 4:52 PM John Carlson <<a href="mailto:yottzumm@gmail.com" target="_blank" rel="noreferrer">yottzumm@gmail.com</a>> wrote:</p><p class="MsoNormal">><u></u> <u></u></p><p class="MsoNormal">><u></u> <u></u></p><p class="MsoNormal">><u></u> <u></u></p><p class="MsoNormal">><u></u> <u></u></p><p class="MsoNormal">><u></u> <u></u></p><p class="MsoNormal">> GPU assisted HAnim would be best coordinated with glTF skinned</p><p class="MsoNormal">><u></u> <u></u></p><p class="MsoNormal">> deformation support in x3dom. This may require first thinking about</p><p class="MsoNormal">><u></u> <u></u></p><p class="MsoNormal">> how both compare in some detail.</p><p class="MsoNormal">><u></u> <u></u></p><p class="MsoNormal">><u></u> <u></u></p><p class="MsoNormal">><u></u> <u></u></p><p class="MsoNormal">> -Andreas</p><p class="MsoNormal">><u></u> <u></u></p><p class="MsoNormal">><u></u> <u></u></p><p class="MsoNormal">><u></u> <u></u></p><p class="MsoNormal">><u></u> <u></u></p><p class="MsoNormal">><u></u> <u></u></p><p class="MsoNormal">> Do we have some good glTF examples?</p><p class="MsoNormal">><u></u> <u></u></p><p class="MsoNormal">><u></u> <u></u></p><p class="MsoNormal">><u></u> <u></u></p><p class="MsoNormal">> Thanks,</p><p class="MsoNormal">><u></u> <u></u></p><p class="MsoNormal">><u></u> <u></u></p><p class="MsoNormal">><u></u> <u></u></p><p class="MsoNormal">> John</p><p class="MsoNormal"><u></u> <u></u></p><p class="MsoNormal"><u></u> <u></u></p><p class="MsoNormal"><u></u> <u></u></p><p class="MsoNormal">-- </p><p class="MsoNormal">Andreas Plesch</p><p class="MsoNormal">Waltham, MA 02453</p><p class="MsoNormal"><u></u> <u></u></p></div></div></blockquote></div>