Eu sou um iniciante absoluto no desenvolvimento de jogos e, tudo o que sei sobre prevenção / resolução de colisões, aprendi no ou através deste site na semana passada ... então não hesite em me corrigir se o que estou perguntando aqui é com base em suposições erradas / mal-entendidos. Eu tentei o meu melhor para ficar claro, mas, dito isso, o assunto ainda é novo para mim.
Veículos
No meu jogo, tenho veículos que se movem autonomamente. Eles são colocados em um espaço 3D e seu movimento é governado por várias variáveis diferentes para cada veículo. Os de interesse aqui são principalmente:
- Apenas movimento para frente .
- Uma velocidade que pode variar entre min e max, mas cujo min não é (nem próximo de) zero.
- Um raio de direção dependente da velocidade (quanto maior a velocidade, maior o raio)
- Duas acelerações máximas (para diminuir e aumentar a velocidade)
Objetivo
Meu objetivo é implementar algum tipo de IA que evite colisões com 100% de precisão (ou seja, vou ter certeza de que os veículos nunca colidirão).
desenhar
- Embora eu prefira mais a idéia de ter a IA "onboard" (ou seja, cada veículo com sua própria "AI de prevenção de colisão", eventualmente consultando e / ou enviando mensagens para outros veículos), também é possível implementar o CA AI em um nível central (despachando comandos para os veículos).
- Na maioria dos casos, o veículo simplesmente terá que se afastar um do outro em qualquer direção, mas sob certas circunstâncias, eles terão que evitar colisões e seguir em direção ao mesmo alvo.
O que encontrei até agora e onde fiquei preso
Dentro dos muitos links que encontrei em outras perguntas neste site, achei particularmente útil os seguintes:
Embora esses três links "tenham aberto meus olhos" de várias maneiras, não está claro para mim como usar essas informações no meu caso. Em particular, o artigo 2 apenas "tenta" evitar colisões (mas as colisões acontecem de tempos em tempos). Embora o artigo # 3 precise às vezes parar os veículos para evitar colisões.
O que eu também notei é que os algoritmos de prevenção de colisão vinculados acima usam uma "projeção instantânea" de velocidade linear para verificar se algo está a caminho do veículo. Eu queria saber se isso é suficiente no meu caso ou se eu tenho que projetar minha posição de uma maneira mais realista (por exemplo: se eu estiver 60 ° em uma direção 90 ° para a direita, devo calcular minha posição pelo resto do 30 ° da curva e assumindo movimento linear).
Finalmente, estou particularmente com medo de impasses . Em outras palavras: embora a densidade de veículos no mundo seja bastante baixa, estou preocupado que, dado um certo número de veículos convergindo para o mesmo ponto, uma vez que eles percebam que estão em rota de colisão, qualquer manobra evasiva seja impossível. pois traria o veículo em um caminho de colisão com alguns outros.
Questão
Como posso alcançar meu "objetivo"? Uma explicação detalhada é, obviamente, muito apreciada, mas os links para recursos externos também seriam de grande ajuda (tenho certeza de que não sou o primeiro com esse problema, mas provavelmente usei as palavras-chave erradas para pesquisar na web? )
Agradeço antecipadamente por sua ajuda!
Respostas:
Você já olhou para algoritmos de agrupamento ? Quando olho para a sua descrição, é isso que me vem à mente. Existem muitos artigos para isso, eis um que eu gosto . Provavelmente você não usará todos os aspectos do flocagem, como a coesão. A maioria dos aspectos seria útil para o que você está tentando fazer, como alinhamento e separação, os quais ajudariam a evitar colisões. Você acabaria com algo um pouco diferente de se reunir, mas isso deve ajudá-lo a começar.
Boa sorte!
fonte
Aqui está uma abordagem: todo veículo possui um caminho curto projetado, onde o veículo no final diminui a velocidade e entra em um loop, esses caminhos podem não se sobrepor. Sempre que um veículo chega ao ponto em que está definido para abrandar, você tenta gerar um novo caminho que não se sobreponha a nenhum dos existentes. Se isso não for possível, o veículo continua no caminho indicado e tenta fazer um novo caminho periodicamente.
O método pode ser aprimorado para permitir tráfego mais restrito, permitindo que os caminhos que levam aos loops se sobreponham e loops, onde é possível determinar que isso não causará uma colisão.
fonte
Tenha um método em cada veículo em que ele faça uma pesquisa radial em torno de si; se houver outros veículos dentro desse raio, afaste-se da maneira que você mais gosta: 1) Mova-se no vetor oposto, 2) diminua a velocidade, 3) acelerar, etc.
Você pode até fazer combinações: Se o vetor do outro veículo não estiver diretamente à frente ou diretamente atrás: afaste-se; caso contrário, se for sempre em frente: diminua a velocidade; mais: acelerar.
fonte
Se isso fosse possível, já teria sido colocado em todas as aeronaves do mundo.
Sugiro relaxar o aspecto 'autônomo' e ter uma função que resolva colisões previstas entre 2 (ou mais) veículos. Pode ser tão ingênuo quanto escolher novas direções aleatórias para viajar e ver se isso resolve o problema, mas o importante é que a função só retorne quando for alcançado um acordo que atenda aos dois veículos.
Sugiro também que qualquer veículo que se previna colidir em um futuro próximo reduz sua velocidade, mantendo a mesma distância antecipada - isso dará aos seus veículos mais oportunidades para evitar colisões, assim como na vida real.
fonte
Parece-me que a simulação de multidão pode ser o tópico mais relevante para o que você está tentando alcançar. O grupo GAMMA da UNC tem um grande corpo de trabalho sobre o assunto que vale a pena examinar. A descrição deles:
http://gamma.cs.unc.edu/research/crowds/
fonte
Eu não acho que exista um método de evasão de 100%, mas se os veículos possuírem informações completas sobre o mundo, você poderá colocar cada veículo em uma caixa cujo comprimento depende da velocidade e executar uma verificação de colisão nessas caixas. Se houver realmente uma colisão, afaste-se, com uma força que depende da iminência do impacto (ou da área da colisão entre as duas caixas) e do fluxo lento (mas mantenha sua caixa do mesmo comprimento durante a operação de prevenção).
Obviamente, isso não funcionará se o veículo não possuir informações completas, mas neste caso nada garantirá 100% de evasão (exceto, como já foi dito, movimento paralelo)
alguns métodos descritos aqui provavelmente seriam úteis, notadamente este: Comportamento desalinhado da direção para evitar colisões
Saudações
fonte