THREE.JS / FOUNDATIONS 216

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 Rapier Preparing contact matrix

Loading the official Rapier runtime and preparing four policy lanes...

physics
-
tick
-
selected
-
pair now
-
starts
-
wall hooks
-
passed wall
-
step ms
-
Experiment controlssame initial state

Select a lane to inspect its contact graph, solver policy, and collision-event result.

Contact policy contractunder the Three.js view
world.step(queue, hooks)events + custom filter
setCollisionGroups()narrow-phase filtering
setSolverGroups()force/impulse filtering
ActiveEvents.COLLISION_EVENTSstart/stop events
world.contactPairsWith()contact graph inspection

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

Lane readoutnone

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.

THREE.JS FOUNDATIONS LAB