Come funziona il pathfinding nei giochi RTS?


42

[crossposted da stackoverflow]

In un gioco come Warcraft 3 o Age of Empires, i modi in cui un avversario AI può muoversi sulla mappa sembrano quasi illimitati. Le mappe sono enormi e la posizione degli altri giocatori è in continua evoluzione.

Come funziona la ricerca del percorso AI in giochi come questi? Metodi di ricerca di grafici standard (come DFS, BFS o A *) sembrano impossibili in una tale configurazione.


2
Perché A * non dovrebbe funzionare in questo grafico?
user712092


1
@tenfour, il collegamento è interrotto ora.
Montreal,

Risposte:


29

Nella maggior parte dei casi, l'uso di A * su una mesh di navigazione (comunemente definita "navmesh") è la soluzione di pathfinding utilizzata dagli RTS commerciali. Vi è una spiegazione dettagliata di come funzionano le reti navali, perché rappresentano una soluzione migliore rispetto ai sistemi waypoint e i collegamenti alle risorse di implementazione, qui .

Se stai pianificando di sviluppare modalità di gioco speciali (acquisizione di punti / nodi) o unità che pattugliano, riparano, ecc., Probabilmente vorrai implementare un livello di waypoint in cima alla tua navmesh, per controllare il comportamento dell'IA ( non il pathfinding ).


17

Controlla il campo di portata algoritmo utilizzato in Supreme Commander 2. Si fa un lavoro molto migliore rispetto alla maggior parte dei sistemi RTS pathfinding do (passate alla 00:50 per un paio di esempi.)


4
è una demo davvero interessante, ma non mi dice nulla dell'implementazione stessa
MetaGuru,

4
Hanno menzionato in una frase: si basa sulla ricerca sul flusso di folla di UW, che puoi trovare su grail.cs.washington.edu/projects/crowd-flows .

