Pathfinding dinâmico em tempo real?

19

Atualmente, estou fazendo uma pesquisa de busca de caminhos e minha simulação é a seguinte: Eu tenho uma cena 3D com um ponto inicial e final representado, sou capaz de criar malhas de navegação, waypoints e polígonos para ajudar na busca de caminhos.

Eu tentei um algoritmo A * e algumas de suas variantes e elas funcionam perfeitamente. No entanto, agora estou mais interessado em encontrar caminhos 'dinâmicos'. Por exemplo, ao encontrar um caminho do ponto A ao ponto B, se um novo obstáculo aparecer repentinamente, quero que meu algoritmo possa imediatamente planejar novamente um caminho e não começar a pesquisar do zero novamente.

Eu li algumas vezes o algoritmo D * e me perguntei se isso seria apropriado para o que eu precisava ou isso pareceria um exagero.

Então, minhas perguntas são basicamente: Qual algoritmo seria melhor para o Pathfinding dinâmico em tempo real? OU que combinação de técnicas eu poderia usar?

Andrei
fonte
Não sei ao certo qual algoritmo eles usam, então isso não é uma resposta, mas imagino que seja isso que você está tentando imitar: vídeo do youtube
MichaelHouse
Que tal estender A *? Estendendo o que é armazenado nos nós de seus conjuntos abertos / fechados pelo que você deseja e estendendo A * para considerá-lo.
user712092
Eu estava procurando a resposta da mesma forma que você e encontrei um artigo sobre o HPA * e está relacionado ao videogame. Ainda estou procurando artigo e provavelmente vou implementá-lo. Até agora, faz sentido para mim melhorar o desempenho e pode ser usado em ambientes estáticos e dinâmicos. Aqui está o artigo
NelsonPunch

Respostas:

19

D * está bastante envolvido - não recomendo tentar implementá-lo. Mesmo quando os projetos são bem financiados e estão sendo desenvolvidos por pessoas inteligentes / experientes, o D * lite é usado, porque D * é uma dor para acertar.

Você pode estar interessado nesta apresentação, que inclui uma discussão sobre o caminho do Left 4 Dead:

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

Uma abordagem é usar uma pesquisa grosseira de nível A * para obter um caminho geral para um agente e, em seguida, fazer uma pesquisa fina no nível A * para o ambiente local de um agente. Dessa forma, você pode recompilar rapidamente a pesquisa A * dos detalhes do curso, se o terreno mudar e, em seguida, recompilar rapidamente a pesquisa A * de detalhes finos para um pequeno segmento do ambiente. Isto não é perfeito. Funciona desde que seus obstáculos não possam bloquear vários nós gráficos de detalhes do percurso, o que é bom para a maioria dos jogos. Esse é o método recomendado se você tiver menos de 100 agentes.

Se você deseja oferecer suporte a centenas ou milhares de agentes, pode implementar algo como multidões contínuas. Veja esta pesquisa: http://grail.cs.washington.edu/projects/crowd-flows/ Que discute um método puramente baseado em CPU que pode suportar milhares de atores em um ambiente dinâmico.

Se você deseja oferecer suporte a dezenas de milhares ou centenas de milhares de agentes, pode implementar algo como multidões contínuas, com assistência da GPU. Consulte aqui a pesquisa relevante: https://a248.e.akamai.net/f/674/9206/0/www2.ati.com/misc/siggraph_asia_08/GPUCrowdSimulation_SLIDES.pdf

Aqui está um vídeo demonstrando multidões contínuas em ação: http://www.youtube.com/watch?v=lGOvYyJ6r1c (pule para 4:10 para ver grandes obstáculos dinâmicos, como carros e semáforos, afetando centenas de pessoas andando pela cidade).

Olhovsky
fonte
Obrigado pelos links. D * Lite parece certo do que eu tenho lido
Andrei
9

Você já observou comportamentos simples de direção?

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

Você pode usá-los para se desviar do seu caminho A *, a fim de evitar obstáculos locais, e depois voltar ao seu caminho assim que terminar.

Também é bastante fácil combinar vários comportamentos.

