Localização de caminho eficiente em espaço livre

12

Eu tenho um jogo situado no espaço e gostaria de emitir ordens de movimento, o que requer a busca de caminhos. Agora, entendo que A * e outros se aplicam principalmente a árvores, e não a espaços vazios que não possuem nós de localização de caminhos. Eu tenho alguns obstáculos, que atualmente são expressos como AABBs fixos - ou seja, não há obstáculo "terreno" ilimitado. Além disso, espero que a maioria dos obstáculos seja razoavelmente aproximada como cubos ou esferas.

Então, eu tenho pensado em aplicar um algoritmo de busca de caminho muito mais simples - ou seja, basta lançar um raio da posição atual para a posição alvo e, em seguida, posso obter uma lista de obstáculos usando o particionamento espacial de maneira relativamente rápida. O que não tenho tanta certeza é como determinar a parte em que a unidade ordenada manobra em torno dos obstáculos.

O que venho pensando até agora é que simplesmente utilizarei campos potenciais - ou seja, todas as unidades sentirão uma força repulsiva forte afastada uma da outra e uma força moderada em direção ao ponto desejado. Isso também tem a vantagem de que, para emitir ordens de grupo, posso simplesmente pedir uma força de nível médio em direção a outra entidade. Mas isso obviamente não alcançará a solução ideal.

Os campos em potencial alcançarão uma aproximação razoável de acordo com meus parâmetros ou preciso de outra solução?

DeadMG
fonte

Respostas:

7

Embora os campos em potencial possam funcionar, imagino que você tenha problemas com caminhos sub-ideais e "mínimos locais", onde suas unidades serão presas por obstruções ao redor. A * é adequado para ambientes 3D de espaço aberto. Simplesmente se torna uma questão de gerar uma malha de navegação que atenda às suas necessidades. Você pode até usar estruturas como Octrees para nós de navegação. Quanto menor o tamanho máximo de cada octante, mais suave o caminho. Confira este artigo nos jogos cara a cara (agora extinto, link de retorno adicionado). A * combinado com a otimização do caminho (como atalhos da linha de visão) e comportamentos de direção, e você estará pronto! Veja a imagem abaixo como um exemplo de uso de uma octree para nós de caminho:

MichaelHouse
fonte
Como isso vai ser dimensionado para mapas maiores? Se eu tivesse um mapa duas vezes maior em cada dimensão, precisaria oito vezes o número de nós, o que seria problemático.
DeadMG
Não necessariamente. Você pode manter o tamanho do nó grande até que sua pesquisa chegue perto dele. Isso permite que você mantenha os nós nos quais não está interessado e que sejam grandes e poucos em número.
MichaelHouse
Uma boa propriedade de malhas de navegação em espaço vazio é a igualdade de custos de viagem; você pode usar o A * JPS
Será
@ Will: Eu fiz um pouco de pesquisa no Google, mas realmente não entendi o único algoritmo de busca de caminhos que surgiu. Gostaria de postar uma resposta?
DeadMG
@DeadMG, esta é uma explicação definitiva: harablog.wordpress.com/2011/09/07/jump-point-search <br/> Se você puder implementar o A *, poderá adaptar o JPS a ele de maneira bastante direta. Faça A * primeiro e adicione JPS como uma otimização.
Will