# Collision-chain comparison — preliminary, 2026-09-21

Public reproduction note: archive aliases and `SIMCOMPARE_ROOT` are portable placeholders; use your own archive and checkout locations. Private deployment identifiers are omitted.

Four stacks: Isaac Sim 6.1 CPU PhysX, Newton 1.5.2 / MuJoCo-Warp 3.11,
MuJoCo CPU 3.11, Genesis 1.4.1. One second, primary display dt=0.0005 s.
Raw baseline/repeat dt=0.001 s and half-step evidence retained locally in
state-of-robot-aug-2026/experiments/simcompare/output/archive-rigid/multi-01.

Identical common manifest: sphere radius 0.03 m, mass 0.15 kg, x=-0.18,
y=-0.012, z=0.03, vx=1.4 m/s, wy=1.4/0.03 rad/s. Cube side 0.06 m,
mass 0.1 kg, centre (0,0,0.03). Equilateral triangular prism edge 0.09 m,
height 0.06 m, mass 0.1 kg, centre (0.1,0.02,0.03). Both initially still.
Gravity 9.81 m/s², nominal sliding friction 0.3. No explicit rolling or
torsional friction, no policy, no randomized physical initial conditions.

Prism mesh authored around its centroid. Analytic inertias explicitly set
and read back from each stack; match to float precision. CPU and Newton
use common MJCF, Genesis imports each body from the same MJCF, PhysX uses
USD sphere/cube and convex-hull mesh. This is NOT a full cooked-shape parity
audit. Solver collision margins, contact manifolds and contact laws differ.

PhysX TGS: 100 position / 1 velocity iterations, no damping/sleeping,
contact offset 1 mm, rest offset zero, restitution zero. MuJoCo and Newton:
Euler, Newton solver, elliptic cone, 100 iterations, tolerance 1e-10,
solref (0.01,1), solimp (0.99,0.999,0.001,0.5,2). Genesis uses elliptic
friction, 100 iterations, tolerance 1e-10, contact time constant 0.01 s.
These are not physically equivalent contact parameterizations.

All force samples correspond to the following integration step; positions
are pre-step. Forces world-frame SI, per-body contact plus gravity. PhysX
normal/friction impulse divided by dt, with separate native anchors.
All 12 body traces at 0.5 ms pass max ||mΔv−ΣFdt|| < 5e-6 N·s.
Newton cube/prism at 1 ms reach 6.10e-6 / 6.17e-6 N·s and remain flagged.
This check verifies telemetry consistency, not accuracy or angular dynamics.

Baseline 1 ms repeats: PhysX, CPU MuJoCo, Genesis frames exactly equal.
Newton max positional path spread sphere/cube/prism: 1.201/0.025/0.020 mm.
Half-step changes are nontrivial, especially for the rolling sphere. Only
one refinement has been run; convergence is not established. Last samples
are 0.999 s (1 ms) and 0.9995 s (0.5 ms), so endpoint differences include
that half-millisecond interval; stationary-object comparisons are less affected.

The primary replay is a measured configuration comparison, not hardware
ground truth, an engine accuracy ranking, or a throughput benchmark.
## Three-seed controls, completed

Twelve further runs, dt=0.0005 s, seeds 0/1/2, identical physical manifests.
Python random, NumPy, PYTHONHASHSEED and Genesis initialization seeded.
No random scene perturbations. No claim that these seeds control native GPU
nondeterminism; deterministic solvers need not use randomness at all.

PhysX, CPU MuJoCo and Genesis recorded frames exactly equal across all seeds.
Newton maximum pairwise path spread (sphere/cube/prism):
4.4033 / 0.8795 / 1.6998 mm. Prism endpoint spread is 1.3160 mm.
Cube endpoint mean separation PhysX vs other engines: 18.70–21.27 mm;
among the other engines: 2.58–4.27 mm. See seed-metrics.json for all pairs.
One seeded Newton prism trace reaches momentum residual 5.653e-6 N·s,
exceeding the unchanged 5e-6 tolerance. It is not excluded from the spread
analysis and is flagged here. This does not invalidate pose recording, but
its force samples should not be treated as fully audited.

Three observations do not estimate tail variability or prove a cause.
The baseline same-seed Newton repeat already varied, so changed seeds cannot
be singled out as the cause. Broader randomized scene robustness and contact
calibration are separate next experiments.
