A contact can exist without a response.
Four identical worlds make Rapier's contact policy layers visible: a normal wall, collision-group filtering, solver-group filtering, and a custom contact hook all receive the same high-speed projectile.
Loading the official Rapier runtime and preparing four policy lanes...
- physics
- -
- tick
- -
- selected
- -
- pair now
- -
- starts
- -
- wall hooks
- -
- passed wall
- -
- step ms
- -
Select a lane to inspect its contact graph, solver policy, and collision-event result.
world.step(queue, hooks)events + custom filtersetCollisionGroups()narrow-phase filteringsetSolverGroups()force/impulse filteringActiveEvents.COLLISION_EVENTSstart/stop eventsworld.contactPairsWith()contact graph inspectionThe collision-group lane removes the pair before contact computation. The solver-group and hook lanes retain contact evidence while suppressing the normal impulse response. The event queue and contact graph are reported separately because they answer different questions.
Rapier is loading. The table will show contact-pair presence, event starts, hook calls, and projectile state.
Based on the official Three.js RapierPhysics addon surface and Rapier's advanced-collision, collision-group, collider, PhysicsHooks, EventQueue, and World API documentation. The comparison is a local learning instrument, not a universal networking or performance claim.