FCP stores a shape as signed parts of rings stacked along one axis: each ring by its Fourier coefficients, the heights by Chebyshev polynomials, all of it as atoms sorted by energy, so any prefix of the atoms is a coarser copy of the same shape. This page collects what the studies found about using that descriptor directly, without decoding it to a mesh. Each row links to the page with the method, the per-object tables and the figures.
12 objects (8 household from Google Scanned Objects, the dino and horse figurines, a spring and a knot), 128 layers unless noted, one Intel i5-10400F CPU; ray casting: four objects, also a GTX 1650. Times are medians over the objects; distances in % of the object's diagonal. Thread counts differ between rows, and the standard methods run as their libraries do; the table below puts the solid queries on one thread each.
| query | FCP | standard method on the mesh | accuracy | verdict | details |
|---|---|---|---|---|---|
| inside-outside point test | 25–28 ns per point (12 threads) | Embree occupancy: 52 ns | wrong answers only within 0.29–0.55 % of the surface (128–512 layers) | 1.9× faster | collision |
| collision of two placed objects | 23–24 µs per pose (12 threads) | FCL: 18 µs (1 thread) | 99.86–99.95 % of poses right; no missed contact deeper than 0.15 % | slower on the CPU; the speed-up is a GPU result (poses in one batch) | collision |
| ray casting (provisional) | staircase, GPU: 2–10 ns per ray in a view; NEAR, GPU: 143–429 ns; exact, GPU: 204–531 ns | Embree: 7–13 ns (on a decoded mesh); Warp GPU BVH: 3–7 ns | exact: 0 missed or late hits, CPU and GPU; staircase: up to half a layer off on sloped walls | staircase level with Embree on views, 1.4–2.7× slower on random rays; NEAR 11–54× and exact 16–67× slower. Its case is very large meshes | ray casting |
| volume | 0.03–0.05 ms (1 thread; one contraction of the atoms) | exact tetrahedron sum: 0.04–0.05 ms | median error 0.13–0.47 %, worst 0.88 % (0.17 % and 0.74 % at 6144 atoms); from 20k points without normals: median 0.24–0.28 %, worst 1.9 % | as fast as the exact mesh volume; from points as close as Poisson with true normals | volume |
| convex hull | 4.0 ms (1 thread; 64 directions, earlier method) | qhull: 4.0 ms; decode, then qhull: 107 ms | hull volume −1.0 % median (worst −3.8 %); mean surface gap 0.13 % | even with qhull on the mesh; 27× faster than through a decode | hull |
| oriented bounding box | 1.4 ms (12 threads; all three bounds) | minimal box (trimesh): 80 ms; Open3D principal-axes box: 3.5 ms, up to +50 % volume | volume −2.3 to +3.6 %; up to 0.50 % of the diagonal outside | 18–86× faster (median 52×): a near-minimal box, faster than a principal-axes box | bounds |
| smallest enclosing sphere | 1.0 ms (12 threads) | exact smallest ball (qhull + min ball): 3.9 ms | radius −0.06 to +0.7 %; up to 0.15 % of the diagonal outside | 2.2–6.7× faster (median 3.8×), if a radius within 1 % will do | bounds |
| axis-aligned bounding box | 1.0 ms (12 threads) | Open3D on the mesh vertices: 0.015 ms, exact | volume −2.2 to +1.9 %; up to 0.52 % of the diagonal outside | 29–201× slower: use the exact box when the mesh or the points are at hand | bounds |
A fair comparison: one thread for every method, 12 objects, encoding not counted. Each query uses its own balanced setting (the fastest within 1 % median error and a bounded worst case), so these are not all one descriptor. Encoding once takes 55 ms at 1k vertices and 2.5 s at 1M (128 layers, 2048 atoms).
| query | against the exact standard route | size error, median (worst object) | worst case, % of the diagonal | details |
|---|---|---|---|---|
| convex hull | 2.0× faster than qhull | 0.91 % (3.7 %) | 1.25 largest gap to the true hull | tradeoffs |
| volume | 2.0× faster than the tetrahedron sum | 0.32 % (0.8 %) | – | tradeoffs |
| oriented bounding box | 22× faster than the faster minimal box | 1.00 % (3.5 %) | 0.50 farthest vertex outside | tradeoffs |
| smallest enclosing sphere | 3.2× faster than the exact ball | 0.40 % (1.0 %) | 0.20 farthest vertex outside | tradeoffs |
| axis-aligned bounding box | 81× slower than Open3D | 0.75 % (2.4 %) | 0.74 farthest vertex outside | tradeoffs |
What is implemented, parameters, what runs on NumPy, numba and CUDA, defects, and the plan for the alpha commit.
Point tests against Embree and pose tests against FCL at 128–512 layers; where the wrong answers sit.
The slab tracer's exact, NEAR and staircase modes on CPU and GPU, against Embree and a GPU BVH, and the situations hard for a BVH.
One table: volume, convex hull, oriented and axis-aligned boxes, smallest sphere, each against the standard method on the mesh.
How the hull is built from the rings, per-object accuracy and timing, and its defects.
Volume from the atoms, from meshes and from point clouds, against the exact volume and Poisson reconstruction.
Speed against accuracy for 549 settings across five queries, one thread for every method, and how each scales with mesh size.
Error at each prefix on the 12 objects, v5.5 against the new version, log-log.
Axis-aligned box, oriented box and smallest sphere from the descriptor's hull, against the mesh's, with renders of both.