实时动态寻路?


19

我目前正在做一些寻路研究,仿真如下:我有一个3D场景,表示了起点和终点,我能够创建导航网格物体,航路点和多边形来辅助寻路。

我已经尝试过A *算法及其一些变体,它们可以完美地工作。但是,现在我对“动态”寻路更感兴趣。例如,在查找从A点到B点的路径时,如果突然出现新障碍,我希望我的算法能够立即重新规划路径,而不必再次从头开始搜索。

我已经对D *算法做了一些阅读,并且想知道这是否适合我的需求,或者这看起来像是一个过大的杀手。

所以我的问题基本上是:哪种算法最适合实时动态寻路?或者我可以使用哪些技术组合呢?


我不确定他们使用什么算法,所以这不是答案,但是我想这是您要模仿的东西:youtube video
MichaelHouse

扩展A *呢?根据需要扩展存储在其打开/关闭集的节点中的内容,并扩展A *以对其进行考虑。
user712092 2011年

我一直在寻找与您相同的答案,并且找到了一篇有关HPA *的文章,它与视频游戏有关。我仍在寻找文章,可能会执行它。到目前为止,对我来说提高性能确实有意义,并且可以在静态和动态环境中使用它。是文章
NelsonPunch

Answers:


19

D *非常复杂-我不建议尝试实现它。即使在资金充足且由聪明/有经验的人开发的项目中,也使用D * lite,因为D *很难正确。

您可能对此演示文稿感兴趣,其中包括对《 Left 4 Dead》寻路的讨论:

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

一种方法是使用粗略级别A *搜索来获取代理的一般路径,然后执行细化细节级别A *搜索代理的本地环境。这样,如果地形发生变化,您可以快速重新计算路线明细A *搜索,然后针对环境的一小部分快速重新计算精细明细A *搜索。这不是完美的。只要您的障碍不能阻止多个路线细节图节点,它就可以工作,这对于大多数游戏来说都很好。如果您的座席人数少于100,则建议使用此方法。

如果您想支持数百或数千个座席,则可以实现连续的人群。请参见这项研究:http : //grail.cs.washington.edu/projects/crowd-flows/ 讨论了一种纯粹基于CPU的方法,该方法可以在动态环境中支持数千个参与者。

如果您想支持成千上万的代理,那么您可以在GPU的帮助下实现连续的人群。有关相关研究,请参见此处:https : //a248.e.akamai.net/f/674/9206/0/www2.ati.com/misc/siggraph_asia_08/GPUCrowdSimulation_SLIDES.pdf

这是一个演示连续不断的人群在活动的视频:http : //www.youtube.com/watch?v= lGOvYyJ6r1c(跳到4:10,看到大型动态障碍物,例如汽车和交通灯,影响数百人在城市中行走。)


感谢您的链接。从我一直在阅读的内容来看,D * Lite看起来确实
Andrei

9

您是否看过简单的转向行为?

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

您可以使用它们从A *路径转向以避开局部障碍物,然后在完成操作后转向您的路径。

组合多种行为也很容易。


+1。我不知道为什么这被否决了。尽管这很简单,并且可能不是
问问

1
我已经在我们的最新游戏中阅读并实现了这种转向行为。现在,我们将用其他方法再次替换它。我认为与预计算的最佳路径一起使用效果不佳。多种行为的“组合”通常会导致不良结果。如果您仍打算使用它,请不要尝试同时引导和跟随您的路径。相反,当您越过障碍物时,请切换到100%转向,然后再切换100%。
Imi 2012年

4

由于您的帖子位于堆栈交换的“游戏开发”部分,因此大多数游戏程序员将回答以下问题:这与实时动态寻路无关,而与* 后面的实时动态路径有关!

在某些情况下,导航图上的边缘会完全被遮挡,这将要求路径查找器重新计算另一条路径,但是大多数情况下,您可以简单地使实体围绕障碍物进行转向,进行位置预测并向正确的方向避开。对于大多数游戏而言,过于繁重而无法随时间预测动态特工的位置,尤其是因为您无法准确预测玩家的动作或特工决策。

因此,我的建议是从实施转向行为(http://red3d.com/cwr/steer/)开始,处理路径变得不可能的情况,然后在其上添加一层以处理那些不可行的情况。 t由前两个解决方案处理。

希望这可以帮助


嗯不 “路径跟随”与路径寻找相同。在台式机上,有许多方法可以在障碍物变化时实时跟踪数千个特工。当然,当障碍物四处移动时,为单个特工寻找路径并不太昂贵。这是其中一种这样的方法:grail.cs.washington.edu/projects/crowd-flows存在GPU连续体人群的加速版本。
Olhovsky

在这一点上,我将不同意。任何引擎都会将路径查找和路径跟随视为两个不同的问题,其中第一个是对可导航区域的图形搜索,而另一个则是在局部空间内搜索最佳运动矢量。我已经进行了这种人群模拟,生成了供AAA游戏使用的中间件,而无需依赖GPU。大多数实现将使用流场(探路者)和转向来遵循流并避免其他代理(探路者)。如我的回答所述,这是“游戏程序员”的答案,而不是学术性的答案。
emartel 2011年

我知道您不需要连续拥挤的GPU,这就是为什么我链接了基于CPU的版本的原因。您对路径跟随的描述仍然是寻路搜索,只是在不同数据集上不同详细程度的寻路搜索。因此,您真正拥有的是课程细节寻路过程,以及精细细节寻路过程。最终,您试图找到演员应该遵循的道路。为此发明新的术语只会使事情变得混乱。
Olhovsky

1
抱歉,“跟随路径”不是一个发明术语。阅读行业生产文件,你会看到它使用了一遍又一遍:链接链接只是链接数。不幸的是,我无法将您链接到NDA保护的行业中广泛使用的引擎/中间件的文档。
emartel 2011年

1
您的第一个链接是我在答案中给出的链接。好的,很公平,将这种类型的路径查找描述为路径跟随可能是公平的。最终,他们俩都试图找到遵循的道路,但是我认为在这种情况下我错了,我们应该将在第二个链接中看到的内容称为路径遵循。例如,将粗略路径点与三次样条/比泽尔曲线/在此处插入您的方法链接在一起的动作。就是说,我仍然强烈不同意围绕动态障碍物进行路径查找是不可行的,正如您的答案似乎暗示的那样。
Olhovsky
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.