Pathfinding des Kosakenspiels

7

Cossacks (veröffentlicht im Jahr 2002) ist ein RTS-Spiel, in dem Sie riesige Armeen (einige Tausend Männer pro Spieler) auf wirklich großen Karten aufbauen können. Stellen Sie sich Age of Empires 2 für wenige Spieler auf der Ludikris-Karte ohne Verzögerung vor, mit 8000 Einheiten auf der Karte (oder einer noch größeren Karte mit noch mehr Einheiten!). Interessant ist die Tatsache, dass das Spiel nicht ins Stocken gerät, wenn Sie diese riesige Armee in die andere Ecke der Karte schicken. Einheiten bewegen sich gerade in Richtung ihrer Zielposition. Es gibt Hindernisse auf dem Weg, wie Hügel, Gebäude, Mauern usw., die von Einheiten vermieden werden.

Es gibt jedoch ein Problem bei der Pfadfindung - manchmal gehen Einheiten einfach um Hügel hin und her, was darauf hindeuten könnte, dass die gesamte Pfadlänge in kleinere Teile unterteilt ist und die Einheiten verwirrt werden. Trotzdem ist das eine enorme Menge an Berechnungen, die für eine Armee von ein paar tausend Mann durchgeführt werden müssen, wirklich beeindruckend.

Haben Sie eine Idee, wie eine solche reibungslose (in Bezug auf die Leistung) Wegfindung erreicht werden konnte / konnte?

Mithras
quelle

Antworten:

8

Ich weiß nicht, welche Technik speziell bei Kosaken angewendet wurde, aber ich denke, Sie interessieren sich auch allgemein für das vorliegende Problem. Tatsächlich gibt es heutzutage Möglichkeiten, wie ein solches Ergebnis erzielt werden kann - obwohl natürlich in anspruchsvollen Szenarien fortgeschrittene Techniken erforderlich sind.

Insgesamt sind zwei der Hauptengpässe bei der Implementierung der Pfadfindung in dem von Ihnen beschriebenen Kartentyp: Anzahl der Agenten und Größe des zu durchsuchenden Bereichs (Pfadfindung = Suche nach einem brauchbaren oder kürzesten Pfad).

  1. Der Ansatz Nummer eins in einer solchen Situation besteht darin, die Größe des Problems zu verringern, dh weniger zu suchen und in niedrigeren Bereichen zu suchen.

    1a) Zum einen bedeutet das Suchen in niedrigeren Bereichen das Reduzieren der möglichen Pfade, die in einem Pfadfindungsschritt bewertet werden müssen. Dafür wird häufig eine räumliche Aufteilung verwendet. Die Szene ist in Bereiche unterteilt, so dass die Pfadfindung jeweils in kleineren Suchräumen durchgeführt werden kann. Es gibt auch Suchalgorithmen wie HPA * und HAA *, die inhärent eine hierarchische Pfadfindung implementieren, indem sie die Szene partitionieren.

    1b) Auf der anderen Seite bedeutet weniger suchen, dass nur einige Agenten gleichzeitig nach Pfaden suchen. Ein nützlicher Trick besteht darin, den Eindruck einer höheren Anzahl von Agenten zu erwecken, die einen Pfad finden als der reale. Zum Beispiel gibt es in einigen Spielen Trupps einer bestimmten Anzahl von Soldaten, bei denen die Wegfindung tatsächlich pro Trupp und nicht pro Soldat erfolgt. Wenn Sie an einen Trupp mit 10 Soldaten denken, reduziert dies allein die Wegfindung um eine Größenordnung. Sobald der Weg des Trupps gefunden ist, muss jeder Soldat Hindernissen auf die Art und Weise ausweichen - was bedeutet, dass Kollisionen pro Soldat vermieden werden.

  2. Ich habe oben die Kollisionsvermeidung erwähnt. Beachten Sie, dass der Großteil der häufigen CPU-Arbeit der vielen Einheiten in der von Ihnen beschriebenen Situation wahrscheinlich nicht auf die Pfadfindung an sich zurückzuführen ist, sondern auf die Vermeidung von Hindernissen während der Pfadverfolgungsphase. Aber Hügel, Gebäude usw. sind nie sehr zahlreich. Das eigentliche Problem entsteht, wenn Agenten sich gegenseitig meiden müssen.

    Dies kann in der Tat die Leistung beeinträchtigen, wenn Tausende von Agenten gleichzeitig die Kollision vermeiden. Hier können aber auch Tricks angewendet werden. Erstens müssen Agenten nur die Agenten und Gebäude meiden, die sich in der Nähe befinden. Zweitens kann es in einigen Spielen (insbesondere in isometrischen Spielen) eine gewisse Toleranz dafür geben, wie viel Agenten tatsächlich miteinander kollidieren (oder sich sogar überlappen) können, da der Kamerawinkel dies verschleiert. In einigen älteren Spielen könnten Einheiten einfach "übereinander gehen" - was bedeutet, dass ein Agent den Weg der anderen nicht vollständig blockiert.

    Moderne Anwendungen können auch eine beeindruckende Anzahl von Akteuren verarbeiten, die gleichzeitig eine Kollision vermeiden. Beispiel: https://www.youtube.com/watch?v=Hc6kng5A8lQ oder laden Sie ein ORCA-Algorithmusbeispiel mit 25000 Agenten in einer wirklich großen Menge herunter und sehen Sie es sich an: http://gamma.cs.unc.edu/ORCA/videos/ ORCA-3.wmv

  3. In Spielen mit einer großen Anzahl kämpfender Einheiten sterben viele Einheiten. Und schnell sterben. Oft muss die Masse der Einheiten sogar zu viele Hindernisse vermeiden.

  4. In Supreme Commander 2 (2010) wurde eine Technik namens Flow Field Path Finding eingeführt, die erstmals die RTS-Steuerung einer großen Anzahl von Agenten mit individuellem Verhalten ermöglichte: Wie funktioniert die Flow Field Path Finding ?

MAnd
quelle
Vielen Dank für Ihre Antwort. :) Ich bin wirklich neugierig, wie es speziell in Kosaken gemacht wurde (und möchte dieses Verhalten nachahmen), aber ich werde trotzdem andere Lösungen prüfen. :) Soweit ich mich erinnere, werden andere Agenten nicht vermieden (wenn zwei Einheiten miteinander kollidieren, passen sie ihre aktuelle Position an, um an einem solchen "Hindernis" vorbeizukommen), daher denke ich, dass 1b und 2 aus diesem Grund verworfen werden könnten Grund. 4 (und auch 2) sind ziemlich "neu", daher denke ich, dass ich diese zumindest vorerst auch fallen lassen werde. 1a scheint für mich am nützlichsten zu sein, also fange ich mit diesem an.
Mithras