3D Pathfinding Seminar „Computer Graphics / Aspects of Game Design“ – Vortrag vom 8. Juni 2006 Technische Universität München / Lehrstuhl für Computergrafik & Visualisierung (TUM 3D) Autor: Daniel Kastenholz ([email protected]) Betreuer: Jens Schneider ([email protected]) Rechtliche Hinweise This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 2.0 Germany License. To view a copy of this license, visit http://creativecommons.org/licenses/by-ncsa/2.0/de/ or send a letter to Creative Commons, 543 Howard Street, 5th Floor, San Francisco, California, 94105, USA. Namensnennung-NichtKommerziell-Weitergabe unter gleichen Bedingungen 2.0 Deutschland Sie dürfen: • den Inhalt vervielfältigen, verbreiten und öffentlich aufführen • Bearbeitungen anfertigen Zu den folgenden Bedingungen: Namensnennung. Sie müssen den Namen des Autors/Rechtsinhabers nennen. Keine kommerzielle Nutzung. Dieser Inhalt darf nicht für kommerzielle Zwecke verwendet werden. Weitergabe unter gleichen Bedingungen. Wenn Sie diesen Inhalt bearbeiten oder in anderer Weise umgestalten, verändern oder als Grundlage für einen anderen Inhalt verwenden, dann dürfen Sie den neu entstandenen Inhalt nur unter Verwendung identischer Lizenzbedingungen weitergeben. • • Im Falle einer Verbreitung müssen Sie anderen die Lizenzbedingungen, unter die dieser Inhalt fällt, mitteilen. Jede dieser Bedingungen kann nach schriftlicher Einwilligung des Rechtsinhabers aufgehoben werden. Die gesetzlichen Schranken des Urheberrechts bleiben hiervon unberührt. Das Commons Deed ist eine Zusammenfassung des Lizenzvertrags in allgemeinverständlicher Sprache. 1 Inhalt Einleitung ................................................................................................................................................................. 3 Begriffsklärung ..................................................................................................................................................... 3 Thematische Einordnung...................................................................................................................................... 3 Abgrenzung zu anderen Themen ......................................................................................................................... 3 Inhalt dieser Ausarbeitung.................................................................................................................................... 4 Historie ................................................................................................................................................................. 4 Kritik: Pathfinding – „Black Magic“ oder „alles Betrug“?........................................................................................ 5 Preprocessing .......................................................................................................................................................... 6 Grundlagen........................................................................................................................................................... 6 Partitionierung von Landschaften ohne Verfeinerung........................................................................................... 6 Gleichmäßiges Raster ...................................................................................................................................... 6 Wegpunkte-Graphen......................................................................................................................................... 7 Kreisbasierte Wegpunkte-Graphen................................................................................................................... 8 n „2 “-Trees.......................................................................................................................................................... 8 Polygonale Zerlegung ....................................................................................................................................... 9 Zusammenfassung ......................................................................................................................................... 10 Partitionierung von Landschaften mit Verfeinerung............................................................................................ 11 Submapping/Subgraphing .................................................................................................................................. 12 Optimierungen im Level Design...................................................................................................................... 12 Nutzung von Restriktionen im Spiel-Design.................................................................................................... 13 Bewegungskosten .............................................................................................................................................. 13 Real-Time Processing............................................................................................................................................ 14 Algorithmen zur Berechnung günstigster Pfade ................................................................................................. 14 Grundlagen ..................................................................................................................................................... 14 Dijkstra............................................................................................................................................................ 15 A-Star (A*) ...................................................................................................................................................... 16 Natürliche Wegführung....................................................................................................................................... 17 Wegpunkte-Optimierung & Interpolation ......................................................................................................... 17 Pfadglättung durch Splines ............................................................................................................................. 17 Ausblick / Forschungsthemen ................................................................................................................................ 18 Behandlung dynamischer und neu aufgetretener Hindernisse ........................................................................... 18 Grundlagen ..................................................................................................................................................... 18 Lifelong-Planning-A-Star (LPA)....................................................................................................................... 19 Intelligentere Gegner durch Influence Maps....................................................................................................... 20 Literatur.................................................................................................................................................................. 22 2 Einleitung Begriffsklärung Die Auswertung von Geländedaten zur Gewinnung einer nutzbaren Information bezeichnet man allgemein als Terrain Analysis. Pathfinding befasst sich als eine konkrete Anwendung von Terrain Analysis mit dem Finden eines Weges zwischen zwei Punkten in einem gegebenen Suchraum. Nicht immer ist dabei aber der geografisch „kürzeste“ Weg auch der Beste. Je nach Anwendungsfall können besondere Zusatzanforderungen bestehen: „Predominately the problem is ‘Find the shortest path from A to B’, but other forms of pathfinding issues also exist, such as ‘Find any path from A to B’ or ‘Find a path from A to B via C’.“ (Q16) Aufgrund von Wegkosten, spezifischen Eigenschaften der zu bewegenden Entität oder besonderen Umweltfaktoren können Fälle auftreten, in denen evtl. ein längerer Weg besser geeignet erscheint als der Kürzeste. Daher soll im Folgenden gelten: „[Pathfinding means] looking for a good route for moving an entity from here to there.“ (Q4) 3 3D Pathfinding befasst sich als besondere Ausprägung des Pathfinding mit dem Suchen von Pfaden im R . Im 2 Vergleich zu Pathfinding im R ergibt sich hier durch die Erhebung des Suchraums in die nächst höhere Dimension typischerweise eine größere Auswahl an möglichen Wegen. Thematische Einordnung Pathfinding im Allgemeinen kann als Teilgebiet der „Künstlichen Intelligenz“ verstanden werden. Besonders relevant ist Pathfiding heute in der Spiele-Entwicklung, aber auch Anwendungen wie die Berechnung von Fahrplänen und günstigsten Routen (Online-Routenplaner, Navigations-Systeme) und der Einsatz im militärischen Bereich (Roboter, Drohnen) gewinnen zunehmend an Bedeutung. Abgrenzung zu anderen Themen Methodisch fundiert das 3D Pathfinding insbesondere auf den Mitteln der Graphentheorie und der Diskreten Optimierung. In der praktischen Anwendung steht das Pathfinding in enger Verbindung mit anderen Themengebieten der Künstlichen Intelligenz. Im Spielebereich sind nicht zuletzt durch die gegenseitigen Wechselwirkungen der Spielelemente die Aufgabenbereiche „Terrain Modelling“, „Pathfinding“, „Character Design“ und „Character Intelligence“ eng miteinander verbunden. Trotzdem lassen sich auch dort Grenzen ziehen. Im Rahmen dieser Ausarbeitung wird die thematische Abgrenzung nach Q30 zu Grunde gelegt: 3D Engine: Full resolution 3D world. Physics: Physical 3D description of the world. Collision Detection: Object and world collision. AI & Pathfinding: Understanding and navigating the 3D world. 3D Sound: Sound rendering in 3D environment. Besonders hervorzuheben ist hierbei die Abgrenzung von Pathfinding und Collision Detection. Pathfinding endet, wo ein gangbarer Weg von einem Startpunkt zu einem Zielpunkt gefunden worden ist. Collision Detection beginnt, sobald eine Einheit sich abseits eines solchen Idealpfades bewegt (ideal, weil bereits bekannt ist, dass er gangbar ist) und geprüft werden muss, ob das Abweichen nicht zu einer unzulässigen Kollision mit der Umwelt führt, die unterbunden werden muss. 3 Inhalt dieser Ausarbeitung In den vergangenen 10 Jahren hat sich im Spielebereich der Generationswechsel vom 2D- zum 3D-Standard in der Visualisierung vollzogen. Legt man eine einfache Diskretisierung des Suchraums in Rasterform (2D) bzw. Würfelform (3D) zugrunde, steigt die Anzahl der zu berücksichtigen Wegpunkte in einer Anwendung dadurch (theoretisch) von x * y auf x * y * z. Rechnerisch ist einer solchen Vergrößerung des Suchraums nicht ohne weiteres nachzukommen, wenn ein vergleichbarer Spielfluss gewährleistet werden soll. Prinzipiell stellt sich deswegen insbesondere beim Thema 3D-Pathfinding die Frage nach Optimierungsmöglichkeiten. Besonders effiziente Implementierungen sind dann zu erreichen, wenn Festlegungen getroffen werden können, die Teile des diskretisierten Suchraums bereits im Vorfeld ausschließen und damit die Zahl der möglichen Lösungen im Vorfeld reduzieren. In zeitkritischen Umgebungen (wie z.B. Echtzeit-Strategiespielen) ergibt sich im Rahmen der Optimierung häufig auch die Möglichkeit, die Wegberechnung in der Echtzeit-Anwendung durch ein vorangehendes „Preprocessing“ des Suchraums zu beschleunigen. Das Pathfinding wird damit zu einem zweiphasigen Prozess. Im Rahmen dieser Ausarbeitung sollen die grundsätzlichen Herausforderungen und Lösungsansätze des Pathfinding anhand gängiger Algorithmen erläutert und spezielle Lösungsansätze für die effiziente Berechnung 3 von Pfaden im R vorgestellt werden. Dazu werden nacheinander Techniken des Preprocessing und des Realtime Processing vorgestellt und an Fallbeispielen verdeutlicht. In den Illustrationen werden bevorzugt Anwendungsbeispiele aus der Spiele-Entwicklung verwendet. Ein abschließendes Kapitel gibt in aller Kürze einen Überblick über aktuelle Forschungsthemen sowie einen Ausblick in die Zukunft. Historie Pathfinding gewinnt in der Informatik einen zunehmend an Stellenwert. Neben klassischen Anwendungen wie der Netzwerkflussanalyse findet Pathfinding insbesondere auch in (Internet-) Diensten zur Routenplanung Anwendung. Auch in Zukunftsbereichen wie militärischer Anwendung und Robotik (Beispiel: KrankenhausRoboter) ist Pathfinding ein elementarer Forschungsbestandteil. Im Spielebereich wird Pathfinding seit über 20 Jahren überall dort angewendet, wo Charaktere des Computergegners simuliert werden müssen, die sich in einer vorgegebenen Spiellandschaft bewegen, durch Fortbewegung dynamisch (re-) agieren und dabei möglichst „intelligent“ wirken sollen. Beispiele: Mario Bros. (© 1983 Nintendo) Pacman (© 1980 Namco) In neueren (insbesondere: Echtzeit-Strategie-) Spielen gewinnt Pathfinding auch bei den Spielercharakteren zunehmend an Bedeutung. Der Spieler erteilt, anders als in klassischen Arcade-Spielen, seinen Einheiten nicht mehr kontinuierliche Bewegungsanweisungen, sondern gibt z.B. seinen militärischen Einheiten den Marschbefehl nur noch abstrakt per Start- und Zielpunkt (und ggf. einigen Wegpunkten) vor. Die Suche eines passenden Weges übernimmt dann jedoch die Spiel-Engine. 4 Beispiele: Warcraft II – Tides of War (© 1995 Blizzard) Age of Empires III (© 2005 Ensemble Studios) Kritik: Pathfinding – „Black Magic“ oder „alles Betrug“? In den späten 90er Jahren hat sich in der Spielebranche der technologische Fortschritt von Spielen mit 2D- zu 3D-Grafik vollzogen. Zieht man in Betracht, dass noch zu 2D-Zeiten im Jahr 1999 bei Age of Empires II die Rechenbelastung eines durchschnittlichen PCs allein für das Pathfinding bei 60 bis 70 Prozent lag (Q14), so wirft die Tatsache, dass bereits 2005 der Folgetitel Age of Empires III eine 3D-Darstellung implementierte, die auf einem zu dieser Zeit durchschnittlichen Rechner ebenso flüssig lief, Fragen auf. Schon bei Anwendung einer Faustformel wie „Moore’s Law“ erscheint 2 3 1. völlig ausgeschlossen, dass beim Übergang von R nach R die Anzahl der berücksichtigen Lösungen im Suchraum tatsächlich um den Faktor Z gestiegen ist, weil dafür die Rechenleistung nicht vorhanden wäre 2. äußerst fragwürdig, ob, unabhängig von der Anzahl der Dimensionen, der berücksichtigen Suchraum wirklich so groß ist, wie er den Spielern vom rein visuellen Eindruck her erscheinen mag. Tatsächlich wird in Spieleprojekten viel Aufwand investiert, um die Explosion des Suchraums bestmöglich zu verhindern. Die große Frage, die sich in diesem Zusammenhang stellt, ist, wie trotz der (visuellen) 3D-Ansicht das logische Modell weiterhin auf kleinen, planaren Graphen abgebildet werden kann und die gleichen Algorithmen angewandt werden können, wie dies bei einer 2D-Darstellung der Fall gewesen wäre. Wäre der Suchraum nicht bereits vor der eigentlichen Wegberechnung stark eingegrenzt, wäre sie in akzeptabler Zeit nicht durchführbar. Pathfinding käme damit für Echtzeitanwendungen nicht in Frage. Wie fest das Schaffen von „Illusionen“ mittlerweile in der Spieleentwicklung verankert ist, zeigt dieses Zitat von John R. McCawley, der nach vier Jahren Entwicklertätigkeit im KI-Bereich in Q9 sein Fazit zieht: “When I started Game AI I was ‘into’ genetic algorithms, neural nets and other such ‘real’ AI subjects. Over time I came to realize that it isn’t high falootin’ learning that people want out of games. People want the illusion of intelligence. It doesn’t matter how you arrive at the result, what matters is the appearance of thought. The way you obtain this illusion is through complexity and tweaking.” Ein wesentlicher Teil der Entwicklungsleistung bei Pathfinding besteht in der Identifikation und dem Ausschluss suboptimaler oder unmöglicher Wegkombinationen. Die Implementierung eines effizienten Pathfinding-Algorithmus ist damit eine analytische Aufgabe, die nur mit genauen Kenntnissen der Beschaffenheit des Suchraums und der darin agierenden Charaktere zu praktisch verwertbaren Ergebnissen führt. Bei der Entwicklung heutiger Computerspiele wird Pathfinding meist als zweiphasiger Prozess realisiert. Neben der Optimierung des Pathfinding zur Laufzeit hat in heutigen Spielen vor allem das Preprocessing einen hohen Stellenwert. Dabei werden statische (d.h. zur Laufzeit unveränderliche Teile des Terrains wie Gebirge, Flüsse oder Seen), bereits im Vorfeld untersucht und die wenigen dort als Wege in Frage kommenden Routen für die spätere Wiederverwendung gespeichert. 5 Preprocessing Grundlagen Das Preprocessing großer Spielkarten kann mehrere Minuten in Anspruch nehmen. Die Ergebnisdaten des Preprocessing werden daher normalerweise vom Hersteller des Spiels gleich fertig mitgeliefert. Die Ladezeit, die z.B. in Echtzeit-Strategiespielen nach Auswahl der Spielkarte anfällt, ist v.a. auf die Vorberechnung dynamischer Spieldaten zurückzuführen. Bevor ein „visuelles” Modell in Echtzeit von einem Pathfinding-Algorithmus nach Pfaden durchsucht werden kann, muss es in eine für diesen Algorithmus angemessene logische Repräsentation überführt werden. Diese logische Repräsentation besteht üblicherweise aus einem ungerichteten Graphen mit einer zunächst nicht weiter bestimmten Zahl an Knoten und Kanten. Die Knoten repräsentieren jeweils einen bestimmten Teilbereich (engl.: Partition) des visuellen Modells, die Kanten die Verbindungen der Teilbereiche untereinander. (Die Knoten, deren Teilbereiche im visuellen Modell aneinander angrenzen, werden in der logischen Repräsentation mit einer Kante verbunden.) Andere Techniken werden hier von der näheren Betrachtung ausgeschlossen, weil sie in der Praxis eine untergeordnete Rolle spielen. Algorithmen, die ein visuelles (meist: polygonales) Modell in Teilbereiche zerlegen und in einen Graphen überführen, werden als Partitioning-Algorithmen bezeichnet. VisuelleRepräsentation LogischeRepräsentation WorldModel PartitioningAlgorithmus Input UngerichteterGraph Output 1 1 * * verbindet Knoten 2 Kante 1 grenzt an 1 1..* Bei der Partitionierung des visuellen Modells in die logische Repräsentation können verschiedene Techniken angewandt werden. Grundsätzlich ist zu unterscheiden zwischen Partitionierung ohne bzw. mit Verfeinerung. Zu beiden methodischen Ansätzen sollen nachfolgend einige Varianten vorgestellt werden. Partitionierung von Landschaften ohne Verfeinerung Gleichmäßiges Raster Bei der Zerlegung in ein gleichmäßiges Raster wird die Landschaft in gleich große Einheiten einer bestimmten Form, üblicherweise in Quadrate, zerlegt. Jedes dieser Quadrate stellt für den Algorithmus einen eigenen Teilbereich dar und wird folglich in der logischen Repräsentation als einzelner Knoten erfasst. Liegen zwei Quadrate aneinander und kann man von einem das andere erreichen, werden die dazugehörigen Knoten mit einer Kante verbunden. 6 Logische Repräsentation (Q20) Unterteilung einer Landschaft in Raster (Q20) Begrenzt man, wie in der obigen Abbildung gezeigt, die Verbindungen eines Quadrats auf die jeweils links, rechts, oben und unten angrenzenden Quadraten, wird dies in den meisten Fällen zu „unnatürlich“ erscheinenden Fortbewegungen der Einheiten führen. Es empfiehlt sich daher, auch die diagonal angrenzenden Flächen mit einzubeziehen. Streng genommen ist dabei jedoch zu berücksichtigen, dass die mit einem diagonalen Schritt zurückgelegte Strecke länger ist als die eines geraden Schrittes. Neben der Zerlegung in Quadrate sind auch andere Formen denkbar, wie z.B. Hexagone. Der Vorteil einer Aufteilung in Hexagone ist, dass die Differenz zwischen „schrägen“ und „geraden“ Seitenschritten nicht so stark ins Gewicht fällt. (Dafür ist die Auswertung von Maus-Klicks in der Karte etwas aufwendiger.) Im dreidimensionalen Raum könnten statt der Quadrate Würfel eingesetzt werden. Wegpunkte-Graphen Einen grundlegend anderen Ansatz verfolgt man beim Setzen von Wegpunkten. Bei dieser Technik ergänzt normalerweise der Level Designer die Geometriedaten durch Metadaten. In Abhängigkeit von der Gestaltung des Raums wählt er diejenigen Punkte aus, die ihm als besonders wichtige „Verkehrsknotenpunkte“ erscheinen, und markiert sie als Wegpunkte. Diese Wegpunkte stellen gleichzeitig die Knoten des Logikgraphen dar. Entweder ebenfalls manuell oder automatisiert durch die Auswertung von Distanzen und Hindernissen werden danach die Kanten ergänzt. Der Hauptvorteil von Wegpunktesystemen ist, dass der Level Designer irrelevante Stellen aussparen kann und die Größe des Logikgraphen erheblich reduziert wird. Besonders deutliche Vorteile lassen sich auch bei der Erfassung gerader Strecken erzielen, wo im „intelligent“ gestalteten Wegpunktesystem auf die vielen „interpolierenden“, aber eigentlich unnötigen Punkte zwischen Start und Ziel verzichtet werden kann und stattdessen einfach eine einzige lange Strecke definiert wird. Der Nachteil von Wegpunktesystemen besteht darin, dass, wenn nicht sehr viele Wegpunkte gesetzt werden, der vom Algorithmus zurückgegebene Pfad in den seltensten Situationen auch den in der Landschaft theoretisch kürzesten wählbaren Weg darstellt. Wegpunktesysteme überzeugen nicht immer durch die Güte der gefundenen Pfade (Q20) 7 Kreisbasierte Wegpunkte-Graphen Bei kreisbasierten Wegpunkte-Graphen wird ein regulärer Wegpunktegraph ergänzt durch gedachte Kreise um die einzelnen Wegpunkte. Diese Kreise können (bzw. sollen sogar!) unterschiedlich groß ausfallen und sich gegenseitig überlagern. Eine Verbindung zwischen zwei Wegpunkten wird überall dort angenommen, wo sich die Kreise zweier Wegpunkte überschneiden. Kreisbasierte Wegpunkte-Graphen sind überall dort von Vorteil, wo große, offene Gelände vorzufinden sind. Dort lassen sich durch die Variation der Dichte der Wegpunkte und ihrer Kreispunkte sogar relativ einfach Kostenfunktionen (z.B. durch größere Dichte und kleinere Radien bei unwegsamem Gelände) realisieren. Als ungünstig erweist sich das System vor allem in geschlossenen Räumen mit vielen Ecken und Winkeln, weil diese von den Kreisen nur schwer abgedeckt werden können. Kreisbasierte Wegpunktesysteme stoßen in geschlossenen Räumen schnell an ihre Grenzen (Q20) „2n“-Trees Im vorangegangen Beispiel für gleichmäßige Zerlegung ist deutlich geworden, dass diese Form des Partitioning bei großen zu sehr umfangreichen logischen Repräsentationen führt, die viel Speicherplatz benötigen und den Suchalgorithmus in späteren Verarbeitungsschritten lange beschäftigen können. Eine Möglichkeit, dem n entgegenzuwirken, ohne all zu weit vom Raster-Prinzip abzuweichen, ist die Verwendung von „2 “-Trees. Zerlegung in einen Quad-Tree Spielansicht einer Landschaft mit Quad-Tree: das Quadrat am linken Bildrand ist sehr groß ausgefallen (Q16) Bei der Bildung von Quad-Trees wird eine gegebene Fläche rekursiv immer dann in vier gleich große Unterteile zerlegt, wenn sie sowohl Teile enthält, die begehbar sind, als auch solche, die nicht begehbar sind. Den geografischer „Ankerpunkt“ bildet jeweils der Mittelpunkt einer Fläche. 8 n Durch die Bildung von 2 -Trees entsteht in den meisten Fällen eine sehr viel „kompaktere“ logische Repräsentation: die Anzahl der betrachteten Flächen sinkt, und mit ihr die Anzahl der Knoten im Graphen. Leider wird dabei aber auch die Bewegungsmöglichkeit auf der Karte stark eingeschränkt: Einheiten können nur noch die Zentren der Flächen ansteuern, was bei sehr unterschiedlich großen Flächen verwirrend wirken oder gar den Spielfluss stören kann. Bei einer Anhebung des Verfahrens in den dreidimensionalen Raum spricht man von Octrees. Schematische Darstellung einer Octree-Zerlegung (Q27) Felsformation, aufgelöst als Octree (Q27) Polygonale Zerlegung Eine weitere Möglichkeit, eine Karte in Teilbereiche zu unterteilen, ist die Zerlegung in Polygone. Die Polygone können dabei eine feste Größe haben oder als Flächen mit unterschiedlichen Größen gebildet werden. Die Beschränkung auf Dreiecke ist genauso möglich wie das Zusammenfassen größerer Bereiche als konvexe Polygone. Bei der polygonalen Zerlegung bestehen die besten Chancen, in natürlichen Landschaften aneinander liegende Flächen mit gleichen Eigenschaften zu erkennen, diese als eine Einheit zusammenzufassen und folglich auch nur mit einem Knoten in der logischen Repräsentation erfassen zu müssen. Logische Repräsentation (Q16) Unterteilung einer Landschaft in Polygone (Q14) Da bei 3D-Geometrie derzeit ohnehin die polygonale Darstellungsform dominiert, könnte es nahe liegend erscheinen, auf die Erstellung einer separaten Repräsentation für das Pathfinding zu verzichten und lediglich die Geometriedaten um die Spieldaten zu ergänzen, die normalerweise zu den Kantendaten des Graphenmodells geworden wären. Genau davon ist jedoch dringend abzuraten – nicht nur, um evtl. den Ansprüchen ingenieur9 mäßiger Software-Entwicklung gerecht zu werden, sondern auch, weil sich in der Spieleindustrie ein Trend zur Auslagerung von AI nach „off-the-shelf“-Prinzip abzeichnet. Die Anforderungen an Künstliche Intelligenz in Spielen haben in den vergangenen Jahren so stark zugenommen, dass, nach „Lizensierungswelle“ für 3D-Engines in den späten 90er Jahren, nun zunehmend auch die Künstliche Intelligenz als Modul von Drittanbietern als eigenständige Komponente geliefert wird und damit die Implementierung einer diskreten Schnittstelle zwischen Spielintelligenz und Grafik-Engine mehr denn je geboten scheint. 1 Der französische Anbieter Kynogon bietet bereits jetzt eine erweiterbare AI-Engine an, die von Spieleherstellern wie Electronic Arts, Real Time World, Atari, Majesco, Pyro Studios, Lionhead Studios, Ascaron und Digital Illusion CE in deren Spielen verwendet wird und dort Features wie Bewegung, Kampf, Formationsbildung, Kooperation und Fahrzeugkontrolle bereitstellt. „I avoid accessing any 3D data structures, vectors, or entity information directly from the AI. I have middleman functions that loop through data in the 3D world and copy the data into a format easily digestable to the AI. This shields the AI from changes in the internal representation of game data, and also aids in porting the AI to another game.” (Q9) Zusammenfassung PartitioningAlgorithmus VisuelleRepräsentation WorldModel Input LogischeRepräsentation UngerichteterGraph Output 1 1 1 1 1 PartitioningMethodik * Kante 1 MethodikOhneVerfeinerung Element 1 1..* grenzt an * GleichmäßigesRastern Quadrat in ergibt 1 Knoten verbindet 2 ergibt QuadTree Quads in ergibt Polygon PolygonaleZerlegung in 1 http://www.kynogon.com/ 10 Partitionierung von Landschaften mit Verfeinerung Ein wirklich effizientes Pathfinding lässt sich in Echtzeit-Spielen mit vielen computergesteuerten Einheiten nur dann realisieren, wenn in der Partitionierung mit Verfeinerung gearbeitet wird. Verfeinerung bedeutet in diesem Zusammenhang, dass nicht eine einzige logische Repräsentation der Landschaft generiert wird, sondern mehrere – und zwar mit unterschiedlichen Abstraktionsstufen. Das Datenmodell verändert sich dabei nur unerheblich: LogischeRepräsentation PartitioningAlgorithmus MipMappingGraphSet UngerichteterGraph Output 1 1..* - levelOfDetail: int 1 1 * * Knoten Kante grenzt an 1 1..* verbindet 2 1 Liegen die Kartendaten in verschiedenen Abstraktionsstufen vor, kann auch der Pathfinding-Algorithmus bei der Anforderung eines neuen Weges stufenweise vorgehen. Zunächst wird also in einer sehr groben Abstraktionsstufe geprüft, ob z.B. ein Weg vom Sektor (1, 1) in den Sektor (3, 3) möglich ist. Ist dies nicht der Fall, kann die Berechnung bereits an dieser Stelle abgebrochen werden. Sollte in der groben Auflösung ein Weg gefunden werden, wird zur nächst feineren Stufe übergegangen und dort erneut geprüft, ob ein Weg möglich ist. Da aber bereits aus der vorangegangenen Analyse bekannt ist, durch welche groben Sektoren der Pfad führen wird, kann in dieser Verfeinerungsstufe ein Großteil der normalerweise in Betracht kommenden Knoten von vornherein ausgeschlossen werden – und so weiter. Verfeinerung einer Landschaft über drei Abstraktionsstufen Wie dieses „Mip-Mapping“ in einem bereits erschienenen Spiel genutzt wurde, wird in Q14 am Beispiel von Age of Empires II erläutert: „AOE2 shipped with three distinctly different pathing algorithms. We sepcifically added a mip-mapped pathfinder to address the problem our units had finding good paths across long distances. We solved this problem by generating successively zoomed out mip-maps of the terrain (including obstructions) with the criteria of subdivision being passability across that mip level. […] The other two pathfinders are a short distance polygonal pathfinder and an extremely simple short/medium distance tile-based pathfinder. […] Together, all three of the pathfinders gave us a huge win in terms of quality and speed for all of the units. […] If we wanted to path a unit across the map, we checked the mip-map pathfinder and could assume that the polygonal pathfinder would solve the problem when the unit got close.” 11 Submapping/Subgraphing Der Umstieg von einer 2D- in eine 3D-Welt bedeutet aus Spielersicht einen spürbaren Zuwachs an Bewegungsfreiheit. Ohne Hilfsmittel würde die dritte Dimension jedoch für das Pathfinding einen kritischen Mehraufwand darstellen. Die Submappding/Subgraphing-Strategie ist eines dieser Hilfsmittel und bedient sich der Tatsache, dass die meisten Einheiten, die sich über ein 3D-Gelände bewegen, in Wahrheit die meiste Zeit doch nur in zwei Dimensionen unterwegs sind. Das Prinzip des Submapping/Subgraphing ist die Unterteilung einer großen Spielwelt in viele kleine Spielwelten, die in Berechnungen separat betrachtet werden können. Falls möglich, werden Berechnungen auf eine oder wenige der Teilspielwelten begrenzt. Dadurch verkleinern sich der Suchraum und folglich auch der Suchaufwand. Grundsätzlich sind zwei Varianten (Submapping/Subgraphing durch Optimierung im Level Design, Submapping/ Subgraphing durch die Nutzung von Restriktionen im Spieldesign) zu unterscheiden. Beide Varianten können auch kombiniert werden. Optimierungen im Level Design Aus Räumen zusammengesetzte Spielkarte im Shooter-Klassiker „Wolfenstein 3D“ (© id Software, 1992) Durch geschicktes Level Design können große Spielwelten für den Spieler weitgehend unbemerkt in kleinere Spielwelten zerlegt werden. Wie die o.a. Abbildung einer Spielkarte aus dem Shooter-Klassiker “Wolfenstein 3D” verdeutlicht, kann dieser Effekt z.B. durch die Aufteilung eines Gebäudes in einzelne Räume erfolgen, die durch Türen getrennt sind. Betritt ein Spieler einen neuen Raum durch eine Tür, kann der Suchgraph dynamisch um die Geometrie dieses Raums erweitert bzw. die Geometrie des verlassenen Raums zukünftig vernachlässigt werden. Dieses Prinzip lässt sich auch auf 3D-Spiele übertragen: „Is your game a first person 3D shooter? If so you may be able to get away with strictly 2D pathfinding if you set up the world correctly. If your character is essentially moving on a 2D plane (a la Doom), it is a prime candidate for 2D pathfinding. This is one place where the tweaking comes in. In order to maintain this 2D-ness you may have to build contrived levels to avoid confusing the AI. An example would be organizing your level into a series of 2D planes with only a few ways to move between them (staircases). I imagine that a whole article could be written on keeping 3D levels ‘logically’ 2D for the sake of AI.” (Q9) In freiem Gelände lässt sich ein solches Submapping/Subgraphing z.B. durch enge Geländepassagen oder Brücken realisieren. Speziell die Möglichkeit zur Aufteilung einer Karte durch Brücken ist sehr beliebt, wobei mit Fortschreiten des Spiels und der Anzahl der produzierten (und damit Pfade suchenden) Einheiten häufig die Zahl der verfügbaren Brücken (durch Zerstörung) abnimmt und der Suchraum automatisch kleiner wird. 12 3D-Gelände-Aufteilung durch Brücken im Spiel „Warcraft III“ (© Blizzard Entertainment) 2D-Gelände-Aufteilung durch Brücken im Spiel „Command & Conquer II“ (© Westwood) Nutzung von Restriktionen im Spiel-Design Eine zusätzliche Möglichkeit, den Suchraum zu verkleinern, bieten Restriktionen im Spiel-Design. Werden beispielsweise fliegende Einheiten angeboten, könnte im Spiel-Design z.B. auch die Annahme gemacht werden, dass diese Flugeinheiten so hoch fliegen, dass sie höher fliegen als die höchsten Gebäude. Setzt man voraus, dass Flugzeuge nur an ihrem Start- und Zielflughafen die Höhe variieren und im Falle einer drohenden Kollision mit einem anderen Flugzeug eine Ausweichstrategie anwenden, so entfällt hier vollständig die Notwendigkeit, den unterhalb der Flugebene liegenden dreidimensionalen Raum im Pathfinding überhaupt zu berücksichtigen. Kampfflugzeuge in Aktion im Spiel „Command & Conquer III“ (© Westwood) Bewegungskosten Je ungleichmäßiger eine Landschaft in Teilbereiche zerlegt wird, desto „ungerechter“ erschiene es auch, im Spielverlauf allen Kanten des Graphen als gleich teuer zu behandeln. Unter Umständen könnten Spieleinheiten dann lange Strecken schneller zurücklegen als kurze, nur, weil diese durch weniger oft aufgespaltetes Terrain führen. Durch die Einführung von Bewegungskosten kann diesem Problem entgegengewirkt werden. Zur Darstellung dieser Kosten im Graphen werden den einzelnen Kanten Gewichte zugeordnet. 13 LogischeRepräsentation UngerichteterGraph 1 1 * * Knoten Kante grenzt an 1 1..* - gewicht: int verbindet 2 1 Logische Repräsentation ergänzt um 2 Wegkosten (Kantengewichte) Unterschiedliche Gewichte können für ungleiche Distanz stehen oder, besonders in dreidimensionalen Welten relevant, z.B. auch die Höhenunterschiede repräsentieren, die beim Übergang von einem Knoten zu einem anderen überwunden werden müssen. Der Algorithmus, der später im Real-Time-Processing den Graphen auswertet, sollte dann mithilfe der Kantengewichte erkennen, dass evtl. auch ein Weg über mehr Knoten für eine Einheit günstiger ausfallen kann und damit zu bevorzugen ist. Real-Time Processing Algorithmen zur Berechnung günstigster Pfade Grundlagen Alle in der Spieleentwicklung relevanten Algorithmen zur Berechnung kürzester Pfade sind graphenorientiert. Als Eingangsparameter nehmen sie einen Startknoten, einen Zielknoten und den Graphen selbst entgegen. Je nach Komplexität des Spieleprojekts kann es auch sinnvoll erscheinen, zusätzliche Informationen zu der Einheit, die den Weg anfordert, als Constraints an den Algorithmus zu übergeben, um z.B. unterschiedliche Manövrierfähigkeit im Gelände simulieren zu können. start : Node in algo :PathfindingAlgorithm goal : Node out in cheapest : Path in graph : Graph in unit_properties : constraints Die verschiedenen zur Auswahl stehenden Algorithmen lassen sich nach einer Vielzahl von Merkmalen kategorisieren. Eines der entscheidenden Merkmale der hier betrachteten Graphen ist, dass sie alle mit Kosten (d.h. mit 2 http://www.csie.ntu.edu.tw/~wcchen/algorithm/weightedGraph/Map5.gif 14 Gewichten) umgehen können. (Im vorangegangenen Kapitel wurde bereits angedeutet, dass eine Auswertung ohne Kostenberücksichtigung insbesondere bei Spielen zu vielen unerwünschten Ergebnissen führen kann.) Algorithmen, die keine Kostenberücksichtigung implementieren, haben in der heutigen Spielewelt (abgesehen vielleicht von einer Support-Funktion in besonders geschwindigkeitskritischen Bereichen) keine Relevanz mehr und werden deswegen hier vernachlässigt. PathfindingAlgorithm GeometricPathfindingAlgorithm WeightAwarePathfindingAlgorithm Dijkstra AStar Dijkstra Der Algorithmus von Dijkstra, benannt nach Edsger W. Dijkstra, dient der Ermittlung kürzester Pfade in Graphen mit gewichteten Kanten. Grundlegendes Konzept ist eine Breitensuche, als Datenstruktur wird eine Prioritätswarteschlange benötigt. Der Algorithmus beginnt am Startknoten und fügt zunächst alle umliegenden, erreichbaren Knoten in die Prioritätswarteschlange ein. Das Gewicht eines Knotens in der Prioritätswarteschlange entspricht dabei stets dem Gewicht aller Knoten, die auf dem Weg zu ihm besucht wurden, zuzüglich des Gewichts der letzten Kante, die zu ihm selbst geführt hat. (Der Startknoten hat per Definition das Gewicht null zugeordnet.) Zu jedem Knoten in der Prioritätswarteschlange wird außerdem der Knoten vermerkt, über den er erreicht wurde. Sukzessive wird nun immer wieder der „günstigste“ Knoten aus der Prioritätswartschlange gewählt. Auch seine umliegende Knoten werden (falls sie zuvor noch nicht besucht wurden) ebenfalls in die Prioritätswarteschlange eingefügt. Stößt der Algorithmus bei dem Untersuchen der umliegenden Knoten des aktuellen Knotens auf den Zielknoten, ist der Weg zwischen Start und Ziel gefunden; der Pfad (es handelt sich um den Günstigsten!) ergibt sich dann über eine einfache Rückverfolgung anhand der gespeicherten Vorgängerknoten. Wird die Prioritätswarteschlange leer, ohne, dass der Zielknoten gefunden werden konnte, dann gibt es keine Verbindung zwischen Start und Ziel. Es folgt eine Pseudo-Code-Darstellung nach Q22: 01 02 Distanz(s) := 0 Vorgänger(s) := s 03 04 05 für jedes v aus V ohne {s} Distanz(v) := unendlich Vorgänger(v) := <kein> 06 U := V 07 08 09 10 11 12 13 solange U nicht leer wähle u aus U mit Distanz(u) minimal U := U - {u} wenn u = z dann STOP # optional für jedes (u,v) aus E mit v aus U wenn Distanz(u) + Kosten(u,v) < Distanz(v) dann Distanz(v) := Distanz(u) + Kosten(u,v) 15 14 Vorgänger(v) := u A-Star (A*) Wie der Algorithmus von Dijkstra dient auch der A-Star-Algorithmus dem Auffinden kürzester Wege in gewichteten Graphen. Die Besonderheit an A-Star ist, dass er nicht nur grundsätzlich Kosten berücksichtigt, sondern während seiner Laufzeit kontinuierlich Schätzungen über die Restdistanz anfertigt. Anhand dieser Schätzungen wird bestimmt, welcher Knoten am Günstigsten erscheint und folglich als Nächstes gewählt wird. Zur Durchführung der Schätzung dient eine Heuristik-Funktion. Als Datenstrukturen werden außerdem eine Prioritätswarteschlange („Open“ Queue) und eine dynamisch erweiterbare Liste („Closed“ List) benötigt. Der Algorithmus arbeitet nach folgendem Pseudo-Code (Q21): /* * Der eigentliche A*-Algorithmus * -----------------------------* graph: Zu untersuchender Graph * start: Startknoten * goal: Der Zielknoten * h: Heuristikfunktion zum Schätzen des Abstandes eines Knotens bis zum Ziel * S: Prioritätswarteschlange der Knoten, deren f-Wert bereits bekannt ist * N: Liste aller bereits besuchten Knoten */ A-Star (graph, start, goal, h, S, N) { insert (start, S); while not isEmpty(S) { current_node := pop(S); if current_node in N then // Es existiert kein Pfad vom Start zum Ziel return fail; insert (current_node, N); if (current_node == goal) then return reconstruct_shortest_path(start, goal, graph); else { // Finde alle vom aktuellen Knoten aus erreichbaren Knoten successors := expand(current_node, graph); // Speichere Vorgänger des expandierten Knotens im Graph save_predecessor_in_graph(current_node, graph) forall s in sucessors do { // Speichere Knoten von dem aus s erkundet wurde predecessor(s) := current_node; // Berechne und speichere die f-Kosten f(s) := g(s) + h(s); insert(s, S); } } } // Es konnte kein Pfad gefunden werden return fail; } Nach erfolgreicher Bearbeitung kann unter Verwendung des folgenden Pseudo-Codes der eigentliche Pfad aus den gesammelten Daten bestimmt werden (Q21): /* * * * * * Algorithmus zur Rekonstruktion des kürzesten Pfades --------------------------------------------------P: berechneter kürzester Pfad start: Startknoten node: Zielknoten 16 */ reconstruct_shortest_path (start, node, graph) { if (node != start) { push(node, P); // Lese den Vorgänger des aktuellen Knoten aus predecessor := getPredecessor(node, graph); reconstruct_shortest_path (start, predecessor, graph) } else return P; } Natürliche Wegführung Ein grundsätzliches Problem bei der Berechnung von Pfaden, das unabhängig vom gewählten Suchalgorithmus auftritt, ist die „künstlich“ wirkende Beschaffenheit der berechneten Routen. Wenn das Gelände während des Preprocessing als gleichförmiges Raster oder Quad-Tree zerlegt wurde, ist der Effekt besonders deutlich zu erkennen. Dann wird in der Regel der berechnete Pfad durch die Zentren aller Quadrate verlaufen, die als Bestandteil des kürzesten Weges erkannt wurden. Die Vergröberung der Landschaft, die als Folge der Rasterung entstanden ist und die Berechnung des Pfades in einer komplexen Umgebung in zumutbarer Zeit vielleicht überhaupt erst möglich gemacht hat, wird damit – in der Darstellung – zum Problemfall. Auch hier gibt es verschiedene Lösungsstrategien. Wegpunkte-Optimierung & Interpolation In einem ersten Schritt sollte zunächst für längere Knotenfolgen geprüft werden, ob das Erreichen des letzten Knotens in der Folge vom ersten Knoten in der Folge nicht auch ohne die vorhandenen „Zwischenstationen“ möglich ist. Die Faustformel zur Durchführung dieser Optimierung lautet: „Lösche jeden Knoten Pn aus dem Pfad, wenn es möglich ist, von Pn-1 auf direktem Wege zu Pn+1 zu gelangen“. (Evtl. sind mehrere Iterationen durchzuführen.) Das Resultat dieser Optimierung sind weniger „abgehackte“ Bewegungen, die außerdem noch engen an Hindernissen vorbeiführen können als der nicht optimierte Pfad. „Verkürzung“ des „kürzesten“ Pfades (Q20) Pfadglättung durch Splines Ist der gefundene Pfad soweit vereinfacht, kann er, sobald sich die Einheit auf ihm bewegt, zusätzlich auch noch durch ein Spline verfeinert werden. Aufgrund der Positionierung der On- und Off-Punkte empfiehlt sich hierfür der Catmull-Rom-Algorithmus eher als die Berechnung der Bézier-Kurven. Anders als der Bézier-Algorithmus gewährleistet die Berechnung nach Catmull/Rom, dass der verwendete Pfad nicht plötzlich durch ein Hindernis führt. 17 Glättung eines Pfades durch Catmull-Rom-Splines (Q20) Ausblick / Forschungsthemen Behandlung dynamischer und neu aufgetretener Hindernisse Grundlagen Eingangs wurde darauf hingewiesen, dass der Aufgabenbereich des Pathfinding endet, sobald die Untersuchung der Landschaft abgeschlossen ist und ein gültiger Weg zum Ziel gefunden werden konnte. (Die Behandlung von Kollisionen mit Gegnern z.B. fällt in den Bereich Collision Detection.) Trotzdem gibt es einige wenige Spezialfälle, in denen sich die Aufgaben beider Bereiche überschneiden. Die nachstehende Grafik verdeutlicht eines der größten Probleme in diesem Zusammenhang: was, wenn der Collision Detection-Algorithmus das Ausweichen anordnet, die Einheit sich aber dadurch so weit von ihrem „sicheren“ Pfad fortbewegt, dass sie nicht mehr ankommt oder gar „stirbt“? In solchen Fällen kann die automatische Berechnung einer Ausweichroute nützlich sein. Zur Laufzeit muss dann, in enger Abstimmung von Collision Detection und Pathfinding, eine alternative Route zu dem von einem fremden Charakter gesperrten Streckenstück gesucht werden. (Enge Abstimmung, weil es Fälle geben kann, in denen durch eine komplette Neuplanung des Weges ein enormer Umweg entstehen würde – zudem ein Umweg, der evtl. schon kurze Zeit später überflüssig gewesen wäre, weil die blockierende Einheit den gesperrten Weg zwischenzeitlich geräumt hat.) Einen anderen Lösungsansatz stellt hier also das Warten dar. Und nicht zuletzt kann es natürlich sein, dass feindliche Truppen aufeinander stoßen und eine Auseinandersetzung beginnt. In diesem Fall könnte z.B. in Abhängigkeit von der Einheit und Situation die Wahl einer neuen Strategie anstehen (Flucht, Gelände umfahren, falls selbst noch nicht entdeckt worden, usw.) Auf dem Weg von X nach Y dem weißen Kreis auszuweichen, könnte sich als Fehler erweisen (Q20) Einen anderen Spezialfall stellen Hindernisse dar, die nicht aus anderen Charakteren bestehen und damit den „dynamischen“ Hindernissen zuzuordnen wären, sondern solche, die seit dem Beginn der Pfadsuche einfach neu hinzugekommen sind: z.B. durch Veränderung der Geländebeschaffenheit (Felsrutsch, Brücke zerstört, neues Gebäude versperrt den Weg etc.). Anders als im vorherigen Fall kann hier eine klare Aufgabenzuständigkeit des Pathfindings festgestellt werden, denn eine Kollision findet nicht statt. Die Lösung besteht dementsprechend auch meistens in der Suche eines neuen Pfades, es sei denn, eine „intelligentere“ Strategie sieht Abbruch oder temporäre Aussetzung des Pathfindings vor (Haus niederreißen, Brücke reparieren o.ä.) 18 Lifelong-Planning-A-Star (LPA) Der Trend geht zur Zeit dahin, die harte Trennung zwischen statischen und dynamischen Spielelementen sukzessive aufzuweichen. Die Interaktionsmöglichkeiten der Charaktere mit ihrer Umwelt nehmen zu. Die Folge für das Pathfinding ist, dass immer seltener die „statischen“ Geländedaten, die zu Beginn einer Pfadberechnung als Berechnungsgrundlage dienten, während der eigentlichen Begehung des Weges auch noch so aussehen wie zu Beginn angenommen. Es besteht folglich ein steigender Bedarf an nachträglichen Korrekturmöglichkeiten der Routenplanung. Unter der Bezeichnung „Lifelong-Planning A-Star“, kurz LPA, ist in den letzten Jahren im Rahmen eines Forschungsprojekts (vgl. u.a. Q12) eine Weiterentwicklung des A-Star-Algorithmus konzipiert geworden, die genau diesem Umstand Rechnung trägt. Die Anwendung von LPA geht zunächst davon aus, dass berechnete Pfade in einer Art Cache oder Puffer vorliegen, in dem sie auch nachträglich noch in ihrer Form modifiziert werden können. WeightAwarePathfindingAlgorithm AStar LifelongPlanningAStar PathCache 1 1 Stößt nun eine Einheit während der Verfolgung ihres Weges auf ein Hindernis, das nicht per Collision Detection umwandert werden kann und bei dem auch kurzes Warten nicht zur Klärung des Weges führen würde, wird die Neuberechnung eines Teilpfades angestoßen. Neuberechnung eines Teilpfades mit LPA (Q9) Bei der Durchführung von LPA kommt eine neue Variable, bezeichnet als rhs-Wert, zum Einsatz, die sich für jeden Knoten eines Pfades aus dem kleinsten Kostenwert (G-Wert) seiner direkt angrenzenden Knoten zzgl. der Wegkosten für den einen Knotenübergang ergibt. Stellt sich für einen Knoten im Pfad heraus, dass sein bei der 19 Neuberechnung generierter rhs-Wert von seinem ursprünglich berechneten Kostenwert abweicht, steht fest, dass der Pfad unterbrochen wurde. In diesem Fall ist wie folgt zu verfahren: 1. Wenn der alte Kostenwert größer als der neue rhs-Wert ist, kann der Knoten wieder gültig gemacht werden, indem man ihn auf den rhs-Wert setzt, denn es besteht offenbar eine nutzbare Verbindung zu den umliegenden Knoten. 2. Ist der alte Kostenwert kleiner als der neue RHS-Wert, so wird a. der neue Kostenwert auf „unendlich“ gesetzt b. eine Prüfung auch für die umliegenden Knoten angestoßen c. in umgekehrter Reihenfolge allen Knoten ein neuer Kostenwert zugewiesen, sobald einem Knoten nicht mehr „unendlich“ zugewiesen werden musste. Veranschaulicht wird dieser Algorithmus in der o.a. Abbildung aus Q9. Intelligentere Gegner durch Influence Maps In heutigen Echtzeit-Strategiespielen erwarten die Spieler von Computergegnern, dass diese aus Fehlern lernen, ihre Strategien zur Laufzeit ändern, komplexe Angriffsstrategien aufbauen und ihre Lager „intelligent“ vor Angriffen schützen. Technisch werden viele dieser Anforderungen durch Influence Maps überhaupt erst möglich. Influence Maps sind „Meta-Karten“, die Computerspieler zur Laufzeit über ein Gelände sammeln. Wird ein Computergegner beispielsweise mehrfach an der gleichen Stelle angegriffen und vom Gegner geschlagen, wird er dem nahegelegenen Knoten eine Meta-Information „besonders gefährlich“ zuordnen. Die Informationen einer Influence Map sind eng verknüpft mit dem Graphen der logischen Gelände-Repräsentation. In der Praxis kann es sich anbieten, für die Influence Maps zusätzliche Kantengewichte (falls es sich um wege-bezogene Daten handelt) oder ggf. auch Knotengewichte (falls die „Gegenden“ betroffen sind) zu definieren. So können die Daten der Influence Map wieder zurückfließen in die Wegeberechnung. Im zuvor geschilderten Beispiel könnte dies bedeuten, dass Einheiten des Computerspielers in Zukunft die als „besonders gefährlich“ markierte Stelle weiträumig umfahren, weil sie ein sehr hohes Gewicht hat und damit in der Wegberechnung als „zu teuer“ erscheint. Wenn die Gefahr besteht, dass der Logikgraph für die strategischen Verwendungszwecke der Influence Map zu ungünstig aufgeteilt ist, besteht (falls z.B. der A-Star-Algorithmus verwendet wird) eine Alternative darin, die Informationen der Influence Map über die Heuristikfunktion wieder in das Pathfinding einfließen zu lassen. Die nachfolgenden Grafiken wurden mit einem Influence Map Simulator (Q34) generiert und verdeutlichen, wie sich die Platzierung der Einheiten zweier Gegner (orange und blau, erstes Bild) auf die Spannungsfelder (stärkste Bereiche orange, zweites Bild) und die Instabilität in der Region auswirken (blau für geringe, orange für extreme Instabilität, drittes Bild): Platzierung von Einheiten durch zwei Spieler Auswertung der größten Spannungsfelder 20 Auswertung der größten Instabilität Die nachfolgende Abbildung aus Q14 visualisiert die Abbildung von Influence Maps auf eine Spiellandschaft: Influence-Map als Meta-Information zum Gelände (Q14) 21 Literatur Q1 Terrain Analysis in Realtime Strategy Games (Slides), Dave C. Pottinger (2002) http://vr.kaist.ac.kr/courses/cs682/data/ssw.ppt Q2 Game AI: The State of the Industry, Steven Woodcock (2000) http://www.gamasutra.com/features/20001101/woodcock_01.htm Q3 An optimal pathfinder for vehicles in real-world digital terrain maps, F. Markus Jönsson (1997) http://www.student.nada.kth.se/~f93-maj/pathfinder/ Q4 Smart Moves: Intelligent Pathfinding, Bryan Stout (1997) http://www.gamasutra.com/features/19970801/pathfinding.htm Q5 Toward More Realistic Pathfinding, Marco Pinter (2001) http://www.gamasutra.com/features/20010314/pinter_01.htm Q6 GDC 2002: Polygon Soup for the Programmer’s Soul: 3D Pathfinding, Patrick Smith (2002) http://www.gamasutra.com/features/20020405/smith_01.htm Q7 Beginners Guide to Pathfinding Algorithms, o.a. http://ai-depot.com/Tutorial/PathFinding.html Q8 Pathfinding: From A* to LPA, Kelly Manley (2003) http://csci.morris.umn.edu/UMMCSciWiki/pub/CSci3903s03/KellysPaper/seminar.pdf Q9 Pathfinding and the Art of Tweaking, John R. McCawley http://www.hardgeus.com/pathfinding/ Q10 A Generalized Framework for Lifelong Planning A* Search, Maxim Likhachev u.a. (2005) http://www.cs.cmu.edu/~maxim/docs/glpa_icaps05.pdf Q11 Incremental Heuristic Search in Artificial Intelligence, Sven Koenig u.a. (2004) http://www-scf.usc.edu/~csci573/notes/aimag04a.pdf Q12 Lifelong Planning A*, Sven Koenig u.a. (2005) http://www.cs.cmu.edu/~maxim/docs/aij04.pdf Q13 A* Pathfinding for Beginners, Patrick Lester (2004) http://www.policyalmanac.org/games/aStarTutorial.htm Q14 Terrain Analysis in Realtime Strategy Games (Paper), Dave C. Pottinger (2000) http://www.gamasutra.com/features/gdcarchive/2000/pottinger.doc Q15 Terrain Reasoning for 3D Action Games, William van der Sterren (2001) http://www.gamasutra.com/features/20010912/sterren_01.htm Q16 Pathfinding in an Entity Cluttered 3D Virtual Environment, Matt Hall (2005) http://www.comp.leeds.ac.uk/fyproj/reports/0405/HallM.pdf Q17 Strategy AI, o.a. (2005) http://www.itee.uq.edu.au/~penny/_strategy.htm Q18 Strategic and Tactical Reasoning with Waypoints, Lard Lidén (2002) http://www.liden.cc/lars/WEB/Resume/Papers/2002_AIWisdom.pdf Q19 Time-sliced pathfinding on arbitrary polygon surfaces, Arvid Norberg (2004) http://www.cs.umu.se/education/examina/Rapporter/ArvidNorberg.pdf Q20 Pathfinding: Search Space Representations, Dan Bader (2001) http://www.cse.lehigh.edu/~munoz/CSE497/classes/BaderPathfinding_2_1.ppt 22 Q21 A*-Algorithmus http://de.wikipedia.org/wiki/A* Q22 Algorithmus von Dijkstra http://de.wikipedia.org/wiki/Algorithmus_von_Dijkstra Q23 Pathfinding Technology, o.a. http://www.cse.ohio-state.edu/~crawfis/cse788GameDesign/ReferenceMaterial/CourseNotes/ Technology_Pathfinding.ppt Q27 iehova Terrain Library Documentation, Peter Venis http://www.home.zonnet.nl/petervenis/data/features.htm Q30 Lecture Notes: Collision Detection, Niklas Elmqvist (2005) http://www.cs.chalmers.se/Cs/Grundutb/iss/kurser/simul/doc/lecture-12.pdf Q32 Strategic Decision Making: Using Neural Networks and Influence Maps, o.a. (2005) http://homepage.cs.uri.edu/faculty/hamel/courses/spring2006/csc481/presentations/strategicdecisions.ppt Q33 Pathfinding: Basic Algorithms, o.a. http://www.ime.usp.br/~lidet/files/courses/aicg05/lecture6.ppt Q34 Influence Map Generator http://canut-ki-in.jeudego.org/simul_influence/ 23