670 likes | 769 Views
Pathfinding - World Representation. aus: artificial intelligence for games. WS 2011/12 Softwaretechnologie II: Simulation und 3D Programmierung Dozent: Prof. Dr. phil. M. Thaller Referent: Marcel Schotten. Inhalt. World Representation Tile Graph Dirichlet Domain Points of Vibility
E N D
Pathfinding-World Representation aus: artificialintelligenceforgames WS 2011/12 Softwaretechnologie II: Simulation und 3D Programmierung Dozent: Prof. Dr. phil. M. Thaller Referent: Marcel Schotten
Inhalt • World Representation • Tile Graph • Dirichlet Domain • Points ofVibility • Polygonal Meshes • CostFunctions • Path Smoothing • Improving on A*
Quantization/Localization Geometrie <-> Graphen • Quantization: • Die Möglichkeit, sowohl die Position des Spielers, als auch die der Objekten, in Knoten eines Graphen zu wandeln. • Localization: • Bei der Bewegung eines Spielers auf den generierten Weg des Pathfinders, müssen die Knoten des Plans in die verschiedenen Positionen im Spiel umgewandelt werden können.
Darstellung der Welt • Grund: • Eine Spielewelt besteht aus geometrischen Formen, doch der Pathfinder basiert auf einem Graphen aus Knoten und Verbindungen. • => Umsetzung von der Geometrie und den Bewegungsmöglichkeiten, zu Knoten und Verbindungen wird benötigt. • Ansatz: • Die Spiele-Welt wird aufgeteilt über Aufteilungs-Modelle • Wichtige Eigenschaften: • Quantization/Localization; Generation; Vailidity
Generation • Möglichkeit durchgehenden Freiraum in Regionen und Verbindungen aufzuteilen. • Eine gewisse Anzahl der Methoden sind standardisiert. • Aufteilung in manuell oder algorithmisch: • Manuell -> bessere Ergebnisse, kann zuweilen auf das jeweilige Level abgestimmt werden. • mostused: Dirichlet Domain. • Algorithmisch -> einfacher da automatisch. • Most used: tilegraph, pointsofvisibility, polygonal mesh.
Vailidity I • Befasst sich mit der Gültigkeit des vom Pathfinder generierten Plan. • Dem Charakter muss es ermöglicht werden, sofern es im Plan inbegriffen ist, von einem beliebigen Punkt im Knoten A, zu einem beliebigen Punkt im Knoten B zu reisen. • Ist dies nicht möglich ist der Plan nutzlos und somit ungültig. • Resultat: Ein Aufteilungs-Modell ist nur dann gültig, wenn alle Punkte in zwei mit einander verbundenen Regionen erreicht werden können.
Definition • Ehemalige Spiele in 2D basierten auf diesem Modell. Heute werden die Platten dazu benutzt Gitter zu erstellen, auf denen 3D-Modelle platziert werden können. Diese Gitter werden dann in Graphen umgewandelt. • Meist genutzten Formen sind Quadrate. • Aufteilungs-Modell: • Knoten repräsentieren die Platten der Spielwelt.// • Jede Platte hat eine offensichtliche Menge an Nachbarn.// • Verbindungen bestehen zwischen unmittelbaren Nachbarn.
Quantization//Localization • Schneller Prozess • Im Fall eines Square-Grids, werden die x- und z-Koordinaten des Charakters benutzt um festzustellen, in welchem Quadrat er sich gerade befindet: tileX = floor(x / tileSize) tileZ = floor(z / tileSize) • Floor() gibt eine Funktion an, die den höchsten Integer-Wert zurückgibt, die kleiner-gleich seines Arguments ist. • tileX und tileZindentifizieren die Platte innerhalb des Graphen. • Der Repräsentationspunkt der Platte (meistens Mittelpunkt) um einen Knoten ist die Position im Spiel.
Generation//Validity • Automatische Generierung in Echtzeit • Viele Spiele erlauben das Blocken von einzelnen Platten • Der Graph gibt somit keine Verbindung zu diesen gesperrten Platten zurück und es wird vom Pathfinder nicht versucht, durch sie hindurch zu gehen. • Validity: • Platten werden entweder komplett geblockt oder werden leer gelassen. Werden einzig die leeren Platten mit einander verbunden so ist der Graph gültig. • Sind die Graph-Knoten teilweise geblockt, ist der Graph vielleicht ungültig, das liegt aber an der Form der Blockade.
Usefullness • Die Darstellungsform die am einfachsten zu regenerieren ist => automatisch eine hohe Anzahl an Platten die dem Pathfinder eine Menge Arbeit machen. • Wird nun ein vom Pathfinder zurückgegebener Plan auf einen Graphen gezeichnet, so wirkt dieser blockiert und ungleichmäßig, was die Bewegung des Charakters „strange“ wirken lässt.
Definition//divisionscheme • Auch ‚voronoirpolygon‘ genannt. Bezeichnet die Region um einen von vielen Quellpunkten, wessen inneres aus allem besteht, welches näher zum Punkt liegt als anderes. • Division Schemes: • Characteristic Point: assoziierter Punkt für die Knoten. • Die Quant. benutzt Platz um alle Lokalisierungen der Dirichlet Domain eines Punkte in einen Knoten zu speichern. • Für die Bestimmung der Position im Spiel, muss der Characteristic Point gefunden werden, der am nahe liegensten ist.
Dirichletdomains II • Man stelle sich die ‚dirichletdomains‘ als eine kegelförmige Region vor, die nach unten von den Quell-Punkten hinweg geht. Auch hierbei entstehen einzelne Problematiken: • Grund-Idee wurde erweitert um ‚fallofffunctions‘ wodurch manche Knoten einen größeren Zug mit sich bringen als Andere in der Übertragungsphase. • => weighteddirichletdomain • Jeder Punkt hat einen assoziierten Breite-Wert der die Größe des Kegels kontrolliert. • Wird dieser Wert verändert, verändert sich auch die Erweiterung des Kegels.
Dirichletdomains ii.2 • Dient zur Visualisierung der Problematik der manuellen Änderung der Breite-Werte der Quellpunkte
Dirichletdomains ii.3 • Verbindungen werden zwischen angrenzenden Domänen gezogen. • Die Vorlage für diese Verbindungen findet man in den mathematischen Strukturen des Voronoi Diagramms: • Delaunay triangulation • Ecken sind die Verbindungen im Graphen. • Scheitelpunkte sind die Characteristic Points der Domäne.
Dirichletdomains iii • Quantization//Localization: • Quant. -> naheliegender Characteristic Point. • Lok. -> ebenfalls naheliegenden C.-Pukte. • Suche ist zeit konsumierend (O(n), wobei n die Anzahl der Domänen ist). => partitionierende Algorithmus erlauben alleinigen Bezug auf naheliegende Punkte.
Dirichletdomains iv • Validity: • Dadurch das verschiedene Formen erstellt werden, besteht die Möglichkeit das das Reisen zwischen zweier Domänen über eine dritte Domäne führt, die eventuell vom Pathfinder nicht aufgeführt wird und dadurch unpassierbar wird. • => Probleme folgen: Der Graph ist ungültig. • Usefulness: • Oft genutzt, Vorteil des einfachen Programmierens (automatische Generierung), einfache Änderungen, es ist möglich die komplette Struktur zu ändern.
Points ofvisibility I • Definition:PoV besteht aus einem Weg, bestimmt und bestehend aus Beugungspunkten an verschiedenen gewölbten Scheitelpunkten der Umgebung. • Der Unterschied zwischen 2D und 3D liegt bei der Erscheinung der Beugungspunkte: • 2D nur auf den gewölbten Scheitelpunkten • 3D auf den Scheitelpunkten oder auf gewölbten Polygonen • Festlegung durch ‚characteristicpoints‘, die für die Geometrie ausgerechnet werden können, indem selbige minimal erweitert und anschließend ausgerechnet wird, => Ecken der neuen Geometrie.
Points ofvisibility ii • Knoten = Beugungspunkte im kürzesten Pfad. • Anzahl der Punkte im normalen Game Level sind zu groß: • Einfachere Version: Die Beugungspunkte verwenden, wo sich die Geometrie am meisten verändert. • => können von der Kollisions-Geometrie verwendet werden • Anschließend werden die Punkte als Knoten für den Graphen genutzt. • Verbindungen entstehen durch Strahlen, die zwischen den Knoten hin und her geworfen. Treffen sie auf keine Hindernisse oder Geometire, besteht eine Verbindung. • Durch diese Verbindung erhält diese Teilungsmöglichkeit ihren Namen, da man von einem Punkt aus, einen oder mehrere Punkte sehen kann.
Points ofvisibility iii • Quantization//Localization//Vailidity: • ‚PoV‘ ist Teil der Darstellung der ‚dirichletdomains‘. • Wenn die ‚dirichletdomains‘ noch dazu benutzt werden, die Punkte in Knoten zu wandeln, kann es geschehen, das sich Punkte, die mit einander verbunden sind, nicht erreichen können. • Dadurch wird auch der Graph dieser Methode unbrauchbar, genauso wie bei den dirichletdomains.
Points ofvisbility iv • Usefulness: • Beliebte Methode zur automatischen Generierung von Graphen. • Aber das Ergebnis ist die Mühe nicht wert: • Viele Korrekturen müssen per Hand eingegeben werden, was dazu führt das die eigentliche Generierung soweit aufgebrochen wird, das es nicht mehr die ursprüngliche Form aufweist. Der Autor schwört für die automatische Variante auf die ‚polygonal meshes‘ und für die manuelle Variante auf die ‚dirichletdomains‘.
Definiton • Die grafische Struktur die sich hinter dieser Methode befindet, dient als Basis für die Repräsentation durch den Pathfinder. Jedes Level besteht aus Polygonen, die wieder mit anderen verbunden sind, ob nun eine KI vorhanden ist oder nicht. • Trotz fehlender KI müssen die Verbindungen der einzelnen Regionen vom Designer spezifiziert werden.
Quantization//Localization • Benutzung von Boden-Polygone als Regionen => Knoten im Graphen. • Graph basiert auf der Maschen-Geometrie des Levels => nav‘ mesh • Knoten sind dann verbunden, wenn 2 Polygone sich eine Kante oder Ecke teilen, dadurch entstehen bei anderen Formen wie dem Dreieck oder dem Quadrat, eine Vielzahl von Verbindungen. • Nav‘ mesh: Involvierung spezieller Bezeichnungen von Polygonen als Boden, für die Möglichkeit des Einbringen von Sound-Effekten oder Haftungs-Unterschiede, beim Auslösen des Boden-Polygons.
Quantization//Localization.2 • Der Wert einer Position wird in einen Boden-Polygon umgewandelt der den selbigen Wert enthält. • Welches Polygon ist das Richtige? • Vorrausetzung: Wir wissen wo sich der Charakter vorher befunden hat (sprich: auf welchem Frame). Wenn wir das wissen, können wir davon ausgehen, das er sich im gleichen oder einem benachbartem Frame aufhält. => Diese Knoten werden als erstes getestet. • Die ‚localization‘ kann jeden Punkt des Polygons benutzen, aber normal wird der geometrische Mittelpunkt genutzt.
Validity • Validity//Usefulness • Regionen die mit den ‚polygonal meshes‘ erstellt worden, könnten problematisch sein. • Grund: • Bei verbunden Dreiecken zum Beispiel, kann das direkte Reisen gegebenenfalls zu Kollisionen führen. • Die bessere Variante ist die Verbindungsherstellung über sogenannte Knoten die als ‚portals‘ definiert sind. (später)
usefulness • Gehen wir von dieser Problematik aus, benötigen wir weitere Prozesse. • Nicht alle ‚locations‘ in einem Boden-Polygon sind besetzt (manche sind zu nah ein einer Mauer), deshalb wird ein wenig Zubehör benötigt: • Hat eine Beeinflussung der generierten Verbindungen durch geteilte Ecken und Kanten. • => Meisten Probleme geben komplexe, gewölbte Bereiche ab: z.B. Türen! • Hier profitieren Spiele von erweiterten Bewegungsmöglichkeiten für die verschiedenen geometrischen Formen.
Edgesasnodes • Unterschied: Verbindungen laufen nicht mehr über Standorte in den Boden-Polygonen ab, sondern deren Kanten dienen als Knoten. Somit generiert der Pathfinder einen Weg durch die Polygone über die Kanten. • => Meist genutzt wird dies in der ‚portal-basedrendering‘; dort sind Knoten Portale und eine Verbindung besteht zwischen allen Portalen die in Sichtweite sind. • Bei den ‚polygonal meshes‘ fungieren die Ecken wie die Portale und haben ihren eigenen Knoten. • Vorteil: eine dynamische Platzierung der Portale auf den Kanten und einen optimierten Weg durch den Pathfinder. • Dies ist eine Art erweiterte Wegfindung!
Costfunctions • Die Kosten der kürzesten Verbindung, repräsentiert die Distanz. • Je höher die Kosten um so weiter ist die Distanz. • Die Kosten für die schnellste Verbindung, die Zeit. • Distanz != Zeit, es ist schneller 10m zu laufen, als 10m zu klettern. • Es können alle Arten von Sorgen zu den Kosten des Graphen hinzufügen. • Bsp.: RTS-Games-> verschiedene Verbindungen werden teurer wenn jemand dem feindlichen Feuer ausgesetzt ist oder er sich in einem gefährlichen Terrain bewegt. • Der richtige Weg wäre dann der mit den geringsten Kosten.
Costfunctions ii • Meistens sind die Kosten eine Mischung aus unterschiedlichen Bedürfnissen und es können verschiedene Kosten für verschiedene Charakter entstehen. • Mögliche Anwendung: • Eine Aufklärungs-Truppe besteht aus Charakteren die eine erhöhte Interesse an der Sichtbarkeit und der Geschwindigkeit haben. • Eine schwere Artillerie hingegen hat eine Interesse in der Schwierigkeit der Umgebung. • Dies nennt man ‚tacticalpathfinding‘
Definition • Ein Weg der von einem Knoten zum anderen führt, kann ungleichmäßig erscheinen. • Einige Darstellungsformen für die Spielewelt sind anfälliger für dieses Phänomen als andere. • ‚Points ofVisibility‘ Verbindungen wirken schon sehr geglättet wohingegen ‚tile-basedgraphs‘ extrem zur Ungleichmäßigkeit tendiert. • Wenn das Path Smoothing also nicht durch das steuernde Verhalten des Charakters stattfindet, ist der Gebrauch eines Path SmoothingAlgorithm unerlässlich.
The algorithm • Ausgehend von der Gültigkeit: • -> Neuer Pfad=outputpath; bekommt Start-Knoten. • -> Start und Ende sind im Input sowie im Output Path gleich. • -> 3. Knoten aus geht ein Strahl reihenweise alle Knoten bis zum Endknoten ab. • -> Wenn ein Strahl nicht durchkommt wird der vorherige Knoten vom Input Path zum Output Path hinzugefügt. • -> Der Strahl wird vom nächsten Knoten im Input Path fortgesetzt. • Wenn der Endknoten erreicht ist, wird dieser dem Output Path hinzugefügt. • Der so entstandene Output Path ist der zu folgende Weg.
The algorithm ii DefsmoothPath(inputPath): #Ifthepathisonlytwonodeslong, thenwecan‘t smooth #it, so return iflen(inputPath) == 2: returninputPath #Compile an outputpath outputPath = [inputPath[0]] #Keep trackofwhereweare in theinputpathwestartat #2, becauseweassumetwoadjacent #nodes will pass theraycast inputIndex = 2 #Loop untilwe find the last item in theinput whileinputIndex < len(inputPath)-1: #Do theraycast if not rayClear(outputPath[len(outputPath)-1], inputPath[inputIndex]): #The raytextfailed, addthe last nodethatpassedtotheoutputlist outputPath += inputPath[inputIndex-1] #Considerthenextnode inputIndex++ #We‘vereachedthe End oftheinputpath, addthe end nodetotheoutputandreturnit outputPath+= inputPath[len(inputPath)-1] Return outputPath
Improving on A* Anhand des ‚hierarchicalpathfinding‘
Improvement • Da A*-Algorithmus eine effiziente Methode zur Berechnung des Wegs ist, gibt es verschiedene Methoden um einzelne Wünsche abzudecken. • Gerade in Spielen mit teils mehreren Millionen Plätzen ist es schonender für den Speicherplatz, den A*-Algorithmus zu erweitern: • Hierarchicalpathfinding: viele verschiedene Pläne müssen in kurzer Abfolge erstellt werden • Dynamic pathfinding: erhöht die Geschwindigkeit der umplanung. • Andere Variationen verringern dramatisch den Speichergebrauch zur Wegfindung, auf Kosten der Performanz.
Hierarchicalpathfinding • Aufgebaut in mehrere Abschnitte: • Angefangen mir einem Abstrakten Plan: • Wir wollen nach London zum Büro von einem Freund • Dieser Plan wird in viele kleinen Schritte aufgeteilt: • Vom eigenem Haus zum Auto, vom Auto zum Flughafen, usw. • Diese einzelnen Schritte werden auch wieder aufgeteilt: • Von der Couch zum Auto-Schlüssel, damit dann zur Haustür,… • Auch diese Schritte werden aufgeteilt: • Von der Couch an dem Wohnzimmer-Tisch vorbei und dann über den Teppich zur Anrichte, zum Behälter mit den Schlüsseln • So kann jeder Schritt im einzelnen bearbeitet und überschaut werden. Und das Wegfindungsproblem für verschiedene Fälle wird aufgeteilt.
The hierarchicalpathfindinggraph • Um das ‚hierarchicalpathfinding‘ für A* zu unterstützen, muss die Informations-Struktur für den Graphen abgewandelt werden. • Der Umgang mit Knoten und Verbindungen ist unterschiedlich zu denen aus den regulären Graphen.
Nodes • Plätze/Orte zusammengefasst -> Cluster • Bsp.: Alle Plätze in einem Raum gehören zu einer Gruppe an • Für den abstrakten Plan, zählt dieser als ein Punkt! • Dieser Vorgang kann nun beliebig oft wiederholt werden. Die Knoten für alle Räume können zu einer Gruppe zusammen gefasst werden usw. • => Wegfindung: Ein Knoten auf einer niedrigeren Stufe des Plans muss zu einem Knoten einer höheren Stufe des Plans konvertierbar sein. • Eine typische Implementation zeichnet diese Schritte auf.