← BlogDebugging War Stories· 5/5

Vehicles Are Passing Through Each Other — The Price of Confusing ORCA Avoidance with PhysX Collision

Vehicles drove straight through each other and through obstacles. A record of tracking down the bug — rooted in confusing two distinct collision concepts: ORCA proactive avoidance vs. PhysX rigid-body contact.

~4 min
debuggingcollisionPhysXORCAwar-story

Vehicles Are Passing Through Each Other

Something strange was happening in the ground vehicle simulation. Vehicles were passing straight through each other. They also drove through obstacles. Collision handling was clearly in place — so why were objects ghosting past one another?

Two Different Kinds of "Collision"

The key insight: this system has two distinct types of collision, and we had confused them.

Rendering diagram…
  • ORCA (proactive avoidance) — Multiple agents predict each other's velocities and maneuver early to avoid meeting. They sidestep before contact.
  • PhysX (physical contact) — If they actually make contact anyway, rigid bodies bounce off via the physics engine.

We believed "collision is handled," but we had only verified ORCA avoidance — never whether the PhysX contact colliders were actually active and working. They are completely separate layers.

The Real Causes of Passthrough

Digging in revealed multiple layers.

  • Collision geometry was too small — The collision Cube on vehicle chassis was smaller than the actual body geometry, so visually-touching vehicles were physically not touching at all.
  • Default collision radius was too small — The default avoidance radius (0.3 m) was tiny relative to vehicle size, allowing large vehicles to pass through each other.
  • No cumulative tracking — Because nothing was counting how many collisions occurred, passthroughs were silently ignored.

⚠️ "Avoidance works, so collision must too" is wrong — Watching ORCA sidestep gracefully and concluding "collision handling is complete" means that when avoidance actually fails and contact occurs, you get passthrough. ORCA proactive avoidance and PhysX contact must each be validated independently.

The Fix — and Fail-Loud

The fix required several changes: expanding vehicle chassis colliders to match actual geometry, raising the default radius to 1.5 m, and adding colliders to obstacles in procedural environments. And one more thing, most importantly:

💡 Count collisions and surface passthroughs as fail-loud — Collision was set up for cumulative tracking, and when passthrough (overlap) is detected, don't silently swallow it — fire an assert failure. That way, the next passthrough surfaces immediately. Rather than trusting that "no passthrough is occurring," measure it.

In a nutshell

📌 Vehicles passing through each other resulted from confusing ORCA (proactive avoidance) with PhysX (physical contact) and never validating the latter. Colliders smaller than the vehicle body, an undersized default radius, and the absence of cumulative tracking let passthroughs slip through silently. The two layers need separate validation, and collision should be counted so passthroughs are surfaced as fail-loud failures.

See standard test results with videos and verdict evidence on the imSim Portal.

View public results →