Pathfinding dinamico in tempo reale?


19

Attualmente sto facendo alcune ricerche di pathfinding e la mia simulazione è la seguente: ho una scena 3d con un punto iniziale e finale rappresentato, sono in grado di creare mesh di navigazione, waypoint e poligoni per aiutare con il pathfinding.

Ho provato un algoritmo A * e alcune delle sue varianti e funzionano perfettamente. Tuttavia, ora sono più interessato al pathfinding "dinamico". Ad esempio, mentre trovo un percorso dal punto A al punto B, se appare improvvisamente un nuovo ostacolo, voglio che il mio algoritmo sia in grado di riprogrammare immediatamente un percorso e non ricominciare a cercare da zero.

Ho fatto alcune letture sull'algoritmo D * e mi chiedevo se questo sarebbe appropriato per quello di cui ho bisogno o sembrerebbe un eccessivo.

Quindi le mie domande sono fondamentalmente: quale algoritmo sarebbe meglio per la ricerca dinamica dei percorsi in tempo reale? O quale combinazione di tecniche potrei usare invece?


Non sono sicuro dell'algoritmo che usano, quindi questa non è una risposta, ma immagino che questo sia ciò che stai cercando di emulare: video di YouTube
MichaelHouse

Che ne dici di estendere A *? Estendere ciò che è memorizzato nei nodi dei suoi insiemi aperti / chiusi di ciò che si desidera ed estendere A * per considerarlo.
user712092

Stavo cercando la risposta come te e ho trovato un articolo su HPA * ed è relativo al videogioco. Sto ancora cercando un articolo e probabilmente lo implementerò. Finora ha senso per me migliorare le prestazioni e può essere utilizzato sia in ambiente statico che dinamico. Ecco l' articolo
NelsonPunch

Risposte:


19

D * è piuttosto coinvolto: non consiglio di provare a implementarlo. Anche quando i progetti sono ben finanziati e sviluppati da persone intelligenti / esperte, viene utilizzato D * lite, perché D * è un tale dolore da ottenere nel modo giusto.

Potresti essere interessato a questa presentazione, che include la discussione sul pathfinding di Left 4 Dead:

http://www.valvesoftware.com/publications/2009/ai_systems_of_l4d_mike_booth.pdf

Un approccio consiste nell'utilizzare una ricerca A * di livello approssimativo per ottenere un percorso generale per un agente, quindi eseguire una ricerca A * di livello dettagliato per l'ambiente locale di un agente. In questo modo, è possibile ricalcolare rapidamente la ricerca A * del dettaglio del campo se il terreno cambia, quindi ricalcolare rapidamente la ricerca A * del dettaglio fine per un piccolo segmento dell'ambiente. Questo non è perfetto Funziona fintanto che i tuoi ostacoli non possono bloccare più nodi grafici dei dettagli del percorso, il che va bene per la maggior parte dei giochi. Questo è il metodo che consiglio se hai meno di 100 agenti.

Se vuoi supportare centinaia o migliaia di agenti, puoi implementare qualcosa come le folle di continuum. Vedi questa ricerca: http://grail.cs.washington.edu/projects/crowd-flows/ Che discute di un metodo basato esclusivamente sulla CPU in grado di supportare migliaia di attori in un ambiente dinamico.

Se si desidera supportare decine di migliaia o centinaia di migliaia di agenti, è possibile implementare qualcosa come le folle di continuum, con l'assistenza della GPU. Vedi qui per la ricerca pertinente: https://a248.e.akamai.net/f/674/9206/0/www2.ati.com/misc/siggraph_asia_08/GPUCrowdSimulation_SLIDES.pdf

Ecco un video che mostra la folla di continuum in azione: http://www.youtube.com/watch?v=lGOvYyJ6r1c (Vai a 4:10 per vedere grandi ostacoli dinamici come automobili e semafori che colpiscono centinaia di persone che camminano per una città).


Grazie per i collegamenti. D * Lite sembra proprio quello che ho letto
Andrei,

9

Hai esaminato comportamenti di guida semplici?

http://www.red3d.com/cwr/steer/

Puoi usarli per virare dal tuo percorso A * per evitare gli ostacoli locali e poi tornare sul tuo percorso una volta che hai finito.

È anche abbastanza facile combinare comportamenti multipli.


+1. Non sono sicuro del motivo per cui è stato annullato il voto. Anche se questa è semplice, e forse non la risposta che cercava il richiedente, penso che sia in tema e l'ho trovato utile :)
Olhovsky,

