Individuazione efficiente del percorso nello spazio libero


12

Ho un gioco situato nello spazio e mi piacerebbe impartire ordini di movimento, che richiede l'individuazione del percorso. Ora, capisco che A * e simili si applicano principalmente agli alberi e non allo spazio vuoto che non ha nodi di pathfinding. Ho alcuni ostacoli, che attualmente sono espressi come AABB fissi, cioè non esiste alcun ostacolo "terreno" illimitato. Inoltre, mi aspetto che la maggior parte degli ostacoli sia ragionevolmente approssimabile come cubi o sfere.

Quindi ho pensato di applicare un algoritmo di pathfinding molto più semplice, ovvero semplicemente lanciare un raggio dalla posizione corrente a quella di destinazione, e quindi posso ottenere un elenco di ostacoli usando il partizionamento spaziale relativamente rapidamente. Ciò di cui non sono così sicuro è come determinare la parte in cui l'unità ordinata si muove intorno agli ostacoli.

Ciò a cui ho pensato finora è che userò semplicemente campi potenziali, ovvero tutte le unità sentiranno una forte forza repulsiva allontanarsi l'una dall'altra e una forza moderata verso il punto desiderato. Questo ha anche il vantaggio di emettere ordini di gruppo, posso semplicemente ordinare una forza di medio livello verso un'altra entità. Ma questo ovviamente non raggiungerà la soluzione ottimale.

I campi potenziali raggiungeranno un'approssimazione ragionevole dati i miei parametri o avrò bisogno di un'altra soluzione?

Risposte:


7

Mentre i potenziali campi potrebbero funzionare, immagino che avrai problemi con percorsi non ottimali e "minimi locali" in cui le tue unità saranno intrappolate da ostacoli circostanti. A * è adatto per ambienti 3D open space. Diventa semplicemente un problema di generazione di una mesh di navigazione adatta alle tue esigenze. Puoi persino usare strutture come Octrees per i nodi di navigazione. Più piccola è la dimensione massima di ciascun ottante, più agevole è il percorso. Dai un'occhiata a questo articolo dai giochi Face to Face (ora defunti, aggiunto link di ritorno). Un * combinato con l'ottimizzazione del percorso (come le scorciatoie della linea di vista) e i comportamenti di guida e sarai a posto! Vedi l'immagine qui sotto come esempio di utilizzo di un ottetto per i nodi del percorso:


Come si ridimensionerà a mappe più grandi? Se avessi una mappa doppia rispetto a ciascuna dimensione, avrei bisogno di un numero di nodi otto volte maggiore, il che sarebbe problematico.
DeadMG

Non necessariamente. È possibile mantenere le dimensioni del nodo grandi fino a quando la ricerca non si avvicina ad essa. Ciò ti consente di mantenere i nodi che non ti interessano piuttosto grandi e pochi in numero.
MichaelHouse

Una bella proprietà di maglie di navigazione nello spazio vuoto è l'uguaglianza dei costi di viaggio; potresti essere in grado di utilizzare A * JPS
Will

@Will: Ho fatto un po 'di googling, ma non ho davvero capito l'unico algoritmo di pathfinding che è venuto fuori. Ti interessa pubblicare una risposta?
DeadMG

@DeadMG questa è la spiegazione definitiva: harablog.wordpress.com/2011/09/07/jump-point-search <br/> Se riesci ad implementare A *, puoi quindi aggiornare JPS su di esso in modo abbastanza semplice. Eseguire prima A * e aggiungere JPS come ottimizzazione.
Sarà il
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.