navmesh思路的A*寻路算法优化

  nav,即navigation,现行3D游戏主流寻路方式,起源的思路是和A*完全不同的,因为navmesh不需要一张二维表,只需要利用模型阻挡生成一张近似寻路用的“mesh”。

  细节不多提及,参见http://www.ai-blog.net/archives/000152.html中的示例,

  A*寻路中,可以借用他的思想做出效果非常好的优化,在游戏中测试512×512的寻路速度在几个毫秒内即可完成。

  在生成阻挡点信息时,将整块没有阻挡点的凸多边形(这里全部使用四边形)合并为一块navmesh,生成若干mesh再使用navigation思路进行首次路径生成。测试512×512游戏实际场景的mesh数量一般低于1万块。比起512×512的数值,优化非常惊人。然后储存连通表,再次优化掉一半左右的无用导航格。

  假设红色为阻挡点,生成后的网格应该如下:

   navmesh的计算方法,射线法(line-of-sight)参见:http://blog.csdn.net/budtang/article/details/5959606  

  1、无阻挡凸多边形生成能去最大就去最大,比如如果存在64×64和一个8×8的块,就不应该被划分为64×56和64×8的块。2、生成后保存大块连通表数据。3、无法计算动态阻挡,navmesh信息需要提前计算存入文件,遍历生成mesh比寻路更耗时。

  

posted @ 2011-12-26 12:44  阿亮同学  阅读(9026)  评论(0编辑  收藏  举报