FCP: what the experiments show

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.

Horse decoded from one FCP encode (tracked-fit, 256 layers) at 16 to 8192 atoms and the full 55446 atoms, beside the ground truth, with Chamfer and p95 errors
One encode, read at growing prefixes (horse, 256 layers, decoded on a 128³ grid). Chamfer distance in % of the diagonal: 1.59 % at 64 atoms (561 B), 0.32 % at 256 atoms (1.9 kB), 0.12 % at 1024 atoms (7.1 kB), 0.031 % at 8192 atoms (56 kB), 0.023 % with all 55446 atoms (379 kB).

Queries straight from the descriptor, at a glance

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.

queryFCPstandard method on the meshaccuracyverdictdetails
inside-outside point test25–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× fastercollision
collision of two placed objects23–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: 5–19 ns per ray in a view; exact, GPU: 0.33–0.86 µsEmbree: 7–13 ns (needs 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 wallsstaircase on par per ray; exact 26–108× slower than Embree; both save the 120–340 ms decoderay casting
volume0.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 normalsvolume
convex hull4.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 decodehull
oriented bounding box1.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 outside18–86× faster (median 52×): a near-minimal box, faster than a principal-axes boxbounds
smallest enclosing sphere1.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 outside2.2–6.7× faster (median 3.8×), if a radius within 1 % will dobounds
axis-aligned bounding box1.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 outside29–201× slower: use the exact box when the mesh or the points are at handbounds

The solid queries on one thread

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).

queryagainst the exact standard routesize error, median (worst object)worst case, % of the diagonaldetails
convex hull2.0× faster than qhull0.91 % (3.7 %)1.25 largest gap to the true hulltradeoffs
volume2.0× faster than the tetrahedron sum0.32 % (0.8 %)–tradeoffs
oriented bounding box22× faster than the faster minimal box1.00 % (3.5 %)0.50 farthest vertex outsidetradeoffs
smallest enclosing sphere3.2× faster than the exact ball0.40 % (1.0 %)0.20 farthest vertex outsidetradeoffs
axis-aligned bounding box81× slower than Open3D0.75 % (2.4 %)0.74 farthest vertex outsidetradeoffs

What holds across the studies

Caveats

Pages

Collision and inside-outside

Point tests against Embree and pose tests against FCL at 128–512 layers; where the wrong answers sit.

Ray casting (provisional)

The slab tracer's exact and staircase modes on CPU and GPU, against Embree and a GPU BVH.

Solid properties

One table: volume, convex hull, oriented and axis-aligned boxes, smallest sphere, each against the standard method on the mesh.

Convex hull

How the hull is built from the rings, per-object accuracy and timing, and its defects.

Volume

Volume from the atoms, from meshes and from point clouds, against the exact volume and Poisson reconstruction.

Tradeoffs (one thread)

Speed against accuracy for 549 settings across five queries, one thread for every method, and how each scales with mesh size.

Monotonicity

Error at each prefix on the 12 objects, v5.5 against the new version, log-log.

Bounding volumes

Axis-aligned box, oriented box and smallest sphere from the descriptor's hull, against the mesh's, with renders of both.