流场简介

流场,一般为网格图,网格中的每一个节点包含一个向量,该向量是物体在该位置时期望的速度。

流场寻路

利用流场的速度信息指导大量物体同时进行寻路。换句话说,如何生成可以寻路的流场,才是问题的关键。

这里有一篇英文的文章和一个示例[3],阅读文章有助理解流场寻路,英文不够好的同学也可以从例子中获取感性的认识。

流场寻路

在线示例

流场的简单生成:

流场根据迪杰斯特拉图生成的,而迪杰斯特拉图是依据众多智能移动体共同目的地以及节点运动消耗图生成。

节点运动消耗图,用0表示可正常通过,用极大值表示障碍物,用其他值表示河水,沼泽,斜坡,树林等地形信息。

首先,需要依据节点运动消耗图以及众多智能移动体共同目的地生成迪杰斯特拉图。

迪杰斯特拉图中的每一节点包含其距离目的地节点的最少运动消耗。

细节就是以目的地为起点进行迪杰斯特拉算法搜索到图中其他所有节点的最短运动消耗,其他非目的地节点保存这到目的节点的最短运动消耗。

什么迪杰斯特拉算法,请参看。
迪杰斯特拉算法

需要注意的是,本文中的例子生成的迪杰斯特拉图,其实使用广度优先算法生成的,这是因为边权值全部为1(路径消耗均为1)。

其次,依据迪解释特拉图生成流场。流场每一个节点包含一个指向某个邻居节点的向量,并且该向量所指向的邻居节点,在所有邻居节点中其距离目的路径消耗最少。而向量的大小可以为移动智能体的最大速率,或者单位化。

流场寻路其他细节:

  1. 当位于流场某一位置时,如何选取对应的速度向量,可以使用简单的归整法获取速度向量。 也可以采用双线性内插法依据上下左右其他四个节点值来计算[1]。

    什么是线性内插?请参看线性内插

  2. 流场的生成的速度向量不一定完全最佳,可以使用一些修正算法,比如视线修正法[2],来适当的调节速度向量的方向。

  3. 流场可以和其他行为结合起来,实现更复杂的组合操控行为。例如,流场+群聚(分离,聚集,对齐)。这一点在Game AI Pro - Efficient Crowd Simulation for Mobile Games给出了具体的实现思路。

流场寻路的应用:

“最高指挥官2”和“坚守阵地2”这两款游戏肯定是用了流场寻路。最近比较火的“皇室战争”也可能使用流场寻路(当然我猜的)。其实,流场寻路适合两种类型的游戏RTS和MOBA(即时战略和塔防),说白了最适合大量智能运动物体拥有共同目的地寻路。

结语

大家可以轻易的发现,HowToRTS例子有很多明显的问题,我在研究时做了一些优化。包括如下内容:

  • 加了移动智能体之间的分离力,这样运动起来不会扎堆,具体如何实现复杂的组合操控行为,可以采用加权截断总和,带优先级的加权截断累计,带优先级的抖动[4]。我使用带优先级的加权截断累计方式。
  • 禁止移动智能体两障碍物之间斜对角线穿行。
  • 实时更新目的地节点,鼠标点击地图切换目的地,重新生成流场等。
  • 把移动智能体的图像改成了草莓。

用浏览器就可以下载HowToRTS示例代码,我建议大家自动动手改一改玩一玩。

参考文献:
[1]Graham Pentheny,Game AI Pro : Efficient Crowd Simulation for Mobile Games
[2]Elijah Emerson,Game AI Pro :Crowd Pathfinding and Steering Using Flow Field Tiles
[3]https://howtorts.github.io/2014/01/04/basic-flow-fields.html
[4]Mat Buckland,游戏人工智能编程案例精粹
[5]Daniel Shiffman,代码本色-用编程模拟自然

原创文章,谢绝转载。

