Ich mache derzeit einige Untersuchungen zur Wegfindung und meine Simulation sieht folgendermaßen aus: Ich habe eine 3D-Szene mit einem dargestellten Start- und Endpunkt. Ich kann Navigationsnetze, Wegpunkte und Polygone erstellen, um die Wegfindung zu erleichtern.
Ich habe einen A * -Algorithmus und einige seiner Varianten ausprobiert und sie funktionieren perfekt. Jetzt interessiere ich mich jedoch mehr für die "dynamische" Wegfindung. Wenn zum Beispiel ein Pfad von Punkt A nach Punkt B gefunden wird und plötzlich ein neues Hindernis auftaucht, möchte ich, dass mein Algorithmus in der Lage ist, einen Pfad sofort neu zu planen und nicht erneut von vorne zu suchen.
Ich habe etwas über den D * -Algorithmus gelesen und mich gefragt, ob dies für das, was ich brauche, angemessen wäre oder wie ein Overkill erscheinen würde.
Meine Fragen lauten also im Wesentlichen: Welcher Algorithmus ist am besten für die dynamische Pfadfindung in Echtzeit geeignet? ODER welche Kombination von Techniken könnte ich stattdessen verwenden?
quelle
Antworten:
D * ist ziemlich involviert - ich empfehle nicht zu versuchen, es zu implementieren. Sogar bei Projekten, die gut finanziert sind und von klugen / erfahrenen Leuten entwickelt werden, wird D * lite verwendet, weil es so schwierig ist, mit D * richtig umzugehen.
Sie könnten an dieser Präsentation interessiert sein, die eine Diskussion über die Wegfindung von Left 4 Dead beinhaltet:
http://www.valvesoftware.com/publications/2009/ai_systems_of_l4d_mike_booth.pdf
Ein Ansatz besteht darin, eine grobe Suche der Ebene A * zu verwenden, um einen allgemeinen Pfad für einen Agenten abzurufen, und dann eine Feineinzelheitssuche der Ebene A * für die lokale Umgebung eines Agenten durchzuführen. Auf diese Weise können Sie die Suche nach Kursdetails A * schnell neu berechnen, wenn sich das Gelände ändert. Anschließend können Sie die Suche nach feinen Details A * schnell nach einem kleinen Segment der Umgebung neu berechnen. Das ist nicht perfekt. Dies funktioniert so lange, wie Ihre Hindernisse nicht mehrere Kursdetail-Diagrammknoten blockieren können, was für die meisten Spiele in Ordnung ist. Dies ist die Methode, die ich empfehle, wenn Sie weniger als 100 Agenten haben.
Wenn Sie Hunderte oder Tausende von Agenten unterstützen möchten, können Sie so etwas wie Continuum Crowds implementieren. Sehen Sie sich diese Studie an: http://grail.cs.washington.edu/projects/crowd-flows/ Hier wird eine rein CPU-basierte Methode beschrieben, die Tausende von Akteuren in einer dynamischen Umgebung unterstützen kann.
Wenn Sie Zehntausende oder Hunderttausende von Agenten unterstützen möchten, können Sie mit GPU-Unterstützung so etwas wie Continuum Crowds implementieren. Hier finden Sie relevante Informationen: https://a248.e.akamai.net/f/674/9206/0/www2.ati.com/misc/siggraph_asia_08/GPUCrowdSimulation_SLIDES.pdf
Hier ist ein Video, in dem die Massen des Kontinuums in Aktion demonstriert werden: http://www.youtube.com/watch?v=lGOvYyJ6r1c (Fahren Sie mit 4:10 fort, um große dynamische Hindernisse wie Autos und Ampeln zu sehen, die Hunderte von Menschen betreffen, die in einer Stadt herumlaufen.)
quelle
Haben Sie sich einfaches Lenkverhalten angesehen?
http://www.red3d.com/cwr/steer/
Sie können sie verwenden, um von Ihrem A * -Pfad abzuweichen, um lokale Hindernisse zu vermeiden, und dann auf Ihren Pfad zurücklenken, wenn Sie fertig sind.
Es ist auch ziemlich einfach, mehrere Verhaltensweisen zu kombinieren.
quelle
Da sich Ihr Beitrag im Bereich "Spieleentwicklung" des Stapelaustauschs befindet, antworten Ihnen die meisten Spieleprogrammierer auf folgende Fragen: Es geht nicht um die dynamische Pfadfindung in Echtzeit, es geht um die dynamische Pfadfindung in Echtzeit * nach *!
Einige Kantenfälle, in denen eine Kante in Ihrem Navigationsdiagramm vollständig verdeckt ist, erfordern, dass der Pathfinder einen anderen Pfad berechnet. Meistens können Sie Ihre Objekte jedoch einfach um die Hindernisse herum lenken, die Position vorhersagen und in die richtige Richtung ausweichen. Für die meisten Spiele wäre es zu schwer, die Position dynamischer Agenten im Laufe der Zeit vorhersagen zu müssen, zumal man Spieleraktionen oder Agentenentscheidungen nicht genau vorhersagen kann.
Daher würde ich raten, zunächst das Lenkverhalten (http://red3d.com/cwr/steer/) zu implementieren, Fälle zu behandeln, in denen der Pfad unmöglich wird, und dann eine Ebene darüber hinzuzufügen, um Randfälle zu behandeln, die nicht vorhanden sind. t von den beiden vorherigen Lösungen behandelt.
Hoffe das hilft
quelle