En un motor de física que estoy desarrollando (para aprender) usando love-2d , implementé resoluciones de colisión de esta manera:
FixedUpdate(dt) // I use fixed timestep
foreach collide c1 in allNotStaticColliders
c1.integartePhysic // i.e. apply gravitational force..
foreach collider c2 "near" c1 // "near"= I use spatial hashing
if collide(c1,c2)
resolve collision (c1,c2) // the heavy operation
collison callbacks c1
collison callbacks c2
...
Como puede ver al final de la animación gif, hay una disminución de FPS cuando todos los colisionadores están casi conectados a tierra sobre un objeto estático.
Esto se debe a que el número de resoluciones de colisión aumenta a medida que los objetos pasan más tiempo tocándose a medida que se asientan. Sin embargo, muchos de los cálculos son "inútiles" porque los objetos ya se han asentado en posiciones estables entre sí.
¿Cuál es la mejor práctica (es de esperar que no requiera un título en física) para evitar estas detecciones de colisión "inútiles"?
Editar: sugerencias DMGregory aceptadas y llegar a este resultado (aún no es óptimo)
(Rojo = estático, Azul = activo, Verde = durmiendo)