Lightweight format for pointclouds without texture

Hi there,

I want to show a sequence of (different) pointclouds as animation in a web browser. I need only a few seconds for now. I couldn’t find any tool or code that provides this option. So I’m afraid I have to build it from scratch.

So I was searching for a lightweight format to save the XYZ vertices. What I have found so far is not promising at all. Saving a cloud as raw *.txt with just the coordinates ends up in 1MB each cloud.

I’m generating the clouds with a self made program. Three D415 are doing their job just fine.
The SDK provides streaming in OBS but unfortunately just for the older models (r200).

Thanks for any help on this

Why not saving your data in a glTF file? A single glb should produce much better results as a raw text file. Besides, it also possible to compress your data with Draco in order to reduce the file size even more.

BTW: We already discussed a similar topic right here: Can I show a sequence of pointclouds in browser?

Why is using morph targets not an option for you? As far as I understand, you are going to visualize a sequence of independent THREE.Points objects, right? I’ve already mentioned in the other topic that this approach is not really performant…

glTF will get you binary rather than plaintext here, so that’s better than a .txt for sure, but the Draco glTF extension does not support point clouds or morph targets yet unfortunately. You could use plain Draco (.drc) but no animation still.

Regardless, if morph targets won’t provide the kind of animation you need, then you may need a custom binary format and to figure out how to animate it in threejs efficiently. I would look at GitHub - zadvorsky/three.bas: THREE.JS Buffer Animation System for the animation part.

1 Like

Sorry for the delay. I was still busy on the point cloud generation and had to put the web project on hold.

Now I’m ready to find the best way to show my sequencies of point clouds on my website. I want to use them as design element.

Well I’ve double checked the option to export the clouds to gltf. I imported each cloud as *.PCD file into an empty threejs scene. The resulting file size is not practical at all. A three seconds sequence is about 20MB saved as binary.

I’m happy with just the coordinates. Texture will follow.
So I remember the kinect example given in three js master. The script loads a video (webm) and generates the point’s position from it. It is fast and the size of the video file insignificant.
BUT the quality of the resulting clouds is pure. I’m quite sure that the noise is caused by the compressed color data of the video. I also tried mp4 as input format with same pure quality.

Next step will be to
-> save depth/range image of each cloud in *.png format
-> upload the png files and extract the points coordinates from the depth/range image
-> store all clouds in memory queue - ready to be displayed.

Does this make sense to you? I’ve just started figuring out how to get the clouds vertices from png file.
Any idea to get this done?

Thanks for help