In einer Physik-Engine, die ich (zum Lernen) mit love-2d entwickle , habe ich Kollisionsauflösungen folgendermaßen implementiert:
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
...
Wie Sie am Ende der GIF-Animation sehen können, kommt es zu einem FPS-Abfall, wenn alle Collider fast über einem statischen Objekt geerdet sind.
Dies liegt daran, dass die Anzahl der Kollisionsauflösungen zunimmt, wenn Objekte mehr Zeit damit verbringen, sich zu berühren, während sie sich niederlassen. Viele der Berechnungen sind jedoch "nutzlos", da sich Objekte bereits in stabilen Positionen gegeneinander niedergelassen haben.
Was ist die beste Vorgehensweise (hoffentlich ohne Abschluss in Physik), um diese "nutzlosen" Kollisionserkennungen zu vermeiden?
Bearbeiten: DMGregory-Hinweise akzeptiert und zu diesem Ergebnis kommen (noch nicht optimal)
(Rot = statisch, Blau = aktiv, Grün = schlafend)