L'algoritmo flowfield sembra piuttosto interessante, e sicuramente sembra fare un lavoro di tracciamento molto migliore rispetto alla maggior parte degli algoritmi, ma vorrei che ci fosse una documentazione pubblica su come funzionava il sistema stesso, non solo su come funziona il sistema. Naturalmente, ci sono molte domande che gli sviluppatori dovrebbero porre prima di implementare un sistema di base come questo, ma, in questo caso, sembra che l'unico modo per rispondere a queste domande sia implementare prima il sistema. :(
Ari Patrick,

2
@Kragen: hai davvero bisogno solo di due unità prima che la semplice A * (specialmente waypoint) le faccia sbattere ripetutamente l'una sull'altra, e hai bisogno di un qualche sistema per aggirarlo.

5
Basato sul video, il pathfinding di Starcraft 2 si presenta così. SC2 utilizza flowfield?
Chris Bui,

7

Molti giochi più vecchi usano A *. Lo Starcraft originale utilizzava A *; che ha portato ad alcuni problemi nella gestione delle collisioni. Starcraft 2 gestisce molto bene la collisione, usando un comportamento di swaming / floccaggio per mantenere il controllo fluido di grandi gruppi. Questo articolo di Gamedev discute come questo potrebbe essere raggiunto.


2

Sono d'accordo sulle altre risposte che lei ha già, ma anche, provo a pensare a WoW / Warcraft3 come a veri e propri mondi 2D. Non sono così diversi da quelli a base di piastrelle, sono solo le piastrelle.

Potresti anche pensare a come un GPS trova il percorso migliore? ci sono un sacco di algortimn per la ricerca di percorsi attraverso mappe collegate.

Penso che anche alcuni dei primi script "Quake bot" potrebbero esserti utili, poiché sono stati sviluppati per funzionare in "aree sconosciute" perché potremmo progettare i nostri livelli da zero.

Tutto sommato, il mio modo personale di gestire una simile mappa sarebbe di considerarla come il pathfinder A *. Ma prima vorrei pre-calcolare ogni "punto di tessera" e indicizzarli tutti con "il vicino più vicino" ecc. Poi, quando un oggetto doveva andare da A a B, quindi basta cercare in B, vedere a cosa è collegato e continuare a ripetere fino a quando raggiungere l'obiettivo.

A seconda del tipo di gioco e del paesaggio / scenario, potrebbero essere utili anche diverse tattiche pre-scan. Alcuni giochi hanno pochissimi ostacoli e questi possono essere movimenti "streight line" + alcuni "come posso aggirare" gli oggetti.

Spero che questo abbia un senso e forse ti abbia dato alcuni pensieri con cui lavorare.


1

La maggior parte dei giochi utilizza una sorta di algoritmo di ricerca o A * per trovare percorsi su una mappa. L'intelligenza artificiale è ottimizzata in alcuni aspetti ovviamente per motivi di prestazioni.

Lo noterai in Starcraft 2, dove Zerglings ovviamente non percorre affatto bene il percorso, sarebbe un incubo per CPU farlo per Zerglings. Fanno solo del loro meglio per andare da A a B e non tentano nemmeno di trovare il percorso migliore. Si avvicinano il più possibile, quindi collo di bottiglia agli strozzatori o alle rampe.


1

La mappa è una griglia. La griglia è un grafico. A * funziona sul grafico, è un algoritmo di ricerca di grafici. A * dovrebbe cercare alcuni nodi del grafico.

Come è stato menzionato, possono usare la mesh di navigazione. Ma A * (o qualcosa di simile) sarà comunque in cima a quella mesh, perché i poligoni di questa mesh sono solo nodi di un grafico; Un * cercherà quindi il percorso da un poligono a un altro poligono.

Non sono sicuro di Warcraft o dei giochi commerciali, ma esiste anche una tecnica chiamata Collaborative Diffusion ed è molto semplice; di solito viene eseguito sulla griglia. Esiste anche una tecnica chiamata Potential Fields , che è molto simile alla precedente se non uguale.

Potresti anche provare:

  • se alcuni di questi giochi hanno codice sorgente disponibile
  • se alcuni dei cloni di questi giochi hanno una fonte disponibile
  • se SDK o editor non suggeriscono qualcosa
  • chiedi ai datori di lavoro delle aziende che realizzano questi giochi, alcuni di loro potrebbero essere disposti a condividerli

0

Non ho assolutamente esperienza, ma penso che una buona soluzione si basi sull'euristica, non su un controllo completo della mappa conosciuta. Le euristiche a cui riesco a pensare sono basate a livello locale e basate sull'esperienza. I controlli locali possono essere basati sul controllo del terreno locale e sugli ostacoli, continuando a muoversi verso la direzione richiesta. Penso che la maggior parte delle mappe non richieda movimenti complessi simili a labirinti, ma siano piuttosto connessi. Un altro euristico consiste nell'utilizzare percorsi noti precedenti (esplorati da altre unità o esplicitamente dall'utente) per spostare le unità in posizioni note o quasi note. Ma sto parlando di spostarsi su grandi mappe, non proprio in spazi chiusi come ha detto ZorbaTHut. In casi affollati l'algoritmo può essere più complesso, che richiede una sorta di "previsione", coordinamento tra unità della stessa squadra o solo strategie di attesa simili a semafori. Anche,

Penso che gli algoritmi euristici siano buoni perché di solito forniscono una buona soluzione su grandi spazi con un tempo di calcolo ragionevole (che conta, quando si spostano molte unità).

Scusate se questa è una risposta generica: ho lavorato con la folla, ma lo spazio era piuttosto singolare e non posso spiegare esattamente come funzionasse l'algoritmo (era basato su agenti, comunque, non definito globalmente). Spero che tu possa ottenere alcune idee utili dalla mia risposta.


Mmmh mi chiedo cosa ci fosse di sbagliato in quello che ho detto ... È stato troppo difficile mettere un commento?
AkiRoss,

A proposito, vorrei sottolineare che A * usa un approccio euristico. Grazie per il -2.
AkiRoss,

La tua risposta equivale a "Ditch A * e il suo simile e lancia il tuo". Questo può essere l'inizio di una risposta ragionevole, ma fornisci pochissime informazioni oltre al suggerimento. Pensa che il motivo del voto negativo sia che non chiarisci quanto sia difficile implementare la tua soluzione. Non dubito che un super genio con un tempo illimitato potrebbe codificare / mettere a punto un algoritmo di pathing per un dato RTS che sarebbe superiore ad A * su una rete navale. Ma "genio" e "illimitato" sono molto difficili da trovare.
deft_code

Oh giusto. Pensavo che il ragazzo volesse una risposta generica, dal momento che non ha chiesto come crearne una, ma come funzionano in generale. Comunque non sono un esperto come ho detto: stavo solo dando alcune informazioni sulle soluzioni che conosco sull'esplorazione di grandi spazi in un'applicazione IA generale. Grazie per il tuo commento.
AkiRoss
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.