游戏中的人工智能之流场寻路相关推荐

  1. moba寻路_游戏中的人工智能之流场寻路

    流场简介 流场,一般为网格图,网格中的每一个节点包含一个向量,该向量是物体在该位置时期望的速度. 流场寻路 利用流场的速度信息指导大量物体同时进行寻路.换句话说,如何生成可以寻路的流场,才是问题的关键 ...

  2. RTS核心技术:流场寻路详解(Flow Field Pathfinding)

    RTS里面经常会有很多角色,群体一起寻路到目的地附近,这种寻路是如何实现的,今天给大家详细的讲解基于流场寻路的算法.在本教程中,我将解释向量场寻路及其相对于Dijkstra等传统寻路算法的优势.对Di ...

  3. 游戏中的人工智能(一)

    人工智能的本质:让计算机能够像生物体一样,具有思考和决定的能力来执行某些特定操作. 人工智能研究的三个主大类领域: ① 计算机视觉: 从视觉输入源获取信息并对它们进行分析,以执行特定操作.(ex:脸部 ...

  4. 学习5 游戏中的人工智能(迷宫寻宝)

    说明: <学习>系列所有的源代码均由<计算机游戏程序设计>提供.本人会在这些代码中融入自己的想法,对其进行迭代优化,旨在个人学习. 实现效果: (因为雾效粒子太逼真导致gif动 ...

  5. 漫谈游戏中的人工智能

    今天我们来谈一下游戏中的人工智能.当然,内容可能不仅仅限于游戏人工智能,还会扩展一些其他的话题. 游戏中的人工智能,其实还是算是游戏开发中有点挑战性的模块,说简单点呢,是状态机,说复杂点呢,是可以帮你 ...

  6. 《百面机器学习》试读 | AI热门应用之游戏中的人工智能

    小编温馨提示 首先掌声恭喜上周第五个留言获得福利的幸运小伙伴 @羊????????????,请通过后台联系我们,我们会将奖品尽快寄出噢- 铛铛铛,本周将会连载<百面机器学习>人工智能领域热 ...

  7. 基于虚拟现实的游戏中的人工智能:如何使用Python和Pygame实现人工智能

    作者:禅与计算机程序设计艺术 <基于虚拟现实的游戏中的人工智能:如何使用Python和Pygame实现人工智能> 1. 引言 1.1. 背景介绍 随着虚拟现实 (VR) 和增强现实 (AR ...

  8. 电子游戏设计与制作 第六章 游戏中的人工智能

    文章目录 1 游戏人工智能发展 2 游戏AI技术的分类 确定型AI算法 行为型AI算法 3 智能体agent与基本感官系统 Agent基本感官系统 智能体感官系统组成 智能体感官系统设计 4 路径规划 ...

  9. 在3D生存类游戏中加入人工智能

    2016年AlphaGo的横空出世,吹响了人工智能在游戏领域攻城掠地的号角.短短三年间,星际.Dota2.德州扑克.麻将相继被AI攻克.随着OpenAI Five和AlphaStar血洗天梯竞技场,游 ...

最新文章

  1. Nature:超越地域和文化,AI识别出全人类共同的16种面部表情
  2. AI计算量每年增长10倍,摩尔定律也顶不住 | OpenAI最新报告
  3. fhq treap ------ luogu P3369 【模板】普通平衡树(Treap/SBT)
  4. mysql数据库varchar_MySQL数据库char与varchar的区别分析及使用建议
  5. Redis入门之二6379端口
  6. 计算机一级windows系统操作知识点,计算机一级考试:高分必看知识点之windows操作...
  7. Hadoop平台搭建
  8. 5.Chrome开发者工具不完全指南:(三、性能篇)
  9. 黑苹果安装教程,配EFI引导文件+软件!
  10. Mysql基础(超详细)
  11. Flutter 使用ListView的separated构造一个带下拉加载的列表
  12. 5336-90-3,9-ACRIDINECARBOXYLIC ACID,9-吖啶羧酸
  13. 双通道14位、500 MSPS采样率的AD9684 高速并行LVDS ADC接口介绍
  14. 计算机编号怎么学,英文的一二三四编号电脑怎么打出来
  15. 腾讯汤道生:未来将投入100亿资源为中小企业提供SaaS产品及方案
  16. bind错误:server can't find www.linuxprobe.com: SERVF
  17. !!!全球最流行开源硬件平台!不知道就OUT了!
  18. jQuery插件 -- jQuery UI插件
  19. English learning(35 words a week))
  20. 如何查看windows某个目录下所有文件/文件夹的大小?(TreeSize Free)

热门文章

  1. web前端基础 html5+css3(十.html5css3新特性)
  2. python中值滤波算法_Python实现卡尔曼滤波算法之贝叶斯滤波
  3. 学习笔记(02):第一章: 路由与模板-Web原理与框架介绍
  4. 索尼PS4程序升级,令PS VR带来私人3D影院体验
  5. BCC-Tool 工具使用
  6. 有所学,有所成,有所爱
  7. 第6章第8节:幻灯片背景:使用颜色和渐变作为幻灯片的背景 [PowerPoint精美幻灯片实战教程]
  8. c++关于虚表的一些笔记
  9. Kotlin 读取文件
  10. 有些路,只能一个人走