1
Ho letto e implementato questo comportamento di guida nel nostro ultimo gioco. Ora lo sostituiremo di nuovo con altri metodi. Penso che non funzioni bene insieme a percorsi ottimali precomposti. La "combinazione" di comportamenti multipli di solito produce risultati negativi. Se hai ancora intenzione di usarlo, non tentare di guidare e seguire il tuo percorso allo stesso tempo. Passa invece al 100% di sterzo e al 100% indietro una volta superato l'ostacolo.
Imi,

4

Dato che il tuo post si trova nella parte "Sviluppo del gioco" dello scambio di stack, ecco cosa la maggior parte dei programmatori di giochi ti risponderebbe: non si tratta di Real Time Dynamic Pathfinding, ma di Real Time Dynamic Path * che segue *!

Alcuni casi limite in cui un bordo sul grafico di navigazione è totalmente ostruito richiederebbe al pathfinder di ricalcolare un altro percorso, ma la maggior parte delle volte puoi semplicemente guidare le tue entità attorno agli ostacoli, facendo la previsione della posizione ed evitando nella giusta direzione. Per la maggior parte dei giochi, sarebbe troppo pesante prevedere nel tempo la posizione degli agenti dinamici, soprattutto perché non è possibile prevedere con precisione le azioni dei giocatori o le decisioni degli agenti.

Quindi, il mio consiglio sarebbe di iniziare implementando Steering Behaviors (http://red3d.com/cwr/steer/), gestire i casi in cui il percorso diventa impossibile e quindi aggiungere uno strato sopra di esso per gestire i casi limite che non sono " t gestito dalle due soluzioni precedenti.

Spero che sia di aiuto


Uh, no. "Percorso seguito" è lo stesso della ricerca percorso. Esistono molti approcci che consentono di seguire in tempo reale migliaia di agenti quando gli ostacoli cambiano, su un PC desktop. Certamente non è troppo costoso trovare un percorso per un singolo agente, quando gli ostacoli si spostano. Ecco uno di questi approcci, tra i tanti: grail.cs.washington.edu/projects/crowd-flows Esistono versioni accelerate GPU di folle di continuum.
Olhovsky,

Non dovrei essere d'accordo su questo. Qualsiasi motore tratterà la ricerca del percorso e il percorso seguito come due problemi distinti, in cui il primo è una ricerca grafica dell'area navigabile e l'altro intende cercare il vettore di movimento ottimale all'interno dello spazio locale. Ho lavorato su tale simulazione di folla producendo middleware utilizzato dai giochi AAA senza dover fare affidamento sulla GPU. La maggior parte delle implementazioni utilizzerà un campo di flusso (il pathfinder) e lo sterzo per seguire il flusso ed evitare altri agenti (il pathfollower). Come affermato dalla mia risposta, questa è una risposta "programmatore di giochi", non una risposta accademica.
emartel

So che non hai bisogno della GPU per le folle di contiuum, motivo per cui ho collegato una versione basata su CPU. La descrizione del percorso che segue è ancora una ricerca di ricerca dei percorsi, è solo una ricerca di ricerca dei percorsi a un livello di dettaglio diverso, su un set di dati diverso. Quindi quello che hai davvero è un passaggio per l'individuazione dei dettagli del corso e un passaggio per l'individuazione dei dettagli. Alla fine stai cercando di trovare il percorso che un attore dovrebbe seguire. Inventare nuovi termini per questo confonde semplicemente le cose.
Olhovsky,

1
Mi dispiace ma "seguire il percorso" non è un termine inventato. Leggi i documenti prodotti dall'industria e li vedrai riutilizzati più volte: link o link solo per collegarne alcuni. Sfortunatamente non posso collegarti a documentazioni protette dalla NDA di motori / software ampiamente utilizzati nel settore.
emartel

1
Il tuo primo link è il link che ho dato nella mia risposta tra l'altro. Va bene abbastanza, potrebbe essere giusto descrivere quel tipo di ricerca del percorso come seguire il percorso. Alla fine entrambi stanno cercando di trovare il percorso da seguire, ma penso che in questo caso mi sbagli, e dovremmo chiamare ciò che vediamo nel tuo secondo link come percorso che segue. Ad esempio, l'atto di collegare punti del percorso grossolano con spie cubiche / curve di Biezer / inserire qui il metodo. Detto questo, sono ancora fortemente in disaccordo sul fatto che non è possibile attuare la ricerca di percorsi intorno a ostacoli dinamici, come sembra suggerire la tua risposta.
Olhovsky,
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.