BigSandwich
fonte
+1. Não sei por que isso foi prejudicado. Embora isso é simples e, possivelmente, não é a resposta que o consulente estava procurando, eu acho que é sobre o tema e eu achei que seria útil :)
Olhovsky
11
Eu li e implementei esse comportamento de direção em nosso último jogo. Agora vamos substituí-lo novamente por outros métodos. Eu acho que não funciona bem em conjunto com caminhos ótimos pré-compostos. A "combinação" de múltiplos comportamentos geralmente produz resultados ruins. Se você ainda planeja usá-lo, não tente dirigir e seguir seu caminho ao mesmo tempo. Em vez disso, mude para a direção 100% e volte a 100% quando passar pelo obstáculo.
18712 Imi
4

Como sua postagem está na parte "Desenvolvimento de jogos" da troca de pilhas, eis o que a maioria dos programadores de jogos responderia: Não se trata de busca dinâmica de caminhos em tempo real, trata-se de um caminho dinâmico em tempo real * a seguir *!

Em alguns casos de borda em que uma borda no gráfico de navegação está totalmente obstruída, o pathfinder deve recalcular outro caminho, mas na maioria das vezes você pode simplesmente orientar suas entidades em torno dos obstáculos, fazendo a previsão de posição e evitando na direção certa. Para a maioria dos jogos, seria muito pesado ter que prever ao longo do tempo a posição dos agentes dinâmicos, especialmente porque você não pode prever com precisão as ações dos jogadores ou as decisões dos agentes.

Portanto, meu conselho seria começar implementando o Steering Behaviors (http://red3d.com/cwr/steer/), lidar com casos em que o caminho se torna impossível e, em seguida, adicionar uma camada em cima dele para lidar com casos extremos que não são ' tratado pelas duas soluções anteriores.

Espero que isto ajude

emartel
fonte
Oh não. "Caminho a seguir" é o mesmo que encontrar o caminho. Existem muitas abordagens que permitem o acompanhamento em tempo real de milhares de agentes quando os obstáculos estão mudando, em um PC de mesa. Certamente, não é muito caro encontrar um caminho para um único agente, quando os obstáculos se movem. Aqui está uma dessas abordagens, de muitas: grail.cs.washington.edu/projects/crowd-flows Existem versões aceleradas por GPU de multidões contínuas.
Olhovsky
Eu teria que discordar disso. Qualquer mecanismo tratará a localização do caminho e o caminho a seguir como dois problemas distintos, onde o primeiro é uma pesquisa gráfica da área navegável e o outro pretende pesquisar o vetor de movimento ideal no espaço local. Eu trabalhei nessa simulação de multidão produzindo middleware usado por jogos AAA sem precisar confiar na GPU. A maioria das implementações usará um campo de fluxo (o pathfinder) e a direção para seguir o fluxo e evitar outros agentes (o pathfollower). Como minha resposta afirmou, esta é uma resposta "programadora de jogos", não uma resposta acadêmica.
emartel 12/05
Eu sei que você não precisa da GPU para multidões contínuas, e foi por isso que vinculei uma versão baseada em CPU. Sua descrição do caminho a seguir ainda é uma pesquisa de busca de caminhos, é apenas uma pesquisa de busca de caminhos em um nível de detalhe diferente, em um conjunto de dados diferente. Então, o que você realmente tem é um passe de busca de detalhes do curso e um passe de detalhes finos. Por fim, você está tentando encontrar o caminho que um ator deve seguir. Inventar novos termos para isso apenas confunde as coisas.
Olhovsky
11
Sinto muito, mas "seguir o caminho" não é um termo inventado. Leia os documentos produzidos pelo setor e você o verá repetidamente: vincule ou vincule apenas para vincular alguns. Infelizmente, não posso vincular você a documentações protegidas por NDA de mecanismos / middlewares amplamente utilizados na indústria.
emartel
11
Seu primeiro link é o link que eu dei na minha resposta. Muito bem, pode ser justo descrever esse tipo de localização como caminho a seguir. Por fim, ambos estão tentando encontrar o caminho a seguir, mas acho que neste caso estou errado, e devemos chamar o que vemos no seu segundo link como caminho a seguir. Por exemplo, o ato de vincular pontos de trajetos grossos com splies cúbicos / curvas de biezer / insira seu método aqui. Dito isso, ainda discordo veementemente que não é viável implementar a localização de caminhos em torno de obstáculos dinâmicos, como sua resposta parece sugerir.
Olhovsky