SharpGLTF icon indicating copy to clipboard operation
SharpGLTF copied to clipboard

Buffer data embedding option

Open NoOverflow opened this issue 5 years ago • 6 comments

Hi, after some research I can't find any option to embed the buffer data into the .gltf file (and not in a separate .bin file)

Following the glTF reference guide this is fully possible : https://www.khronos.org/files/gltf20-reference-guide.pdf

I even tried it by modifying the "url" property of the buffer in the JSON from "*.bin" to "data:application/gltf-buffer;base64,..." and it worked perfectly.

I was expecting Schema2.WriteSettings to contain such an option (Something like .BufferWriting = SharpGLTF.Schema2.ResourceWriteMode.Embedded) but maybe it is somewhere else. If it is indeed missing I'll gladly add it with a pull request.

Thanks

NoOverflow avatar Oct 08 '20 09:10 NoOverflow

The library does not support embedding the buffers into the json when writing.

Given you can also write files in GLB format, I didn't consider it useful, because embedded buffers are encoded in base64 and are very inefficient.

Is there a particular reason why you need embedding the buffers into the json?

vpenades avatar Oct 08 '20 09:10 vpenades

I'm sending small 3D objects to a local web interface (then displayed using google model viewer), so size doesn't matter and I may need to access glTF json data at some point, that's why I wanted to use embedded buffers (I could also use binary format and then parse it but as size and efficiency are not really critical factors I just didn't bother).

NoOverflow avatar Oct 08 '20 10:10 NoOverflow

I understand... well, writing embedded buffers support is a non trivial change, I'll look into it, but don't expect a solution soon... it will probably be added for the next release

vpenades avatar Oct 08 '20 10:10 vpenades

I'll take a look at it to see if I can help. Don't worry about it too much though, I'll stick to binary for now and figure another way. Anyway thanks for your time !

NoOverflow avatar Oct 08 '20 13:10 NoOverflow

As you guessed, it needs another buffer write settings mode in the writer function, and this flag to be dealt with in the appropiate places, without interfering with all other features... it's this last issue what makes it non trivial.

vpenades avatar Oct 08 '20 14:10 vpenades

Yes I'm taking a look at the code. I made a fork to try some things and see how that works out, I've got a bit of time on my hands so I might as well try something out. And even if I don't manage to get something working I'll be more familiar with the library so win-win anyway

NoOverflow avatar Oct 08 '20 14:10 NoOverflow