Wie würden Sie ein Volume für ein Spiel planen?
Zum Beispiel ein 1 km langer Würfel mit Tunneln und Höhlen. Auch das Gelände ist zerstörbar.
Sie haben Geh- und Flugmodi.
Ich würde es in Phasen unterteilen. Erstellen Sie ein Volumen des offenen Raums. Suchen Sie einen Pfad, der die dynamische Zerstörung berücksichtigt.
Leistung ist ein großes Problem und die Fähigkeit, Pfade zu finden, die in kurzer Zeit verwendet werden.
Konkretes Beispiel: Etwas tief im Boden effizient abbauen.
Der Boden ist zerstörbar. "Höhlen" sind leicht zu grabende Gebiete. Bergbau ist wie Fliegen. Muss mit Sensoren sehen. Der Datensatz ist riesig. Sie müssen einen Transportweg zum Ziel erstellen. Kann Multi-Agent sein.
Antworten:
Um eine angemessene Leistung zu erzielen, erfordert die dynamische Pfadfindung einen speziell dafür geeigneten Algorithmus wie D * (Dynamic A *).
Darüber hinaus können Sie möglicherweise einen Weg finden, um eine hierarchische Pfadfindung durchzuführen. Auf diese Weise haben Sie einen einfacheren Pfad bei einer niedrigeren Auflösung und komplexere Unterpfade bei höheren Auflösungen. Indem Sie einen Pfadgraphen mit höherer Auflösung in den Mastergraphen mit niedrigerer Auflösung einsetzen, können Sie Ihren Pfad zu einer beliebigen Auflösung ausarbeiten.
Die Pfadfindung mit niedrigerer Auflösung ist offensichtlich großartig, da Sie nur eine minimale Pfadfindung durchführen können, bis Sie eine andere Unterregion betreten, und dann eine tiefere Pfadfindung auf der Subdiv-Ebene dieser Region durchführen können.
Was den eigentlichen Algorithmus betrifft, der zum Tunneln durch Ihren 3D-Raum verwendet wird, besteht das größte potenzielle Problem darin, 3D-Sackgassenbereiche zu betreten, aus denen Sie nicht herauskommen können, ohne eine andere Passage zu überqueren (Diagrammsegment). Siehe meinen letzten Monolog auf planaren Graphen Einbettungen hier .
quelle
Wenn Sie unter zerstörbarem Gelände große Änderungen an der riesigen mehrstufigen Umgebung verstehen, wird dies höllisch schwierig, insbesondere für Laufeinheiten. Es wäre ratsam, fliegende und gehende Einheiten von Anfang an zu unterteilen, damit sie die separaten Grafiken haben.
Ich kann nicht sagen, dass ich eine endgültige Lösung für die Gehgeräte kenne. Abhängig von der Anzahl der Agenten, möglichen Geländeänderungen und der Auflösung des Würfelknotens möchten Sie möglicherweise D * verwenden oder nicht. Im Wesentlichen ist D * eine rohe Kraft A *. Wie Nick angedeutet hat, kann das brutale Erzwingen eines Schrittes voraus zu vielen "Sackgassen" führen, da Sie ohne den gesamten Pfad nicht sofort erkennen können, ob der nächste Knoten korrekt ist oder nicht. Außerdem müssen Sie über den Pfad-Cache und seine teilweise Ungültigmachung nachdenken, damit Sie nicht ständig pro Agent brutale Gewalt anwenden müssen. Insgesamt wird es nicht einfach und kann zu CPU-schwer werden.
Wenn Sie stattdessen mit A * arbeiten, ist es am einfachsten, die Zerstörung Ihres Geländes auf ein Minimum zu beschränken und hierarchische Pfadfindung wie "grobes" A * und eine Form der lokalen Vermeidung zu vermeiden. Ich denke, es ist keine Option, also können Sie versuchen, den Boden und die Wände Ihres Würfels in ein Navigationsnetz umzuwandeln und es dann Teil für Teil zu ändern. Die Navmesh-Berechnung ist natürlich nicht schnell, aber es gibt Raum für verschiedene Optimierungen, um eine vollständige Neuberechnung des Netzes bei einem Geländewechsel zu vermeiden. Die allgemeine Idee besteht darin, lokale Netzaktualisierungen durchzuführen, sodass nur die betroffenen Bereiche eines Navigationsnetzes geändert werden, wenn eine Geländezerstörung auftritt. Dies könnte durch Anpassung der Konstruktion des Voronoi-Diagramms geschehen, ist jedoch kein "gelöster Bereich". Es wird auch nicht einfach sein, da Sie die Neuberechnung des Navmesh beschleunigen müssen.
Die Grafik für Lufteinheiten ist viel einfacher. Grundsätzlich müssen Sie den gesamten "Luftraum" finden und in die Grafik umwandeln. Da Ihre Kavernen dynamisch sind, ist es am naheliegendsten, dieses Diagramm auf dem Octree eines Würfels zu basieren. Verwenden Sie Octree-Blattschwerpunkte (Punkt in der Mitte des Blattwürfels) als Grundlage für die Berechnung der Knoten und filtern Sie alle Schwerpunkte an den offensichtlich ungültigen Positionen heraus. Überprüfen Sie die resultierenden Zentroide, um alle unzugänglichen Elemente von ihren Nachbarn zu entfernen. Dies wird sehr schnell gehen, sodass Ihre Hauptanliegen bei der Bodenfindung bleiben.
quelle
Ich habe eine Open-Source-Implementierung der Pfadfindung in einem 3D-Raster als Teil meines Voxel-Spiel-SDK. Es ist eine Implementierung des A * -Algorithmus, der genau für Umgebungen im Minecraft-Stil und für Voxel-Terrain gedacht ist.
Es ist kein dynamischer Algorithmus, wie andere Leute vorgeschlagen haben, also kann ich Ihnen dort nicht helfen. Ich denke, es hängt davon ab, wie dynamisch deine Welt wirklich ist. Es könnte auch einige Leistungsverbesserungen gebrauchen, da es derzeit einige Sekunden dauern kann, bis ein Pfad gefunden wird, der möglicherweise 100 Voxel lang ist. Möglicherweise können Sie ihn jedoch auf einer heruntergesampelten Version Ihres Volumes ausführen (achten Sie darauf, dass das Downsampling gültig ist) Pfade können erstellt werden / verloren gehen).
Sie können es hier in Aktion sehen http://www.youtube.com/watch?v=C8y0OzL0zpM (das ist jedoch nicht mein Spiel) und die Quelle von http://www.thermite3d.org erhalten .
quelle
Wenn Ihre Welt bereits aus diskreten Blöcken besteht, ist es sinnvoll, diese als Grundlage für Ihre Navigation zu verwenden.
Pfadfinder sind einfache, schnelle Pfadfinder, die etwas schwieriger sind. Der Weg zu folgen und auf die Veränderungen in der Welt zu reagieren, ist die wahre Bosheit.
Es gibt einige Fragen, die Ihnen helfen können, die mögliche Lösung einzugrenzen: - Welche Art von NPCs versuchen Sie zu simulieren? - Wie lange suchen Sie? - Wie genau brauchen Sie?
Wenn Sie kurze Wege haben und die Qualität "besser als lenken" in Ordnung ist, sind lokale Netze [1] eine gute Wahl. Sie sind super schnell, Sie können es sowohl 2D als auch 3D arbeiten lassen. Sie können lokale Rasterdaten direkt aus Ihren Volumendaten abrufen, sodass das Navigationsdiagramm problemlos mit den dynamischen Änderungen synchron bleiben sollte.
Das Problem mit lokalen Gittern besteht darin, dass der Agent möglicherweise stecken bleibt, wenn Sie lokale Minima in Ihrer Welt haben, die größer als Ihr lokales Gitter sind. Es ist möglich, Tricks wie das Hinzufügen von Brotkrumen an Orten auszuführen, an denen Sie lokale Minima erkennen, und diese Orte bei der Suche zu vermeiden.
Wenn Sie lange Wege benötigen, schlage ich eine Art hierarchisches Schema vor. HPA * sollte Ihnen gute Ideen geben, wie Sie spärliche Knoten im Raster einer Welt erstellen können. Lokale Gitter können die Pfadfindung zwischen den Knoten auf hoher Ebene lösen. Wenn Sie Änderungen an der Welt vornehmen, müssen Sie auch die groben Knoten lokal ändern. Sie können die Knoten auch verwenden, um dynamische Änderungen in der Spielwelt zu erkennen und den Pfad neu zu planen.
Wenn Sie eine dynamische Welt haben, wird die Pfadfindung zu einer Statistik. Es gibt keine Garantie mehr, ob der Agent seinen Weg findet. Es ist sehr schwierig, die Veränderungen in der Welt im Auge zu behalten, und die Neuplanung, wenn etwas schief geht, ist träge.
Eskil fährt mit dieser Idee in Love MMO, und sein Pfadfinder ist nur eine Zufallsstichprobe mit Utility-Funktion (ebenso wie seine Aktionsauswahl :)). Ich würde empfehlen, dies zuerst zu tun, wenn es zu Ihrem Spielstil passt.
[1] http://digestingduck.blogspot.com/2010/03/local-navigation-grids.html
quelle
Sie möchten ein Navigationsnetz verwenden, oder wenn die Welt in der Vertikalen besonders laut ist und nicht nur auf Plattformen, oder wenn der Flugmodus mehr als nur Springen oder Schweben ist, können Sie Navigationsvolumen verwenden.
Umleitung ist eine Bibliothek zur Pfadfindung, mit der Sie das Navigationsnetz live aktualisieren können. Ich habe es nie benutzt, ich weiß nicht, wie es auf Ihrer Skala funktioniert. Ein hierarchisches System scheint eine gute Idee zu sein.
Gute Lektüre, wenn Sie darüber nachdenken, Ihre eigenen zu schreiben, ist eine aktuelle Forschung von Brechen Symmetrie . Eine nachdenkliche Lektüre wert!
Es muss überlegt werden, ob Nebel des Krieges die Wegfindungsentscheidungen beeinflussen sollte. Es kann sein, dass sich eine Einheit in einer geraden Linie bewegt, bis sie auf Hindernisse stößt, wenn sie aufgefordert wird, sich in ein neues Gebiet zu bewegen, oder dass die Einheit eine Route mit vollständigem Kartenwissen erstellt. Das ist eine Spielwahl.
Spaß beim Lesen: Pfadfindung ein für alle Mal korrigieren
quelle