bench/shape.ae (PR #8): the sphere-against-capsule shape cast runs at 2.5x the reference's time (44.6 vs 18.0 ms per 100,000) and the overlap at 2x (12.2 vs 5.9 ms), while the distance layer's box-against-box cast and GJK sat at 1.3-1.5x (bench/distance.ae). The difference is the radius handling: both phases are one GJK call (distance.shape_cast, distance.shape_distance with use_radii) on one- and two-point proxies with radii.
To do: profile distance.shape_cast and shape_distance on radius proxies (the -finstrument-functions shim), compare the iteration counts with the reference's on the bench scene, and bring the radius paths to the 1.3-1.5x of the rest of the layer. The dynamics' contact and mover code call these constantly, so it matters before the solver lands.
bench/shape.ae(PR #8): the sphere-against-capsule shape cast runs at 2.5x the reference's time (44.6 vs 18.0 ms per 100,000) and the overlap at 2x (12.2 vs 5.9 ms), while the distance layer's box-against-box cast and GJK sat at 1.3-1.5x (bench/distance.ae). The difference is the radius handling: both phases are one GJK call (distance.shape_cast,distance.shape_distancewithuse_radii) on one- and two-point proxies with radii.To do: profile
distance.shape_castandshape_distanceon radius proxies (the-finstrument-functionsshim), compare the iteration counts with the reference's on the bench scene, and bring the radius paths to the 1.3-1.5x of the rest of the layer. The dynamics' contact and mover code call these constantly, so it matters before the solver lands.