collision detection
Post on 17-Feb-2016
52 Views
Preview:
DESCRIPTION
TRANSCRIPT
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“
kollidieren1. Coarse Collision Detection (Grobe
Kollisionserkennung)2. Fine Collision Detection (Feine
Kollisionserkennung)
Coarse Collision Detection(Grobe Kollisionserkennung)
• Eine Liste mit notwendigen Checks erstellen• So groß wie nötig, so klein wie möglich• 2 Herangehensweisen: Bounding Volumes 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 Bounding Volumes 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 Hierarchie fasst Objekte zusammen, abhängig von ihrer relativen Position und Größe
• Wenn sich ein Objekt bewegt, verändert sich auch die Hierarchie.
• Eine Spatial Data Structure ist gebunden an die Welt, sie verändert ihre Struktur nicht.
• Das Konstruieren einer solchen Struktur ist somit wesentlich einfacher.
Spatial Data Structures
• Oftmals wird eine Kombination von beiden Techniken benutzt.
• Auch wenn keine Bounding Volume Hierarchies benutzt wird, werden trotzdem gerne Bounding Volumes um jedes Objekt benutzt.
Binary Space Partition Tree (BSP)• Ein Binary Space Partition Tree verhält sich so ähnlich
wie eine Bounding Volume Hierarchy.• Anstatt Boundung Volumes benutzt jeder Knoten im
BSP eine Fläche (Plane), welche alle Gebiete im Raum in zwei aufteilt. Jede Plane hat zwei Kindknoten, einer für jede Seite der Plane.
Binary Space Partition Tree• Objekte auf der einen Seite werden zum einen
Kindknoten hinzugefügt, Objekte auf der anderen zum anderen Kindknoten.
• Objekte, die die Fläche kreuzen, werden zu beiden Kindknoten hinzugefügt
Binary Space Partition Tree• Die einzigen Kollsionen, die auftreten können, sind
die zwischen Objekten am gleichen Zweig im Baum.• Wenn dieser Zweig mehr als ein Objekt enthält,
werden alle Paarkombinationen zum Fine Collision Detector gesendet
Oct-Trees & Quad-Trees• Ähnlich wie Binary Space Partiotioning und Bounding Volume
Hierarchies• Quad-Trees werden für 2-dimensionale Umgebungen (oder 3-
dimensionale, bei denen die meisten Objekte auf dem Boden agieren) benutzt, Oct-Trees für 3-dimensionale Umgebungen
Oct-Trees & Quad-Trees
• Ein Quad-Tree besteht aus mehreren Knoten, jeder mit 4 Descendents
• Ein Knoten teilt den Raum in 4 Areale auf, die sich an einem Punkt kreuzen
• Ansonsten ähnlich der BSP/BVH
Grids• Ein Grid ist ein Array
von Räumen, in denen sich verschiedene Objekte befinden können.
• Diesmal keine Baumdatenstruktur, die Position kann direkt bestimmt werden
Grids• Wenn jede Zelle alle
Objekte enthält, die die jeweilige Zelle streifen, kann die Liste der möglichen Kollisionen sehr einfach erstellt werden:
• 2 Objekte können nur dann kollidieren, wenn sie die gleiche Zelle im Grid streifen
• Es werden alle Zellen beachtet, welche mehr als 1 Objekt enthalten
Grids• Für ein Objekt, das so groß
wie eine Zelle ist, müssen maximal 4 von möglichen 8 Zellen gecheckt werden.
• Ein Objekt, das 4-mal so großt wie eine Zelle ist, müssen 16 von möglichen 24 Zellen gecheckt werden, usw.
• Für sehr große Objekte eine Unmenge an Aufwand!
• Lösung: Multi-Resolution Map
Multi-Resolution Maps• Eine Multi-Resolution Map ist eine Gruppe aus Grids
mit zunehmenden Zellgrößen• Objekte werden nur zu einem der Grids hinzugefügt,
je nachdem wie groß das Objekt ist• Jedes Grid hat eine Zellgröße die 4-mal so groß ist
als die des vorherigen Grids
Multi-Resolution Maps• Der Algorithmus kreiert für jedes Grid eine mögliche
Kollision zwischen jeden Objekten in der gleichen oder in benachbarten Zellen (maximal 3)
• Zusätzlich wird das Objekt mit allen Objekten in allen Zellen in den Grids mit den größeren Zellen gecheckt
Contact Generation
• Berührungen nach Prioritäten
• Wenn wir Kontakte generieren können, die in dieser Liste höher sind, können wir die Kontakte weiter unten ignorieren
• Am wichtigsten sind Point-Face und Edge-Edge-Kontakte
Contact Data
Primitive Collision Algorithms• Ein Algorithmus sucht nach Kontakten und
generiert Structures mit Kontaktdaten• Algorithmen können garkeinen, einen oder
mehrere Kontakte zurückgeben, die z. B. als Array ausgegeben werden können
Kontaktbedingungen• Sphäre-Sphäre: Die Entfernung ihrer
Mittelpunkte ist kleiner als die Summe ihrer Radien
• Sphäre-Fläche: Die Entfernung vom Mittelpunkt der Sphäre zur Fläche ist kleiner als der Sphärenradius
• Box-Fläche: (kann mehr als ein Kontakt haben): Einer oder mehrere Vertices der Box liegen hinter der Fläche
Fazit• Wir haben nur an der Oberfläche der Thematik
gekratzt• Die Physik-Engine eines professionellen Spiels ist
wesentlich komplexer• Collision Detection und Contact Generation
nehmen viel Zeit in Anspruch• Viel Optimierungsarbeit und Experimentieren
notwendig, bis optimale Ergebnisse erzielt werden
Vielen Dank!
top related