Skip to content

proximity

Benchmarks of ordito.proximity against every library that computes the same thing. Each chart shows the time of every library relative to ordito on CUDA (1x, in green): a longer bar took longer. The table under each chart lists every input the function was measured on. See Benchmarks for how to read and reproduce these numbers.

Measured on GPU: NVIDIA GeForce RTX 5090 · CPU: Intel Xeon w7-2495X

Summary

0.1x1x10x100x1000xordito (CUDA): the reference, 1xordito (CUDA)1xMeshLib: 4.9x ordito's time, geometric mean over 4 functions; slower than ordito in 3MeshLib4.9x (4)Open3D: 39x ordito's time, geometric mean over 1 functions; slower than ordito in 1Open3D39x (1)SciPy: 40x ordito's time, geometric mean over 1 functions; slower than ordito in 1SciPy40x (1)PyVista: 90x ordito's time, geometric mean over 5 functions; slower than ordito in 5PyVista90x (5)libigl: 302x ordito's time, geometric mean over 2 functions; slower than ordito in 2libigl302x (2)MeshLab: 895x ordito's time, geometric mean over 1 functions; slower than ordito in 1MeshLab895x (1)
Time relative to ordito (CUDA), geometric mean over the proximity functions both implement; in parentheses, the number of functions. Log scale. Runs stopped at the time limit are left out.
Values
Library Time relative to ordito Functions compared ordito faster in
MeshLib 4.9x 4 3
Open3D 39x 1 1
SciPy 40x 1 1
PyVista 90x 5 5
libigl 302x 2 2
MeshLab 895x 1 1

winding_number

0.1x1x10x100x1000x10000xordito (CUDA): 1.70 ms, 1x ordito's timeordito (CUDA)1x · 1.70 msMeshLib: 199.29 ms, 117x ordito's timeMeshLib117x · 199.29 msPyVista: 1.048 s, 616x ordito's timePyVista616x · 1.048 slibigl: 3.886 s, 2285x ordito's timelibigl2285x · 3.886 s
dragon (871 414 faces) · n_queries=10000 · time relative to ordito, log scale
Values
Library Median Relative to ordito
ordito (CUDA) 1.70 ms 1x
MeshLib 199.29 ms 117x
PyVista 1.048 s 616x
libigl 3.886 s 2285x
All inputs
Input ordito (CUDA) libigl MeshLib PyVista
sphere_small n_queries=10000 235.4 µs
sphere_small n_queries=100000 973.0 µs
bunny_decimated n_queries=10000 637.0 µs 59.00 ms 55.01 ms 147.94 ms
bunny_decimated n_queries=100000 1.35 ms 112.25 ms 549.37 ms 1.419 s
bunny n_queries=10000 544.0 µs 229.88 ms 65.87 ms 269.35 ms
bunny n_queries=100000 1.69 ms 338.19 ms 657.03 ms 2.529 s
dragon n_queries=10000 1.70 ms 3.886 s 199.29 ms 1.048 s
dragon n_queries=100000 5.55 ms 4.286 s 1.992 s 8.768 s
happy_buddha n_queries=10000 1.64 ms 4.971 s 220.98 ms 1.185 s
happy_buddha n_queries=100000 4.41 ms 5.299 s 2.186 s 9.821 s
lucy n_queries=10000 30.52 ms 213.893 s 189.56 ms 33.890 s
lucy n_queries=100000 50.38 ms 212.561 s 1.852 s 216.334 s

closest_point_on_mesh

0.1x1x10x100x1000xordito (CUDA): 3.80 ms, 1x ordito's timeordito (CUDA)1x · 3.80 msMeshLib: 6.47 ms, 1.7x ordito's timeMeshLib1.7x · 6.47 msPyVista: 1.167 s, 308x ordito's timePyVista308x · 1.167 s
dragon (871 414 faces) · time relative to ordito, log scale
Values
Library Median Relative to ordito
ordito (CUDA) 3.80 ms 1x
MeshLib 6.47 ms 1.7x
PyVista 1.167 s 308x
All inputs
Input ordito (CUDA) MeshLib PyVista
sphere_small 1.34 ms
bunny_decimated 1.00 ms 1.40 ms 120.75 ms
bunny 1.80 ms 2.68 ms 257.02 ms
dragon 3.80 ms 6.47 ms 1.167 s
happy_buddha 3.90 ms 6.75 ms 1.262 s
lucy 67.93 ms 45.95 ms 43.381 s

closest_point_on_edges

0.1x1x10xordito (CUDA): 8.98 ms, 1x ordito's timeordito (CUDA)1x · 8.98 msPyVista: 45.52 ms, 5.1x ordito's timePyVista5.1x · 45.52 ms
dragon (871 414 faces) · time relative to ordito, log scale
Values
Library Median Relative to ordito
ordito (CUDA) 8.98 ms 1x
PyVista 45.52 ms 5.1x
All inputs
Input ordito (CUDA) PyVista
tangle_torus_small 811.7 µs
bunny_decimated 1.29 ms 31.19 ms
bunny 1.72 ms 32.93 ms
dragon 8.98 ms 45.52 ms
happy_buddha 26.64 ms 66.62 ms
lucy 76.94 ms 157.64 ms

