Je fais actuellement des recherches d'orientation et ma simulation est la suivante: j'ai une scène 3D avec un point de départ et d'arrivée représenté, je suis capable de créer des maillages de navigation, des waypoints et des polygones pour aider à la recherche d'itinéraires.
J'ai essayé un algorithme A * et certaines de ses variantes et ils fonctionnent parfaitement. Cependant, maintenant je suis plus intéressé par la recherche de chemin «dynamique». Par exemple, tout en trouvant un chemin du point A au point B, si un nouvel obstacle apparaît soudainement, je veux que mon algorithme puisse immédiatement replanifier un chemin et ne pas recommencer la recherche à partir de zéro.
J'ai fait quelques lectures sur l'algorithme D * et je me demande si cela serait approprié pour ce dont j'ai besoin ou si cela semble être une surpuissance.
Donc, mes questions sont essentiellement les suivantes: quel algorithme serait le mieux pour la recherche dynamique de chemin en temps réel? OU quelle combinaison de techniques pourrais-je utiliser à la place?
la source
Réponses:
D * est très impliqué - je ne recommande pas d'essayer de le mettre en œuvre. Même lorsque des projets qui sont bien financés et développés par des gens intelligents / expérimentés, D * lite est utilisé, car D * est une telle difficulté à bien faire les choses.
Vous pouvez être intéressé par cette présentation, qui comprend une discussion sur l'orientation de Left 4 Dead:
http://www.valvesoftware.com/publications/2009/ai_systems_of_l4d_mike_booth.pdf
Une approche consiste à utiliser une recherche A * de niveau grossier pour obtenir un chemin général pour un agent, puis à effectuer une recherche détaillée de niveau A * pour l'environnement local d'un agent. De cette façon, vous pouvez recalculer rapidement la recherche détaillée A * du parcours si le terrain change, puis recalculer rapidement la recherche détaillée A * pour un petit segment de l'environnement. Ce n'est pas parfait. Cela fonctionne tant que vos obstacles ne peuvent pas bloquer plusieurs nœuds de graphique de détail de parcours, ce qui est bien pour la plupart des jeux. C'est la méthode que je recommande si vous avez moins de 100 agents.
Si vous souhaitez prendre en charge des centaines ou des milliers d'agents, vous pouvez implémenter quelque chose comme des foules de continuum. Voir cette recherche: http://grail.cs.washington.edu/projects/crowd-flows/ qui traite d'une méthode purement basée sur le CPU qui peut prendre en charge des milliers d'acteurs dans un environnement dynamique.
Si vous souhaitez prendre en charge des dizaines de milliers ou des centaines de milliers d'agents, vous pouvez implémenter quelque chose comme des foules de continuum, avec l'aide du GPU. Voir ici pour la recherche pertinente: https://a248.e.akamai.net/f/674/9206/0/www2.ati.com/misc/siggraph_asia_08/GPUCrowdSimulation_SLIDES.pdf
Voici une vidéo montrant les foules du continuum en action: http://www.youtube.com/watch?v=lGOvYyJ6r1c (passez à 4:10 pour voir de grands obstacles dynamiques comme des voitures et des feux de signalisation affectant des centaines de personnes se promener dans une ville.)
la source
Avez-vous étudié des comportements de pilotage simples?
http://www.red3d.com/cwr/steer/
Vous pouvez les utiliser pour dévier de votre chemin A * afin d'éviter les obstacles locaux, puis revenir sur votre chemin une fois que vous avez terminé.
Il est également assez facile de combiner plusieurs comportements.
la source
Étant donné que votre message se trouve dans la partie "Développement de jeu" de l'échange de pile, voici ce que la plupart des programmeurs de jeux vous répondraient: il ne s'agit pas de Pathfinding dynamique en temps réel, il s'agit de Dynamic Path en temps réel * suivant *!
Dans certains cas de bord où un bord de votre graphique de navigation est totalement obstrué, le pathfinder doit recalculer un autre chemin, mais la plupart du temps, vous pouvez simplement diriger vos entités autour des obstacles, faire une prédiction de position et éviter dans la bonne direction. Pour la plupart des jeux, il serait trop lourd de devoir prédire au fil du temps la position des agents dynamiques, d'autant plus que vous ne pouvez pas prédire avec précision les actions des joueurs ou les décisions des agents.
Donc, mon conseil serait de commencer par implémenter des comportements de pilotage (http://red3d.com/cwr/steer/), gérer les cas où le chemin devient impossible, puis ajouter une couche au-dessus pour gérer les cas de bord qui ne sont pas '' t géré par les deux solutions précédentes.
J'espère que cela t'aides
la source