2018年视频,路径规划:层次化路径规划系统——hierarchical pathfinding system —— Hierarchical Dynamic Pathfinding for Large Voxel Worlds

项目地址:

https://www.gdcvault.com/play/1025151/Hierarchical-Dynamic-Pathfinding-for-Large


image


PPT地址:

https://ubm-twvideo01.s3.amazonaws.com/o1/vault/gdc2018/presentations/Alain_Benoit_HierarchicalDynamicPathfinding.pdf


视频地址:

https://www.youtube.com/watch?v=pG9SoTF1mCI





A* 算法的缺点:

image


在某些游戏场景中这种缺点很常见:

image

image


甚至存在一些目标不可达到的情况:

image


在一个大规模的地图中如何快速的判断目标是否可达,并快速给出路径呢:

image



原作者想到了一个改进方法,那就是把grid网格何必成一个大网格,这个方法和传统的hierarchical pathfinding很像,但是并不完全一样,这里的改进算法是建立多个level的分级,最后使整个地图只有一个级别。

image

image

image


到此,该算法和传统的分层寻路算法区别不大:

image



该作者提出的方法(不断合并网格,分层,多个level,最后全图形成一个大网格)有一个特定,那就是每次分层合并网格的时候并不会如传统的分层寻路算法那样直接合并,而是会判断合并成一个网格后会不会保证网格内所有可行区域都是连通的,比如下图的Level 1合并为Level 2时右上角的大格子合并后并不是形成一个网格而是形成了1号网格和2号网格,其原因就是1号网格和2号网格无法连通。

image

image


如何快速的判断两个网格是否连通呢,在上面的Level 2右上角网格中1号网格和2号网格的不连通是如何快速判断出呢,这个是需要有一个快速判断的算法的。



根据该种方式我们可以快速的根据两个点在那个级别(Level)上的分层上连通,如果两个点是在最高层连通(所有点均在一个层上),那么这两个点就是不连通的;在确定两个点连通的层次后我们可以根据这个层次信息建立两点间的连通路径,如下:

image

不过需要注意的是,这里只给出了算法的大意,却没有给出算法的描述和任何细节,比如,在两个点所在的同个层次找到后如何快速的为两个点建立连接路径呢,这个步骤的实现细节是什么呢。比如在上图中,在Level 2到Level 3时,红色的点一定需要进入到另外三个格子中的一个才可以(Level 2时)。



如果地图上发生了改变,比如某个点无法通行了,或者某个点可以通行了,那么对于每个层次的Grid图的影响都只会在局部,影响较小。

image



建立好各个层次的连通图后可以快速的实现路径寻找:(从低层向高层连通图寻找,直到找到两点在同一个图上的时候)

image

image

image

image



posted on 2024-05-04 13:33  Angry_Panda  阅读(5)  评论(0编辑  收藏  举报

导航