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:用于不同分支交换信息
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/98948.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

交互式ICP

以下程序演示如何编写交互式ICP查看器。该程序将加载点云并对其进行刚性变换。之后&#xff0c;使用ICP算法将变换后的点云与原来的点云对齐。每次用户按下“空格”&#xff0c;进行ICP迭代&#xff0c;刷新可视化界面。 代码实现 资源准备 monkey.ply #include <string&…

I/O多路复用【Linux/网络】(C++实现select、poll和epoll服务器)

阅读前导&#xff1a; “I/O 多路复用”处于知识树中网络和操作系统的最后&#xff0c;因此本文默认读者有计算机网络和操作系统的基础。 1. 引入&#xff1a;C10K 问题 c10k 问题是指如何让一个服务器同时处理超过 10000 个客户端的连接&#xff0c;这是一个网络编程中的经…

STM32+USB3300复位枚举异常的问题

关键字&#xff1a;STM32F4&#xff0c;STM32H7&#xff0c;USB3300&#xff0c;USBHS&#xff0c;Reset复位 F4和H7用的都是DWC2的USBIP&#xff0c;我的板子上3300单片机工作的很好&#xff0c;插入枚举一切正常&#xff0c;但是设备收到上位机的复位命令后&#xff0c;单片…

Redis之主从复制,哨兵模式,集群

Redis之主从复制&#xff0c;哨兵模式&#xff0c;集群 1、主从复制1.1主从复制概述1.2Redis主从复制作用1.3Redis主从复制流程1.4部署Redis 主从复制 2、哨兵模式2.1哨兵模式原理2.2哨兵模式的作用2.3哨兵模式的结构2.4故障转移机制2.5搭建Redis 哨兵模式 3、Redis集群模式3.1…

Deep learning of free boundary and Stefan problems论文阅读复现

Deep learning of free boundary and Stefan problems论文阅读复现 摘要1. 一维一相Stefan问题1.1 Direct Stefan problem1.2 Inverse Type I1.3 Inverse Type II 2. 一维二相Stefan问题2.1 Direct Stefan problem2.2 Inverse Type I2.3 Inverse Type II 3. 二维一相Stefan问题…

数据结构 | (四) Queue

队列 &#xff1a;只允许在一端进行插入数据操作&#xff0c;在另一端进行删除数据操作的特殊线性表&#xff0c;队列具有先进先出 FIFO(First In First Out) 入队列&#xff1a;进行插入操作的一端称为 队尾&#xff08; Tail/Rear &#xff09; 出队列&#xff1a;进行删除操…

iOS App上架全流程及相关处理

iOS app上架总体流程&#xff1a; 一、IOS上架整个流程 1、申请开发者账号 2、创建APP ID及申请证书 3、itunes connect 创建APP 4、打包 上传APP 5、提交APP&#xff0c;上线成功 1、申请开发者账号 苹果开发者账号主要分为三种&#xff1a;个人账号、公司账号、企业账…

深度学习基础知识 register_buffer 与 register_parameter用法分析

深度学习基础知识 register_buffer 与 register_parameter用法分析 1、问题引入2、register_parameter()2.1 作用2.2 用法 3、register_buffer()3.1 作用3.2 用法 1、问题引入 思考问题&#xff1a;定义的weight与bias是否会被保存到网络的参数中&#xff0c;可否在优化器的作用…

《深入理解计算机系统》(2):虚拟内存

虚拟内存是一种对主存的抽象概念。 &#xff08;1&#xff09;将主存看作一个存储在磁盘上的地址空间的高速缓存&#xff0c;在主存中只保存活动区域&#xff0c;并根据需要在磁盘和主存之间来回传送数据&#xff0c;通过这种方式高效地使用内存 &#xff08;2&#xff09;为每…

GitHub要求开启2FA,否则不让用了。

背景 其实大概在一个多月前&#xff0c;在 GitHub 网页端以及邮箱里都被提示&#xff1a;要求开启 2FA &#xff0c;即双因子认证&#xff1b;但是当时由于拖延症和侥幸心理作祟&#xff0c;直接忽略了相关信息&#xff0c;毕竟“又不是不能用”。。 只到今天发现 GitHub 直接…

Linux软硬链接和动静态库

本文已收录至《Linux知识与编程》专栏&#xff01; 作者&#xff1a;ARMCSKGT 演示环境&#xff1a;CentOS 7 软硬链接和动静态库 前言正文软硬链接原理使用 文件时间动静态库库介绍静态库静态库制作静态库的使用关于静态链接 动态库动态库制作动态库的使用关于动态链接 补充 最…

Java练习题-用冒泡排序法实现数组排序

✅作者简介&#xff1a;CSDN内容合伙人、阿里云专家博主、51CTO专家博主、新星计划第三季python赛道Top1&#x1f3c6; &#x1f4c3;个人主页&#xff1a;hacker707的csdn博客 &#x1f525;系列专栏&#xff1a;Java练习题 &#x1f4ac;个人格言&#xff1a;不断的翻越一座又…

Computer Architecture Subtitle:Engineering And Technology

原文链接&#xff1a;https://www.cs.umd.edu/~meesh/411/CA-online/index.html

基于Springboot实现疫情网课管理系统项目【项目源码+论文说明】

基于Springboot实现疫情网课管理系统演示 摘要 随着科学技术的飞速发展&#xff0c;各行各业都在努力与现代先进技术接轨&#xff0c;通过科技手段提高自身的优势&#xff1b;对于疫情网课管理系统当然也不能排除在外&#xff0c;随着网络技术的不断成熟&#xff0c;带动了疫情…

Windows11 安全中心页面不可用问题(无法打开病毒和威胁防护)解决方案汇总(图文介绍版)

本文目录 Windows版本与报错信息问题详细图片&#xff1a; 解决方案:方案一、管理员权限&#xff08;若你确定你的电脑只有你一个账户&#xff0c;则此教程无效&#xff0c;若你也不清楚&#xff0c;请阅读后再做打算&#xff09;方案二、修改注册表(常用方案)方案三、进入开发…

leetcode:2427. 公因子的数目(python3解法)

难度&#xff1a;简单 给你两个正整数 a 和 b &#xff0c;返回 a 和 b 的 公 因子的数目。 如果 x 可以同时整除 a 和 b &#xff0c;则认为 x 是 a 和 b 的一个 公因子 。 示例 1&#xff1a; 输入&#xff1a;a 12, b 6 输出&#xff1a;4 解释&#xff1a;12 和 6 的公因…

Meta分析的流程及方法

Meta分析是针对某一科研问题&#xff0c;根据明确的搜索策略、选择筛选文献标准、采用严格的评价方法&#xff0c;对来源不同的研究成果进行收集、合并及定量统计分析的方法&#xff0c;最早出现于“循证医学”&#xff0c;现已广泛应用于农林生态&#xff0c;资源环境等方面。…

linux日志审计常用命令

文章目录 cut参数指定范围命令 awk参数内置变量命令 wc参数命令 uniq参数命令 sort参数命令 head参数 cut 参数 选项含义-b仅显示行中指定直接范围的内容-c仅显示行中指定范围的字符-d指定分割符&#xff0c; 默认为“TAB”制表符-f显示指定字段的内容-n与“-b”连用&#xf…

Prometheus普罗米修斯

什么是Prometheus 官网&#xff1a;Overview | Prometheus 是一个开源的系统监控和警报工具&#xff0c;多数Prometheus组件是Go语言写的 为用户提供可视化仪表板、警报、告警等功能&#xff0c;以帮助用户快速定位和解决问题 现在已经成为一个独立于企业级的开源项目和一个…