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表达,如果是一个边界,则不断地细分


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

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:用于不同分支交换信息


相关推荐
这可就有点麻烦了12 分钟前
强化学习笔记之【TD3算法】
linux·笔记·算法·机器学习
Ljubim.te2 小时前
软件设计师——数据结构
数据结构·笔记
speop3 小时前
【笔记】I/O总结王道强化视频笔记
笔记·音视频
yngsqq4 小时前
031集——文本文件按空格分行——C#学习笔记
笔记·学习·c#
sealaugh325 小时前
aws(学习笔记第一课) AWS CLI,创建ec2 server以及drawio进行aws画图
笔记·学习·aws
CXDNW5 小时前
【网络篇】计算机网络——应用层详述(笔记)
服务器·笔记·计算机网络·http·web·cdn·dns
向上的车轮5 小时前
Django学习笔记五:templates使用详解
笔记·学习·django
看山还是山,看水还是。6 小时前
MySQL 管理
数据库·笔记·mysql·adb
训山7 小时前
【11】纯血鸿蒙HarmonyOS NEXT星河版开发0基础学习笔记-模块化语法与自定义组件
笔记·学习·华为·harmonyos·鸿蒙系统
alfiy8 小时前
Elasticsearch学习笔记(四) Elasticsearch集群安全配置一
笔记·学习·elasticsearch