<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=utf-8"><meta name=Generator content="Microsoft Word 15 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#954F72;
        text-decoration:underline;}
pre
        {mso-style-priority:99;
        mso-style-link:"HTML Preformatted Char";
        margin:0in;
        margin-bottom:.0001pt;
        font-size:10.0pt;
        font-family:"Courier New";
        color:black;}
p.m-1109494319870621309m-9175488166943601978msolistparagraph, li.m-1109494319870621309m-9175488166943601978msolistparagraph, div.m-1109494319870621309m-9175488166943601978msolistparagraph
        {mso-style-name:m_-1109494319870621309m_-9175488166943601978msolistparagraph;
        mso-margin-top-alt:auto;
        margin-right:0in;
        mso-margin-bottom-alt:auto;
        margin-left:0in;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;
        color:black;}
span.HTMLPreformattedChar
        {mso-style-name:"HTML Preformatted Char";
        mso-style-priority:99;
        mso-style-link:"HTML Preformatted";
        font-family:"Courier New";
        color:black;}
.MsoChpDefault
        {mso-style-type:export-only;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
/* List Definitions */
@list l0
        {mso-list-id:1372613687;
        mso-list-template-ids:-1;}
@list l0:level1
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:.5in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Symbol;}
@list l0:level2
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:1.0in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Symbol;}
@list l0:level3
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:1.5in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Symbol;}
@list l0:level4
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:2.0in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Symbol;}
@list l0:level5
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:2.5in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Symbol;}
@list l0:level6
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:3.0in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Symbol;}
@list l0:level7
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:3.5in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Symbol;}
@list l0:level8
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:4.0in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Symbol;}
@list l0:level9
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:4.5in;
        mso-level-number-position:left;
        text-indent:-.25in;
        mso-ansi-font-size:10.0pt;
        font-family:Symbol;}
ol
        {margin-bottom:0in;}
ul
        {margin-bottom:0in;}
