Collision Detection
Collision Detection • Jedes Objekt im Spiel kann mit einem anderen kollidieren viel zu tun • 100 Objekte 100.000 Checks • Nur die Objekte checken, die „wahrscheinlich“ kollidieren 1. CoarseCollisionDetection (Grobe Kollisionserkennung) 2. Fine CollisionDetection (Feine Kollisionserkennung)
Coarse CollisionDetection(Grobe Kollisionserkennung) • Eine Liste mit notwendigen Checks erstellen • So groß wie nötig, so klein wie möglich • 2 Herangehensweisen: BoundingVolumes und Spatial Data Structures
Bounding Volume • Ein Gebiet im Raum, der ein Objekt enthält • der Einfachheit halber meistens Sphäre oder Box
Bounding Volume Hierarchies (BVH) • Wenn sich die Bounding Volumes von zwei Objekten berühren oder überlappen, wird eine „Fine Collision Detection“ durchgeführt • Vorteil: Drastische Erhöhung der Geschwindigkeit • Nachteil: Es müssen immer noch alle Objekte gecheckt werden • Lösung: Bounding Volume Hierarches
Bounding Volume Hierarchies • Eine Bounding Volume Hierarchy enthält alle Bounding Volumes ihrer Objekte in einer Baumstruktur • Jedes Objekt hat seine eigene Bounding Volume ganz unten im Baum • Die BoundingVolumes der einzelnen Objekte sind mit Parent Nodes iverbnuden, von welchen jeder seine eigene Bounding Volume besitzt
Bounding Volume Hierarchies • Wenn die Bounding Volumes von zwei Knoten im Baum sich nicht berühren, dann können keine Objekte, die von diesen beiden Knoten abstammen, sich berühren • Durch negatives Testen von zwei Bounding Volumes, die hoch in der Hierarchie stehen, können, ersparen wir uns das Checken all der Objekte, die von den beiden Knoten abstammen. • Ein Algorithmus generiert eine Liste aller Objekte, die sich berühren könnten
Bottom-up • Für einzelne Paare wird ein Parent Node erstellt, welcher die das Objektpaar in der Liste ersetzt. • Das geht so weiter, bis die Liste nur noch aus einem Knoten besteht.
Top-down • Die Objekte in der Liste werden immer wieder in zwei Gruppen aufgeteilt, bis jede Gruppe und Untergruppe nur noch zwei Objekte enthält.
Insertion • Die einzig sinnvolle Methode, da sie die Hierarchie anpassen kann, ohne sie neu bauen zu müssen! • Bei jedem Knoten wird das Child selektiert, das am besten zum zuzufügenden Objekt passt. • Ein Ast kann durch einen Parent Node ersetzt werden, der zwei Objekte enthält.
Die 3 Methoden • Jede der 3 Methoden hat viele Variationen. • Die Bottom-up-Methode sucht nah aneinanderliegende Objekte, um sie zu gruppieren • Die Top-down-Methode versucht Gruppen aufzuteilen • Die Insertion-Methode muss das Child im Baum wählen, welches am Besten für ein Objekt geeignet ist • Optimale Ergebnisse erfordern viel Fine-Tuning und Experimentieren
Sub-Object Hierarchies • Manche Objekte haben seltsame, unregelmäßige Formen. • Es ist schwierig, gut passende Bounding Volumes für diese Objekte zu schaffen. • Deswegen ist es möglich, multiple Bounding Volumes für ein Objekt zu nutzen, die in einer Hierarchie arrangiert werden. • Dadurch können wir weiterhin simple Checks für simple Bounding Volumes bei einem komplizierten Objekt durchführen.
Spatial Data Structures • Eine Bounding Volume HierarchiefasstObjektezusammen, abhängig von ihrerrelativen Position und Größe • WennsicheinObjektbewegt, verändertsichauch die Hierarchie. • Eine Spatial Data Structure istgebunden an die Welt, sieverändertihreStrukturnicht. • Das KonstruiereneinersolchenStrukturistsomitwesentlicheinfacher.
Spatial Data Structures • OftmalswirdeineKombination von beidenTechnikenbenutzt. • Auchwennkeine Bounding Volume Hierarchies benutztwird, werdentrotzdemgerne Bounding Volumes um jedesObjektbenutzt.
Binary Space Partition Tree (BSP) • Ein Binary Space Partition Tree verhältsich so ähnlichwieeine Bounding Volume Hierarchy. • AnstattBoundung Volumes benutztjederKnotenim BSP eineFläche (Plane), welchealleGebieteimRaum in zweiaufteilt. Jede Plane hat zweiKindknoten, einerfürjedeSeite der Plane.
Binary Space Partition Tree • Objekte auf der einenSeitewerdenzumeinenKindknotenhinzugefügt, Objekte auf der anderenzumanderenKindknoten. • Objekte, die dieFlächekreuzen, werdenzubeidenKindknotenhinzugefügt
Binary Space Partition Tree • Die einzigenKollsionen, die auftretenkönnen, sind die zwischenObjekten am gleichen Zweig imBaum. • Wenndieser Zweig mehralseinObjektenthält, werdenallePaarkombinationenzum Fine Collision Detector gesendet
Oct-Trees & Quad-Trees • Ähnlichwie Binary Space Partiotioning und Bounding Volume Hierarchies • Quad-Trees werdenfür 2-dimensionale Umgebungen (oder 3-dimensionale, beidenen die meistenObjekte auf demBodenagieren) benutzt, Oct-Trees für 3-dimensionale Umgebungen
Oct-Trees & Quad-Trees • Ein Quad-Tree bestehtausmehrerenKnoten, jedermit 4 Descendents • EinKnotenteilt den Raum in 4 Areale auf, die sich an einemPunktkreuzen • Ansonstenähnlich der BSP/BVH
Grids • Ein Grid istein Array von Räumen, in denensichverschiedeneObjektebefindenkönnen. • DiesmalkeineBaumdatenstruktur, die Position kanndirektbestimmtwerden
Grids • WennjedeZellealleObjekteenthält, die diejeweiligeZellestreifen, kann die Liste der möglichenKollisionensehreinfacherstelltwerden: • 2 Objektekönnennurdannkollidieren, wennsie die gleicheZelleim Grid streifen • EswerdenalleZellenbeachtet, welchemehrals 1 Objektenthalten
Grids • FüreinObjekt, das so großwieeineZelleist, müssen maximal 4 von möglichen 8 Zellengechecktwerden. • EinObjekt, das 4-mal so großtwieeineZelleist, müssen 16 von möglichen 24 Zellengechecktwerden, usw. • FürsehrgroßeObjekteeineUnmenge an Aufwand! • Lösung: Multi-Resolution Map
Multi-Resolution Maps • Eine Multi-Resolution Map isteineGruppeaus Grids mitzunehmendenZellgrößen • Objektewerdennurzueinem der Grids hinzugefügt, je nachdemwiegroß das Objektist • Jedes Grid hat eineZellgröße die 4-mal so großistals die des vorherigen Grids
Multi-Resolution Maps • Der Algorithmuskreiertfürjedes Grid einemöglicheKollisionzwischenjedenObjekten in der gleichenoder in benachbartenZellen (maximal 3) • Zusätzlichwird das ObjektmitallenObjekten in allenZellen in den Grids mit den größerenZellengecheckt
Contact Generation
BerührungennachPrioritäten • WennwirKontaktegenerierenkönnen, die in dieserListehöhersind, könnenwir die Kontakteweiteruntenignorieren • Am wichtigstensind Point-Face und Edge-Edge-Kontakte
Contact Data
Primitive CollisionAlgorithms • EinAlgorithmussuchtnachKontakten und generiert Structures mitKontaktdaten • Algorithmenkönnengarkeinen, einenodermehrereKontaktezurückgeben, die z. B. als Array ausgegebenwerdenkönnen
Kontaktbedingungen • Sphäre-Sphäre: Die EntfernungihrerMittelpunkteistkleinerals die SummeihrerRadien • Sphäre-Fläche: Die EntfernungvomMittelpunkt der SphärezurFlächeistkleinerals der Sphärenradius • Box-Fläche: (kannmehralseinKontakthaben): Einerodermehrere Vertices der Box liegen hinter der Fläche
Fazit • Wirhabennur an der Oberfläche der Thematikgekratzt • Die Physik-Engine einesprofessionellen Spiels istwesentlichkomplexer • Collision Detection und Contact Generation nehmenvielZeit in Anspruch • VielOptimierungsarbeit und Experimentierennotwendig, bisoptimaleErgebnisseerzieltwerden
Vielen Dank!