Point cloud meshlet generation
Krixtalx opened this issue · comments
I have seen that the meshlet generation method works with connectivity pretty much all the time. In point cloud models we don't have any connectivity data. Could be possible to use the method with point clouds?
Point clouds are a little different in the sense that when building meshlets out of a triangle mesh, you need to take connectivity and vertex reuse into account as well as spatial locality. When working with points, the only optimization criteria is locality.
Right now the only approach that would work out of the box would be to use meshopt_spatialSortRemap
, then use meshopt_remapVertexBuffer
to reorder the points, and then just split the resulting buffer into fixed size chunks (of the size of the meshlet).
This approach probably won't be as good as using a clusterizer. A dedicated point cloud clusterizer would be fairly easy to add since it's just a bunch of nearest-neighbor quieries using the existing kD tree in clusterizer. Let me know if you'd be interested in this or if spatial sort method would suffice for now.
Thanks for your response. Right now i'm using the spatial sorting. The problem it has is that as it uses morton codes, it generates some "broken" cluster (Image from Software Rasterization of 2 Billion Points in Real Time paper)
I have tried to use the kD tree approach looking for the meshlet size nearest neighbors using nanoflann kD tree, but it takes a bunch of time in comparison with the spatial sort (1,3s vs 80s with a ~40 million points point cloud). I don't know if using the spatial sort and somehow detect what meshlets are broken in order to reconstruct them using the kD tree could be possible.
Anyway, if you find it easy to implement, i think that it would be a nice addition to have a dedicated point cloud clusterizer.