Games104现代游戏引擎笔记 基础ai

游戏AI

navigation(导航系统)
在这里插入图片描述
地图的表达形式, 寻路,路径优化

Map representation:
1.可行走区域(物理碰撞,跳跃距离,攀爬高度)
2.表达形式:waypoint networks(路点网络图),grid(网格),navigation mesh(寻路网格),sparse voxel octree(八叉树)

在这里插入图片描述在这里插入图片描述

在这里插入图片描述

Waypoint Networks:
设置关键点,在关键点之间通过算法插值一些过路点,过路点插值往两边扩散(因为可行走区域并非一条线)。
任务一条路径,从起点开始,寻找路网中最近的点,在走到离终点最近的点(类似地铁)
寻路只能发生在路点和路点之间,在计算机中表示为一张连通图。点的密度可以代表寻路精度
优点:
1.易实现
2.内存和计算机开销低(路点寻路只是使用到了真是可行走区域的一小部分,与格子相比,牺牲了路线的灵活性,换取交第的内存和计算机开销,只要两个点之间是连通的,那么角色就可以按照点所在的位置到达目标点的位置)
缺点:
1.需要手动插值,不灵活
2.并且表现上npc路径相比于较宽的可行走区域往往是走中间

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
Grid
优点:
1.易实现
2.容易动态修改
缺点:
1.内存和计算机开销大
2.不适用3d地图。例如桥上桥下都能行走
3.需要额外的平滑处理,角色行走路线可能出现多个90度的拐角

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
Navigation Mesh
划分必须要凸多边形,不能凹多边形。否则穿过polygon时,可能走到该polyhon之外的区域。并且形成多边形走廊时,穿过的每个凸多边形之间有且只有一条公共边portal

优点:
1.支持3d可行走区域
2.灵活性高
3.可动态修改
4.内存和计算机开销小,一个polygon可能就能全表达一大片可行走区域
5.寻路效率高
缺点:
1.生成非常复杂
2.不支持3d空间(例如空战游戏)

在这里插入图片描述

Sparse Voxel Octree
对空间进行八叉树划分,把所有可通行区域用八叉树结构表示。如果区域是整个联通的,用一个很大的Voxel表达,如果是一个边界,则不断地细分

扫描二维码关注公众号,回复: 17260455 查看本文章

在这里插入图片描述
在这里插入图片描述
所有的地图表达形式,连接关系都是形成一个图。最终在图上寻找路径

dfs:时间换空间
bfs:空间换时间
dfs和bfs没有办法计算加权最短路径。并且很多时候会找出许多没必要的路径

在这里插入图片描述
迪杰斯特拉算法找的一定是最短路径
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

a星算法相对迪杰斯特拉算法增加了启发函数。当走到一个点时,不仅考虑过去花费的路径成本,还会猜想从当前位置到目标点所需距离。
在选择explored点时,优先选择现在已走过的距离加上预计要走的距离中最近的点,来优先搜索。
并且只要达到目标点,不需要将目标点explored,就停止搜索。

在这里插入图片描述
在这里插入图片描述

Steering
在这里插入图片描述
在这里插入图片描述
根据目标位置确定加速度
在这里插入图片描述
在这里插入图片描述
通过积分反向推导加速度

在这里插入图片描述计算角速度的加速度

Crowd Simulation
在这里插入图片描述
Microscopic Models 微观模型
定义每一个的行为,然后合在一起就行了
Macroscopic Models 宏观模型
宏观定义大的运动趋势,每个个体按照这个运动即可
Mesoscopic Models 中观模型
上面两种的混合,可以定义更加复杂的情况

在这里插入图片描述
Separation
如果一条鱼离我太近了,我就分开
Cohesion
如果鱼群离我太远了,我就接近
Alignment
和鱼群方向保持一致
微观的结果是不可控的,且不受人影响
在这里插入图片描述
定义行走的轨迹,然后生成zone graph
主要表达有规则的行为,比如人类人群行为

在这里插入图片描述
把群体分成一个个小族群,小族群受到一个大的指向控制,每个小个体自己的行为仍走微观模型的方向。例如rts寻路
在这里插入图片描述
在这里插入图片描述
避免碰撞:
两个物体太近时,产生斥力,太远时,产生吸力
对所有的障碍物加距离场,当物体里离障碍物越来越近时,距离场的值越来越小,产生的反向斥力越来越大,然后给个大致的方向。群体便会模拟真实的行为
在这里插入图片描述
速度障碍法生成碰撞检测
在这里插入图片描述
VO:两个物体运动时,一个物体会在另一个物体的速度域上产生一个障碍,如果我在当前速度上会和障碍形成碰撞,则调整速度
在这里插入图片描述

RVO:双方都让
ORCA:整体判断

Sensing
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
Navigation Data寻路数据
Tactical Map战术地图,也就是战术价值很高的点
Smart Object 指的是AI可以交互的物体, 如可以破坏的墙,梯子等
Cover Point掩护点
在这里插入图片描述
Influence Map 热力图 对于战场态势的感知
Sight Area 指的是AI的可见区域
在这里插入图片描述
在这里插入图片描述
引擎端通常开放:
1.sensing精度的选择
2.sensing结果的共享

在这里插入图片描述
FSM (有限状态机)和 BT(行为树) 都是Forward 算法,走一步算一步。
Backward的算法:以目标为驱动的反向算法
Hierarchical Tasks Network HTN 任务层次网络
Goal Oriented Action Planning 基于目标驱动行为规划
Monte Carlo Tress Search 蒙特卡洛搜索树
Deep Learning 深度学
在这里插入图片描述
在这里插入图片描述
当state非常多时,每个state间的设定会非常复杂
在这里插入图片描述
层级有限状态机
一种缓冲之举,增加了可读性的同时方便管理。但是子state不好添加额外条件或者飞线,所以反应速度比较慢

在这里插入图片描述
状态机是对AI逻辑的抽象。整个世界AI的逻辑就是在状态里来回切换

在这里插入图片描述
分为条件判断节点和动作执行节点
动作节点会返回成功,失败和运行中
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Sequence:顺序执行。当走到该条件时,要依次把子树全部执行一遍。如果有任何一个子树返回running时,sequence节点被访问时也是返回running
在这里插入图片描述
在这里插入图片描述

Selector:根据条件去尝试所有的子节点,优先执行在前面的子节点。前面的子节点成功了,Selector节点也执行成功。
在这里插入图片描述
在这里插入图片描述

Paraller:并行执行
在这里插入图片描述
在这里插入图片描述
每次需要从根节点开始Tick,是BT效率低的地方,同时Running的节点会不止一个。
并且Running的节点需要有被打断的能力。
BT每次Tick的成本很高,所以有些引擎通过添加Event来激活部分或者整个Tree达到效率优化的效果,缺点是设计师必须要非常清楚自己在做什么,否则非常容易出Bug
在这里插入图片描述
在这里插入图片描述

Decorator,优化行为树
在这里插入图片描述
Precondition 装饰器,对BT优化
在这里插入图片描述
Blackboard:用于不同分支交换信息
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Mhypnos/article/details/133579261