[x3d-public] gltf inspired binary storage

Andreas Plesch andreasplesch at gmail.com
Tue Jan 18 19:40:04 PST 2022


Let me announce x3dom support for efficient support of large
CoordinateInterpolator (and other) nodes by adopting gltf inspired binary
storage of field values.

Here is an example:

regular CoordinateInterpolator (ca. 12MB):

https://61e75f82d2db93000729e6a7--x3dom.netlify.app/examples/cases/coordinateInterpolator/coordinateInterpolator.html

binary CoordinateInterpolator (ca. 5MB):
https://61e75f82d2db93000729e6a7--x3dom.netlify.app/examples/cases/coordinateinterpolator/coordinateinterpolatorbuffer

The binary version should load faster. There is no visual difference. There
is also no performance difference after initial loading.

This is useful for large keyframe animations.

Background:

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.
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.
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:

https://github.com/x3dom/x3dom/wiki/Buffer-interpolators

It is possible to convert regular Interpolators to buffer Interpolators.
Here is a sample converter for CoordinateInterpolator:

https://observablehq.com/@andreasplesch/x3dom-interpolator-buffer-converter

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.

Any feedback or comment always welcome,

Andreas
-- 
Andreas Plesch
Waltham, MA 02453
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://web3d.org/pipermail/x3d-public_web3d.org/attachments/20220118/0310ec08/attachment.html>


More information about the x3d-public mailing list