In un motore fisico che sto sviluppando (per l'apprendimento) usando love-2d , ho implementato risoluzioni di collisione in questo modo:
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
...
Come puoi vedere alla fine dell'animazione GIF, c'è un decadimento FPS quando tutti i collider sono quasi a terra su un oggetto statico.
Questo perché il numero di risoluzioni di collisione aumenta man mano che gli oggetti trascorrono più tempo a toccarsi mentre si depositano. Tuttavia, molti dei calcoli sono "inutili" perché gli oggetti si sono già sistemati in posizioni stabili uno contro l'altro.
Qual è la migliore pratica (si spera che non richieda una laurea in fisica) per evitare questi "inutili" rilevamenti di collisioni?
Modifica: accetta suggerimenti DMGregory e arriva a questo risultato (non ancora ottimale)
(Rosso = statico, blu = attivo, verde = inattivo)