<html xmlns:v="urn:schemas-microsoft-com:vml" 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=us-ascii">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:Wingdings;
        panose-1:5 0 0 0 0 0 0 0 0 0;}
@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;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph
        {mso-style-priority:34;
        margin-top:0in;
        margin-right:0in;
        margin-bottom:0in;
        margin-left:.5in;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
span.EmailStyle18
        {mso-style-type:personal-reply;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.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:1755393074;
        mso-list-type:hybrid;
        mso-list-template-ids:-1923320034 1385460742 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l0:level1
        {mso-level-start-at:16;
        mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:Symbol;
        mso-fareast-font-family:Calibri;
        mso-bidi-font-family:"Times New Roman";}
@list l0:level2
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:"Courier New";}
@list l0:level3
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:Wingdings;}
@list l0:level4
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:Symbol;}
@list l0:level5
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:"Courier New";}
@list l0:level6
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:Wingdings;}
@list l0:level7
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:Symbol;}
@list l0:level8
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:"Courier New";}
@list l0:level9
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:Wingdings;}
ol
        {margin-bottom:0in;}
ul
        {margin-bottom:0in;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-US" link="blue" vlink="purple" style="word-wrap:break-word">
<div class="WordSection1">
<p class="MsoNormal">Tweeted @Web3dConsortium with some nice screenshots.  Bravo!<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<ul style="margin-top:0in" type="disc">
<li class="MsoListParagraph" style="margin-left:0in;mso-list:l0 level1 lfo1">Improved #X3DOM binary storage of field values on GPU using (inspired by @glTF3D techniques) can efficiently store exceptionally large arrays such as #X3D CoordinateInterpolator, useful
 for large keyframe animations.<o:p></o:p></li></ul>
<p class="MsoListParagraph">http://web3d.org/pipermail/x3d-public_web3d.org/2022-January/016533.html<o:p></o:p></p>
<p class="MsoListParagraph"><o:p> </o:p></p>
<ul style="margin-top:0in" type="disc">
<li class="MsoListParagraph" style="margin-left:0in;mso-list:l0 level1 lfo1">https://twitter.com/Web3DConsortium/status/1483819271016824835<o:p></o:p></li></ul>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New"">all the best, Don<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New"">-- <o:p>
</o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New"">Don Brutzman  Naval Postgraduate School, Code USW/Br        brutzman@nps.edu<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New"">Watkins 270,  MOVES Institute, Monterey CA 93943-5000 USA    +1.831.656.2149<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Courier New"">X3D graphics, virtual worlds, Navy robotics https://</span>
<span style="font-size:10.0pt;font-family:"Courier New"">faculty.nps.edu/brutzman<o:p></o:p></span></p>
<p class="MsoNormal"><o:p> </o:p></p>
<div style="border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b>From:</b> x3d-public <x3d-public-bounces@web3d.org> <b>On Behalf Of
</b>Andreas Plesch<br>
<b>Sent:</b> Tuesday, January 18, 2022 7:40 PM<br>
<b>To:</b> X3D Graphics public mailing list <x3d-public@web3d.org><br>
<b>Subject:</b> [x3d-public] gltf inspired binary storage<o:p></o:p></p>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<p class="MsoNormal">Let me announce x3dom support for efficient support of large CoordinateInterpolator (and other) nodes by adopting gltf inspired binary storage of field values.<o:p></o:p></p>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">Here is an example:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">regular CoordinateInterpolator (ca. 12MB):<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal"><a href="https://nam10.safelinks.protection.outlook.com/?url=https%3A%2F%2F61e75f82d2db93000729e6a7--x3dom.netlify.app%2Fexamples%2Fcases%2FcoordinateInterpolator%2FcoordinateInterpolator.html&data=04%7C01%7Cbrutzman%40nps.edu%7C11c642aa39e64ee5d74308d9dafd8cd3%7C6d936231a51740ea9199f7578963378e%7C0%7C0%7C637781605870008109%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C2000&sdata=fk2hxhsaAhFrsdxPdlFEaAiXYCaR%2BnOaWX47MuE439k%3D&reserved=0">https://61e75f82d2db93000729e6a7--x3dom.netlify.app/examples/cases/coordinateInterpolator/coordinateInterpolator.html</a><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<div>
<p class="MsoNormal">binary CoordinateInterpolator (ca. 5MB):<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><a href="https://nam10.safelinks.protection.outlook.com/?url=https%3A%2F%2F61e75f82d2db93000729e6a7--x3dom.netlify.app%2Fexamples%2Fcases%2Fcoordinateinterpolator%2Fcoordinateinterpolatorbuffer&data=04%7C01%7Cbrutzman%40nps.edu%7C11c642aa39e64ee5d74308d9dafd8cd3%7C6d936231a51740ea9199f7578963378e%7C0%7C0%7C637781605870008109%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C2000&sdata=iWR%2BY%2F1nrkhX%2FoZzDVrtjxHRBqMpF9M7yYdXv8K7r6w%3D&reserved=0">https://61e75f82d2db93000729e6a7--x3dom.netlify.app/examples/cases/coordinateinterpolator/coordinateinterpolatorbuffer</a><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">The binary version should load faster. There is no visual difference. There is also no performance difference after initial loading.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">This is useful for large keyframe animations.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">Background:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">glTF stores all data in buffers, eg. binary storage which can often be used directly on the GPU. The details on how the data is stored is provided by 'views' into the buffer and 'accessors' of views.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">x3dom implements glTF support not by translating these data structures into x3d field values but by implementing additional x3d nodes and fields. There is a 'BufferGeometry' node and additional fields such as BufferAccessor for Interpolators.
 This has the advantage that these additions can also be used outside of glTF.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">glTF only has support for translation, scale and rotation interpolation. In x3dom, buffer storage can now also be used for other interpolators. Here is a fuller description:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal"><a href="https://nam10.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fx3dom%2Fx3dom%2Fwiki%2FBuffer-interpolators&data=04%7C01%7Cbrutzman%40nps.edu%7C11c642aa39e64ee5d74308d9dafd8cd3%7C6d936231a51740ea9199f7578963378e%7C0%7C0%7C637781605870008109%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C2000&sdata=KPrj5x9bVk%2Fg221HgXvPUnBqRvbi2a4bFCdIBz42jXI%3D&reserved=0">https://github.com/x3dom/x3dom/wiki/Buffer-interpolators</a><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">It is possible to convert regular Interpolators to buffer Interpolators. Here is a sample converter for CoordinateInterpolator:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal"><a href="https://nam10.safelinks.protection.outlook.com/?url=https%3A%2F%2Fobservablehq.com%2F%40andreasplesch%2Fx3dom-interpolator-buffer-converter&data=04%7C01%7Cbrutzman%40nps.edu%7C11c642aa39e64ee5d74308d9dafd8cd3%7C6d936231a51740ea9199f7578963378e%7C0%7C0%7C637781605870008109%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C2000&sdata=aDaTKLOaravV%2Btsx6C6WZZA4AHEW%2FsVwlQ39D3czom4%3D&reserved=0">https://observablehq.com/@andreasplesch/x3dom-interpolator-buffer-converter</a><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">In x3dom, there is also a BinaryGeometry node which is a precursor to the BufferGeometry node used for glTF support. Though non-standard, the BinaryGeometry node is very popular since it allows for faster and more efficient loading of large
 IFS. There is a converter (aopt) which generates BinaryGeometry. It should be possible to write another converter to BufferGeometry. This binary format is quite different from x3db, the Fast Infoset based binary encoding of x3d which requires heavy processing.
 With glTF support in x3d, there may be now more interest in glTF type binary storage of heavy models, perhaps leading to standardization.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">Any feedback or comment always welcome,<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">Andreas<o:p></o:p></p>
</div>
<p class="MsoNormal">-- <o:p></o:p></p>
<div>
<div>
<div>
<p class="MsoNormal">Andreas Plesch<br>
Waltham, MA 02453<o:p></o:p></p>
</div>
</div>
</div>
</div>
</div>
</div>
</body>
</html>