signed_distance_on_mesh

0.1x1x10x100x1000x10000xordito (CUDA): 5.11 ms, 1x ordito's timeordito (CUDA)1x · 5.11 msMeshLib: 94.85 ms, 19x ordito's timeMeshLib19x · 94.85 msOpen3D: 281.78 ms, 55x ordito's timeOpen3D55x · 281.78 msPyVista: 1.024 s, 200x ordito's timePyVista200x · 1.024 slibigl: 1.045 s, 205x ordito's timelibigl205x · 1.045 sMeshLab: 7.216 s, 1413x ordito's timeMeshLab1413x · 7.216 s
dragon (871 414 faces) · sign_mode=parity · time relative to ordito, log scale
Values
Library Median Relative to ordito
ordito (CUDA) 5.11 ms 1x
MeshLib 94.85 ms 19x
Open3D 281.78 ms 55x
PyVista 1.024 s 200x
libigl 1.045 s 205x
MeshLab 7.216 s 1413x
All inputs
Input ordito (CUDA) libigl MeshLab MeshLib Open3D PyVista
sphere_small sign_mode=parity 1.93 ms
sphere_small sign_mode=winding 2.48 ms
bunny_decimated sign_mode=parity 1.77 ms 29.35 ms 189.93 ms 10.29 ms 10.86 ms 149.17 ms
bunny_decimated sign_mode=winding 2.38 ms 44.19 ms
bunny sign_mode=parity 2.62 ms 101.06 ms 638.33 ms 14.12 ms 30.79 ms 271.89 ms
bunny sign_mode=winding 3.13 ms 145.93 ms
dragon sign_mode=parity 5.11 ms 1.045 s 7.216 s 94.85 ms 281.78 ms 1.024 s
dragon sign_mode=winding 7.93 ms 1.496 s
happy_buddha sign_mode=parity 5.55 ms 1.339 s 11.250 s 103.07 ms 344.23 ms 1.165 s
happy_buddha sign_mode=winding 8.30 ms 1.881 s
lucy sign_mode=parity 72.00 ms 44.206 s 552.890 s 4.127 s 25.324 s 34.043 s
lucy sign_mode=winding 138.54 ms 62.200 s

containing_faces_2d

0.1x1x10x100xordito (CUDA): 158.3 µs, 1x ordito's timeordito (CUDA)1x · 158.3 µsSciPy: 2.48 ms, 16x ordito's timeSciPy16x · 2.48 msPyVista: 4.29 ms, 27x ordito's timePyVista27x · 4.29 ms
rows=26 · time relative to ordito, log scale
Values
Library Median Relative to ordito
ordito (CUDA) 158.3 µs 1x
SciPy 2.48 ms 16x
PyVista 4.29 ms 27x
All inputs
Input ordito (CUDA) PyVista SciPy
rows=26 158.3 µs 4.29 ms 2.48 ms
rows=80 241.5 µs 4.31 ms 8.09 ms
rows=240 351.8 µs 5.47 ms 42.28 ms

mesh_to_mesh_distance

0.01x0.1x1xMeshLib: 612.4 µs, 0.28x ordito's timeMeshLib0.28x · 612.4 µsordito (CUDA): 2.16 ms, 1x ordito's timeordito (CUDA)1x · 2.16 ms
dragon (871 414 faces) · offset=1.2 · time relative to ordito, log scale
Values
Library Median Relative to ordito
MeshLib 612.4 µs 0.28x
ordito (CUDA) 2.16 ms 1x
All inputs
Input ordito (CUDA) MeshLib
sphere_small offset=1.2 322.2 µs
sphere_small offset=2.0 579.4 µs
bunny_decimated offset=1.2 813.2 µs 277.7 µs
bunny_decimated offset=2.0 663.3 µs 337.3 µs
bunny offset=1.2 1.38 ms 860.5 µs
bunny offset=2.0 1.31 ms 1.16 ms
dragon offset=1.2 2.16 ms 612.4 µs
dragon offset=2.0 1.65 ms 153.4 µs
happy_buddha offset=1.2 1.99 ms 1.17 ms
happy_buddha offset=2.0 1.87 ms 849.0 µs
lucy offset=1.2 47.99 ms 2.16 ms
lucy offset=2.0 45.64 ms 819.8 µs

Without a reference

No other library computes these, so they have no comparison. ordito (CUDA)'s median time on the largest input it was measured on:

Function Input ordito (CUDA)
winding_number_serial lucy 11.364 s
normals_at_closest_faces lucy 29.46 ms
signed_distance_lattice sphere_large 93.3 µs
query_mesh_aabb_with_offsets lucy 157.9 µs