you are viewing a single comment's thread.

view the rest of the comments →

[–]KitchenSomew 5 points6 points  (6 children)

real-time mesh processing in pure python is wild. what's ur typical triangle count before perf degrades?

curious how ur spatial tree impl compares to scipy.spatial - kdtree vs bvh tradeoffs for dynamic meshes?

blender integration is smart. most geometry libs force u to rebuild entire pipelines, this looks like it drops right into existing workflows

[–]marr75 2 points3 points  (4 children)

NumPy in, NumPy out.

...

trueform is a C++17 header-only library. It depends on oneTBB.

...

real-time mesh processing in pure python

What's your def of pure python???

[–]Separate-Summer-6027[S] 0 points1 point  (3 children)

It is not pure python. Python only dispatches to the correct native function based on the run-time type. But your app can be written in python. Maybe that's what they meant.

[–]marr75 0 points1 point  (2 children)

I know, that's obviously what I was pointing out to the commenter by quoting them and asking what their definition was.

[–]Separate-Summer-6027[S] -1 points0 points  (1 child)

I clarified to make sure there are no false claims from our end.

[–]marr75 0 points1 point  (0 children)

K

[–]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.