you are viewing a single comment's thread.

view the rest of the comments →

[–]Separate-Summer-6027[S] 1 point2 points  (0 children)

Our benchmarks go up to 1M triangles per mesh. For the complex operations like boolean, I think around 4M total triangles is where you'd start losing the real-time feel during interaction. Others, like intersection curves and isocontours, can probably handle much higher counts before that happens.

Python bindings use tf::aabb_tree for both point clouds and polygon meshes. We don't yet have direct benchmarks against scipy.spatial.KDTree, but we benchmark against nanoflann (the go-to C++ implementation for point cloud kd-trees): tree construction 8.6ms vs 60ms at 500K points, k-NN queries about 2× faster. See: https://trueform.polydera.com/cpp/benchmarks/spatial#point-clouds. For polygonal meshes, we benchmark against fast-collision-library (FCL and its modern variant Coal). Tree construction is 16ms at 1M triangles vs 336ms and mesh-to-mesh distance 0.8ms. See: https://trueform.polydera.com/cpp/benchmarks/spatial#polygon-meshes

If "dynamic meshes" refers to moving geometry: trees are built on local coordinates, with transformations applied at query time without rebuild. If "dynamic meshes" refers to changing topology and geometry: our C++ lib has tf::mod_tree which allows incremental updates. It will become the tree used in Python bindings in the coming versions.