Solid properties straight from the descriptor
Updated 2026-10-30 17:26; built by sections/solid/make.py from the fcp_3010_hull study's CSVs.
The 12 objects of the collision section; CPU: Intel(R) Core(TM) i5-10400F CPU @ 2.90GHz, one thread for the volume and the hull; the boxes and the sphere on numba's 12 threads, the references as their libraries run. Volume from the stored atoms in one contraction (no rings, no grid); convex hull from the rings (prototype, not in the package). Volume error against the source mesh's volume (volume rows), its convex hull's volume (hull rows), or the reference bound's volume (box and sphere rows; the sphere's from its radius; trimesh's minimum sphere is up to 0.4 % too large and slower, so the exact ball is the reference); the boxes and the sphere come from candidate hull points of the rings (no hull surface; 64 directions); the oriented box's time is that of all three bounds, the axis-aligned box and the sphere share one pass; the hull gap from 20k points on the true hull to the descriptor's hull. The 6144-atom runs from points ran at a load average of about 7: their times are upper bounds.
| property | layers | atoms | directions M | FCP, ms median (range) | reference on the source mesh | reference, ms median (range) | decode + reference, ms median | FCP faster than the reference | volume error, % median (worst) | hull surface gap, % diag: median of means (max) | farthest mesh vertex outside the bound, % diag (max) |
|---|---|---|---|---|---|---|---|---|---|---|---|
| volume (encoded from the mesh) | 128 | 1024 | – | 0.028 (0.019–0.046) | exact mesh volume (divergence theorem, numba) | 0.044 (0.014–0.235) | 309 | 10 / 12 | -0.47 (-0.88) | – | – |
| volume (encoded from the mesh) | 128 | 2048 | – | 0.038 (0.023–0.061) | exact mesh volume (tetrahedron sum, numba) | 0.052 (0.027–0.235) | – | 8 / 12 | -0.31 (-0.74) | – | – |
| volume (encoded from the mesh) | 128 | 6144 | – | 0.042 (0.024–0.063) | exact mesh volume (divergence theorem, numba) | 0.044 (0.014–0.235) | 354 | 6 / 12 | -0.17 (-0.74) | – | – |
| volume (encoded from the mesh) | 256 | 6144 | – | 0.044 (0.025–0.084) | exact mesh volume (divergence theorem, numba) | 0.044 (0.014–0.235) | 1401 | 3 / 12 | -0.13 (-0.71) | – | – |
| volume (encoded from 20k points) | 128 | 2048 | – | 0.032 (0.020–0.057) | exact mesh volume (tetrahedron sum, numba) | 0.052 (0.027–0.235) | – | 9 / 12 | -0.16 (+1.76) | – | – |
| volume (encoded from 20k points) | 128 | 6144 | – | 0.041 (0.020–0.069) | exact mesh volume (tetrahedron sum, numba) | 0.052 (0.027–0.235) | – | 8 / 12 | -0.15 (+1.82) | – | – |
| volume (encoded from 20k points) | 256 | 6144 | – | 0.046 (0.019–0.061) | exact mesh volume (tetrahedron sum, numba) | 0.052 (0.027–0.235) | – | 9 / 12 | -0.16 (+1.87) | – | – |
| convex hull | 128 | 1024 | 64 | 3.8 (2.6–13.9) | qhull on the mesh's vertices | 4.0 (2.1–16.3) | 116 | 6 / 12 | -0.95 (-3.88) | 0.166 (1.31) | – |
| convex hull | 128 | 6144 | 64 | 4.0 (2.3–13.9) | qhull on the mesh's vertices | 4.0 (2.1–16.3) | 107 | 7 / 12 | -1.04 (-3.78) | 0.131 (1.21) | – |
| convex hull | 128 | 6144 | 128 | 5.8 (4.8–26.7) | qhull on the mesh's vertices | 4.0 (2.1–16.3) | 107 | 1 / 12 | -0.66 (-3.52) | 0.115 (1.14) | – |
| convex hull | 256 | 6144 | 128 | 7.9 (6.2–51.5) | qhull on the mesh's vertices | 4.0 (2.1–16.3) | 407 | 0 / 12 | -0.46 (-3.51) | 0.110 (1.14) | – |
| axis-aligned box | 128 | 2048 | 64 | 0.98 (0.66–3.33) | Open3D box of the mesh vertices | 0.015 (0.005–0.080) | – | 0 / 12 | +0.11 (-2.16) | – | 0.52 |
| axis-aligned box | 128 | 6144 | 64 | 1.00 (0.68–3.30) | Open3D box of the mesh vertices | 0.015 (0.005–0.080) | – | 0 / 12 | -0.16 (-2.13) | – | 0.52 |
| axis-aligned box | 256 | 6144 | 64 | 1.78 (1.07–6.31) | Open3D box of the mesh vertices | 0.015 (0.005–0.080) | – | 0 / 12 | -0.34 (-2.28) | – | 0.53 |
| oriented box | 128 | 2048 | 64 | 1.41 (0.91–4.10) | minimal box: the smaller of trimesh's and Open3D's; the faster one's time | 79.7 (20.4–150.9) | – | 12 / 12 | +0.65 (+3.64) | – | 0.50 |
| oriented box | 128 | 6144 | 64 | 1.48 (0.92–3.90) | minimal box: the smaller of trimesh's and Open3D's; the faster one's time | 79.7 (20.4–150.9) | – | 12 / 12 | +0.31 (+3.45) | – | 0.50 |
| oriented box | 256 | 6144 | 64 | 2.44 (1.40–7.30) | minimal box: the smaller of trimesh's and Open3D's; the faster one's time | 79.7 (20.4–150.9) | – | 12 / 12 | +0.41 (+3.91) | – | 0.47 |
| smallest sphere | 128 | 2048 | 64 | 0.98 (0.66–3.33) | exact smallest ball (qhull, then the minimum ball) | 3.9 (2.1–18.2) | – | 12 / 12 | +0.69 (+2.21) | – | 0.15 |
| smallest sphere | 128 | 6144 | 64 | 1.00 (0.68–3.30) | exact smallest ball (qhull, then the minimum ball) | 3.9 (2.1–18.2) | – | 12 / 12 | +0.87 (+2.25) | – | 0.12 |
| smallest sphere | 256 | 6144 | 64 | 1.78 (1.07–6.31) | exact smallest ball (qhull, then the minimum ball) | 3.9 (2.1–18.2) | – | 12 / 12 | +0.19 (-1.71) | – | 0.34 |