Wenn Sie eine Physik-Engine in einem Spiel verwenden (z. B. Bullet), müssen Sie normalerweise für jedes Objekt einen Kollisionsspielraum definieren. Ich bin ein Anfänger in der Spieleentwicklung und verstehe den Zweck einer Kollisionsspanne nicht.
Mein grundlegendes Verständnis ist, dass wenn Sie zwei Objekte mit jeweils einem Kollisionsrand von 0,01 haben würden, eine Kollision erkannt würde, wenn sich die beiden Kollisionsränder berühren, so dass der Abstand zwischen den beiden Objekten tatsächlich 0,02 beträgt.
Aber warum nicht einfach den Kollisionsspielraum auf 0 setzen und eine Kollision erkennen lassen, wenn die tatsächlichen Oberflächen der beiden Objekte kollidieren? So funktioniert Physik in der Realität.
Eine Vermutung ist die folgende. Wenn ein Würfel einen Rand von 0,01 hat, wird eine Kollision erkannt, wenn ein Teil eines anderen Objekts zwischen 0 und 0,01 von der Objektoberfläche entfernt ist. Dies gibt dem Simulationsraum Raum für Fehler, so dass, wenn es den Punkt "verfehlt", an dem das Objekt den Kollisionsrand des Würfels passiert (weil der Simulationsschritt lang ist), es noch Zeit hat, eine Kollision zu erkennen, wenn sich das Objekt dann nähert die Oberfläche des Würfels innerhalb des Randes von 0,01. Andernfalls, wenn die Ränder Null sind und eine Kollision von der Simulation übersehen wird, kann es vorkommen, dass zwei feste Körper denselben Raum einnehmen, was zu Problemen führen kann.
Ist diese Vermutung richtig? Oder gibt es einen anderen Grund?
Vielen Dank!
quelle
Antworten:
Es gibt drei Gründe, warum in Physiksimulationen Kollisionsränder existieren können.
Wie Sie vorgeschlagen haben, gibt eine Kollisionsspanne der Physik-Engine Raum für Fehler beim Erkennen von Kontakten und beim Auflösen von Kontakten vor dem tatsächlichen Eindringen. Dies hilft beim Auftreten von Realismus, da Objekte nicht sichtbar durch den Boden stechen usw. Hier gibt es Nuancen für die Berechnung der Schwelle, wenn Kontaktbeschränkungen während des Lösens eine Baumgarte-Stabilisierung anwenden, um die Trennung von Körpern zu unterstützen.
Wie DMGregory feststellt, können Ebenen oder Dreiecken Kollisionsränder hinzugefügt werden, um Grundelementen , die mathematisch unendlich dünn sind, eine beliebige Dicke zu verleihen und sie effektiv in ein Volumen umzuwandeln .
Vielleicht wichtiger ist, dass viele Kollisionserkennungs-Engines den Gilbert-Johnson-Keerthi- Algorithmus (GJK) verwenden, um eine konvex-v-konvexe Kollisionserkennung durchzuführen. Dieser Algorithmus ist effizient bei der Kollisionserkennung zwischen disjunkten Paaren - auch wenn sie sehr nahe beieinander liegen. In dem Moment, in dem sich die beiden konvexen Formen tatsächlich überlappen, steigen die Kosten des GJK-Algorithmus dramatisch an. Um einen effektiven Kontaktpunkt zu erzeugen, muss außerdem der Expanding Polytope Algorithm (EPA) ausgeführt werden, was noch kostspieliger ist. Infolgedessen erzeugen viele Physik-Engines (Havok, Bullet) eine Hülle um die konvexe Hülle, die normalerweise als Kollisionsrand oder konvexe Hülle bezeichnet wird .
Erwin Coumans, antwortet der Autor Kugel einige Fragen hier einen Überblick unter:
quelle