--></style></head><body lang=EN-US link=blue vlink="#954F72"><div class=WordSection1><p class=MsoNormal>I believe in a reasonable limit is four in relatively simple humanoid joint animations, and it makes sense in the days before GPU with specialized scripts. Maybe this advice should be in hanim somewhere, but this is still mainly platform specific, and a 'recommendation’ to maybe limit artists from just depending totally upon joints and also use displacer-like objects for high detail. </p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>But the idea of the list of 16 joints per vertex was how to handle the packaging and I thought I understood that the hardware likes it best where the field is filled with 16 references including bunches of zeros if not applied in that step.  </p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Glad you saw that very basic free-form, not-hanim-related at all, tutorial. Andreas is working at just above that level last I saw. </p><p class=MsoNormal>Can you see and give a read to the skin-no-geometry example I sent a few ago? </p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>As we progress in learning about this important topic – in fact the entire reason that vrml was created is hanim - with further learning we will find better understanding of the humanoid model, and at some point dismiss (the very primitive) idea of using translation rather than center for describing effective joint locations in the skeleton that exists in the humanoid space.   </p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Thanks and Best,</p><p class=MsoNormal>Joe</p><p class=MsoNormal><o:p> </o:p></p><div style='mso-element:para-border-div;border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in'><p class=MsoNormal style='border:none;padding:0in'><b><o:p> </o:p></b></p><p class=MsoNormal style='border:none;padding:0in'><b><o:p> </o:p></b></p><p class=MsoNormal style='border:none;padding:0in'><b><o:p> </o:p></b></p><p class=MsoNormal style='border:none;padding:0in'><b>From: </b><a href="mailto:Leonard.Daly@realism.com">Leonard Daly</a><br><b>Sent: </b>Tuesday, December 11, 2018 9:57 AM<br><b>To: </b><a href="mailto:x3d-public@web3d.org">x3d-public@web3d.org</a><br><b>Subject: </b>Re: [x3d-public] glTF - HAnim conversion</p></div><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><span style='color:black'>On 12/11/2018 8:13 AM, Joseph D Williams wrote:<o:p></o:p></span></p><blockquote style='margin-top:5.0pt;margin-bottom:5.0pt'><p class=MsoNormal><span style='color:black'>I meant simple standard gltf use of 16 joints per vertex with unused weights set to 0.<o:p></o:p></span></p></blockquote><p class=MsoNormal><span style='color:black'><br>Joe,<br><br>I do not know what you are referring to or where you got your information. <br><br>I found a tutorial on the Khronos GitHib (<a href="https://github.com/KhronosGroup/glTF-Tutorials/blob/master/gltfTutorial/gltfTutorial_020_Skins.md">https://github.com/KhronosGroup/glTF-Tutorials/blob/master/gltfTutorial/gltfTutorial_020_Skins.md</a>) that discusses skinning, rigging, and animation. In "The skinning joints and weights" section, it states that (2nd paragraph) the the data structure that connects vertices to joints is commonly stored in a 4-element vector. This limits the number of different joints that can affect a vertex to four.<br><br><br>Leonard Daly<br><br><br><br><br><br><o:p></o:p></span></p><blockquote style='margin-top:5.0pt;margin-bottom:5.0pt'><p class=MsoNormal><span style='color:black'>Joe<o:p></o:p></span></p><p class=MsoNormal><span style='color:black'> <o:p></o:p></span></p><p class=MsoNormal><span style='color:black'> <o:p></o:p></span></p><p class=MsoNormal><span style='color:black'>Sent from <a href="https://go.microsoft.com/fwlink/?LinkId=550986">Mail</a> for Windows 10<o:p></o:p></span></p><p class=MsoNormal><span style='color:black'> <o:p></o:p></span></p><div style='border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in'><p class=MsoNormal><b><span style='color:black'>From: </span></b><span style='color:black'><a href="mailto:joedwil@earthlink.net">Joseph D Williams</a><br><b>Sent: </b>Tuesday, December 11, 2018 8:11 AM<br><b>To: </b><a href="mailto:Leonard.Daly@realism.com">Leonard Daly</a>; <a href="mailto:x3d-public@web3d.org">x3d-public@web3d.org</a><br><b>Subject: </b>Re: [x3d-public] glTF - HAnim conversion<o:p></o:p></span></p></div><p class=MsoNormal><span style='color:black'> <o:p></o:p></span></p><p class=MsoNormal><span style='color:black'>What was the detail that (for the convenience of the hardware) ‘always’ used 19 joints per vertex with unused joints weights set to 0?<o:p></o:p></span></p><p class=MsoNormal><span style='color:black'>I thought I have heard that a few times.<o:p></o:p></span></p><p class=MsoNormal><span style='color:black'>Joe<o:p></o:p></span></p><p class=MsoNormal><span style='color:black'> <o:p></o:p></span></p><p class=MsoNormal><span style='color:black'> <o:p></o:p></span></p><div style='border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in'><p class=MsoNormal><b><span style='color:black'>From: </span></b><span style='color:black'><a href="mailto:Leonard.Daly@realism.com">Leonard Daly</a><br><b>Sent: </b>Tuesday, December 11, 2018 7:38 AM<br><b>To: </b><a href="mailto:x3d-public@web3d.org">x3d-public@web3d.org</a><br><b>Subject: </b>Re: [x3d-public] glTF - HAnim conversion<o:p></o:p></span></p></div><p class=MsoNormal><span style='color:black'> <o:p></o:p></span></p><p class=MsoNormal style='margin-bottom:12.0pt'><span style='color:black'> <o:p></o:p></span></p><blockquote style='margin-top:5.0pt;margin-bottom:5.0pt'><div><div><div><blockquote style='border:none;border-left:solid #CCCCCC 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-top:5.0pt;margin-right:0in;margin-bottom:5.0pt'><div><div><ul type=disc><li class=m-1109494319870621309m-9175488166943601978msolistparagraph style='mso-list:l0 level1 lfo1'>glTF associates a joint or<o:p></o:p></li></ul><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:117.6pt'><span style='color:black'>multiple joints to each vertex of a mesh <o:p></o:p></span></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:117.6pt'><span style='color:black'> <o:p></o:p></span></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:117.6pt'><span style='color:black'>yes, gltf apparently associates ‘all’ or always at least 16(?) joints (and weights) with each vertex. That means there is feature called a vertex that has a list of joints and weights associated with it. There is one of these for each vertex, all listing all joints and weights.<o:p></o:p></span></p></div></div></blockquote></div></div><div><p class=MsoNormal><span style='color:black'> <o:p></o:p></span></p></div><div><p class=MsoNormal><span style='color:black'>Yes. For glTF, the minimum a compliant viewer needs to support is 4 joints (out of many) per vertex. A viewer is free to ignore additional joints, with the lowest weights.<o:p></o:p></span></p></div></div></blockquote><p class=MsoNormal style='margin-bottom:12.0pt'><span style='color:black'><br><br>Standard practice in the animation industry is to use a maximum of four joints per skin vertex. There is no standard that limits this. Practical experience from rigging (attaching vertices to joints (aka bones)) and performance indicates that (for the most part) four is the most that is needed. In many cases it is only two.<br><br>So for practical purposes, the limit in glTF does not impact what can be done.<o:p></o:p></span></p><p class=MsoNormal><span style='color:black'>-- <br></span><b><span style='font-size:13.5pt;color:#333366'>Leonard Daly</span></b><span style='color:#333366'><br>3D Systems & Cloud Consultant<br>LA ACM SIGGRAPH Past Chair<br>President, Daly Realism - <i>Creating the Future</i> </span><span style='color:black'><o:p></o:p></span></p><p class=MsoNormal><span style='color:black'> <o:p></o:p></span></p><p class=MsoNormal><span style='color:black'> <o:p></o:p></span></p><p class=MsoNormal><span style='color:black'><br><br><br><o:p></o:p></span></p><pre>_______________________________________________</pre><pre>x3d-public mailing list</pre><pre><a href="mailto:x3d-public@web3d.org">x3d-public@web3d.org</a></pre><pre><a href="http://web3d.org/mailman/listinfo/x3d-public_web3d.org">http://web3d.org/mailman/listinfo/x3d-public_web3d.org</a></pre></blockquote><p><o:p> </o:p></p><p class=MsoNormal><span style='color:black'>-- <br></span><b><span style='font-size:13.5pt;color:#333366'>Leonard Daly</span></b><span style='color:#333366'><br>3D Systems & Cloud Consultant<br>LA ACM SIGGRAPH Past Chair<br>President, Daly Realism - <i>Creating the Future</i> </span><span style='color:black'><o:p></o:p></span></p><p class=MsoNormal><span style='color:black'><o:p> </o:p></span></p></div></body></html>