Question. Can the descriptor answer "is this point inside?" and "do these two placed objects collide?" directly, without decoding to a mesh, faster than the standard and state-of-the-art mesh methods (BVH ray casting, BVH winding numbers, BVH triangle-triangle tests), and how accurately? Eleven watertight objects: six everyday ones (mug, bowl, dino, horse, shoe, dress: 8k–444k faces) and five concave, interleaved or perforated ones (a pan with 334 holes, a trefoil knot, a coil spring, a Menger sponge, a 24-tooth gear). v2 of the study: one encoder setting for every object, chosen by a sweep (section 1); the dog and the elephant of v1 are left out.
The setting. 1024 layers, N 128 harmonics, height degree up to 64, 2048 arc-length samples per ring, every island kept (the package drops tracks below 0.2 % of the largest slice's area), encoded with every atom and cut to all but 1e-8 of the energy (at most 5 MB): 0.08–2.2 MB per object, 25–40 s and at most 1.9 GB to encode. Package v5.4, parts="tracked-fit" (with decision 29's cut fix); the study patches three encoder constants in-process and replaces the selection's padded array (lowmem.py); nothing in the package is changed.
How FCP answers (scripts/fcpq.py). The rings at the layer centres are evaluated once from the stored polynomials (512 vertices each; the ring tables take 0.1–0.3 s per object). A point is inside when the signed count of the parts whose ring at the nearest layer centre contains it is positive (hole parts count −1): one even-odd crossing test per part present at that height, on the edges of the point's y-bin only. The height is read to half a layer (0.05 % of the diagonal or less). Collision: the ring vertices of each object (strided) are mapped into the other's canonical frame and tested; a pose collides when any is inside. All poses in one CUDA launch (or a numba prange). CPU and GPU give the same answers.
Findings.
Caveats. FCL, Coal and PyBullet are timed through their Python bindings, one pose per call (a few µs of overhead per pose); the GPU methods batch all 2000 poses. The Warp collision kernel tests every triangle of A against B's BVH, so it scales with A's faces. FCP's collision samples are the side-surface ring vertices: a penetration shallower than their spacing can be missed. The ring tables cost 0.1–0.3 s per object to build (Embree's BVH: about 1 ms), paid once per object, not per query. GPU: a GTX 1650, which is small.