Rendering points with distinct 'importance' in 3D Tiles


I am using 3D Tiles for point cloud visualization. Therefore, I will be converting my data into the .PNTS data format, and creating tiles in a 3D tileset from these files.

However, when I visualize the points in a browser, I want to visualize it such that only points with a high 'importance' value are shown closer to the observer location, and points with successively lesser importance values are shown when getting far from the observer. So, more points are shown farther from the observer (both low and high importance points) and less points are shown closer to the observer(only the most important ones, based upon an existing attribute in the point cloud).

I came to know that the "geometric error" property in a tile can be used for this purpose. However, if there are multiple points inside a tile, and each has a different 'importance', won't setting a single geometric error property for this tile render all of the points contained within using the same criteria? (i.e. since all of the points in the tile have the same geometric error)

Is it possible to uniquely render points based on their importance values with 3D Tiles?

I hope I am clear in my question. Please let me know if any further information is needed.

Would appreciate any input.

One way would be to store a custom per-point property in the batch table binary section (for example a scalar unsigned byte property called “Importance”), and then write a style with a show property that queries “${Importance}”.

Another way would be to use replacement refinement where a child tile contains the important points and the parent tile contains both important and non-important points. This approach requires storing some duplicate data though.

Is there any way to do this using only the feature table and its properties? Unfortunately, as 3D Tiles is still under development, I do not know of any tools that allow for working with the batch table in a PNTS file. I also do not want to store any duplicate points. A kind of 'hack' would also be fine here.

I don’t think it’s doable with just the feature table since you’ll still need to encode importance somewhere, and the batch table is where custom properties belong.

I was going to suggest creating a tree using replacement refinement where a parent tile contains low and high importance points and its child contains only high importance points, but this would require storing duplicate points which you are trying to avoid. I can’t think of a workaround.

Are you writing your own .pnts generator or using another tool for that?

I am using FME to create the 3D Tiles tileset.

Can I not use “Additive refinement” where the more important tiles have a lower “geometricError” and the less importance tiles have a higher “geometricError”?

This means that the most important points are always rendered, and the lesser important points are only sometimes rendered.

Please correct me if I am wrong here.


Since the idea is to view less points as you get closer I’m not sure if additive refinement will work since it will have the opposite effect.