最近在研究虚幻4引擎的EQS系统,看了下官方对EQS的解释文档(官方文档链接:https://docs.unrealengine.com/en-US/Engine/ArtificialIntelligence/EQS/index.html)及相关源码,熟悉了EQS在AI制作时的应用和使用,文章为本人学习之余所整理笔记,如有纰漏欢迎指正交流。

一、EQS原理:

EQS(Environment Query System),直译为环境查询系统,可以理解成对当前场景状态的扫描或者检查,往往配合AI行为树一起使用。其实现原理比较好理解,简单来说就是将场景环境划分,一般来说是按密度划分成一个一个点,当然也可以以场景元素Actor来进行划分,将环境划分好后,再按照相应的设定规则对划分项(点或Actor)进行打分,最后得分最高的Item即为系统所找到的最优查询结果。EQS系统将其最优查询结果告知AI,AI行为树则会对来其进行相应的决策及执行。

二、EQS组成部分:

使用EQS前我们最好知道EQS的都由哪些部分组成,各部分的分工都是什么。虚幻4官方文档对其各个组成部分的名词解释已较为详细,以下是本人对官方文档中名词解释的简单整理:

1.EnvironmentQuery(环境查询资产)

EQS资产,我的理解一个EQS资产就是一个可供AI使用的EQS实例。它相当于是一个容器,里面装着根据不同需求设计好的各种查询规则(即Genetators和Tests)。我们做好一个EQS资产后,最终,其会在AI的行为树节点中实例化,并在行为树节点运行时执行EQS相关功能,执行结果也会保存为黑板变量供行为树来决策使用。

2.Genetators(采样生成器)

采样生成器规定了我们EQS的采样点的生成规则。它以某一种规则在使用者周围进行参考点选取,将选取的采样点(可能是位置点也可能是Actor)用于测试。

如图,我们打开创建好的环境查询资产EnvironmentQuery后,在根节点下拉即可创建需要的Genetators。目前引擎提供的Genetators有以下这些:

  • Actors Of Class 采样场景中的Actor对象,按类型匹配,使用所匹配的Actor对象作为采样点(可以设置采样中心参照点及查询半径范围);
  • Composite 复合多种生成器,用来组合生成器使用;
  • Current Location 使用当前位置作为采样点;
  • Points Circle 环形点生成器,选取方式使用参考点向四周转圈发射射线。如果触碰到任何物体则将碰撞位置作为采样点,如无碰撞则以设定最大半径为采样点(可以设置采样查询半径及发射间隔角度);
  • Points Cone 锥形点生成器;
  • Points Donut 环状点生成器,区别于Circle,此生成器如同水波,一层一层向外扩散,直到最大半径;
  • Points Grid 简单的格子点生成器,不对采样点进行路径规则校验,导航不可达位置也将被收集;
  • Points Pathing Grid 路径格子点生成器,采样点必须是导航可达,需要满足导航规则校验;

3.Tests(测试规则)

测试规则的作用为对采样生成器找到的采样点进行打分或剔除,最后从通过所有测试规则的采样点中找到打分最高的采样点,即为EQS查找到的最优结果。当我们在EQS资产中创建好采样生成器Genetators之后,就可以在Genetators上添加各种Tests,目前引擎提供了一下Tests供使用:

  • Distance 距离测试,将采样点与参照内容进行距离测试,默认是距离越远分数越高,反之可将ScoringEquation设置为InverseLinear;
  • Dot 点乘测试,用于朝向方位打分,得分区间为0-1,默认正面为1背面为0,可勾选AbsoluteValue,正面、背面为1,左右两边为0;
  • Gameplay Tags 标签测试,用于根据Tag对采样点进行类型查询及剔除;
  • Overlap 通道测试,用于根据通道标记对采样点进行查询及剔除;
  • Pathfinding 寻路测试,将采样点与导航进行测试,可达则分数1,不可达为0,会返回一个可达的采样点;
  • Pathfinding Batch 批寻路测试,与上面不同的是它会返回所有可达点,供下个测试项目使用;
  • Project 投射测试,用于修正采样点位置,分为导航投射和碰撞投射;
  • Trace 射线测试,存在遮挡分数为1,不存在为0;
  • 此外,用户也可以根据需要自己编写测试规则。

每个Tests还需设置其TestPurpose,即测试目的,有以下三种:

  • Score Only 仅打分,根据规则为采样点打分;
  • Filter Only 仅筛选,使用规则对采样点进行踢除,用于缩小测试范围,将符合筛选条件的进行保留,负责踢除;
  • Filter and Score 筛选并打分,综合上两种操作。

4.EnvQueryContext(查询内容)

查询内容可配置在Genetators或Tests上,在测试节点中,针对不同的测试方式需要选取不同的参照物进行测试参与。Context的功能便是提供参照物,拿采样得到的每一个点,分别与Context进行测试比较,然后将结果以分数形式标记于采样点。

EnvQueryContext默认提供了4种参照物返回方式:

  • Provide Single Location 提供一个三维向量在测试环节中与采样点进行比对;
  • Provide Single Actor 提供一个Actor在测试环节中与采样点进行比对;
  • Provide Location Set 提供一组Actor在测试环节中与采样点进行比对;
  • Provide Actors Set 提供一组三维向量在测试环节中与采样点进行比对;

三、EQS使用:

EQS目前在虚幻4引擎中是还一个测试功能,默认并没有开启。我们如需使用的话需提前手动开启引擎EQS功能。具体方法如下:
Edit - Editor Preferences - General - Experimental - AI - Environment Querying System

开启好后,就可以使用EQS了,具体使用步骤根据前文整理如下:

  1. 创建AIPawn、AIController及AI行为树;
  2. 创建EQS资产(Environment Query);
  3. 在EQS资产中添加采样生成器Generators用于收集采样点;
  4. 根据需求向Generators中添加测试规则及EnvQueryContext;
  5. 行为树中添加EQS查询节点;
  6. EQS查询节点设置对应的EQS资产及结果黑板变量;
  7. AI行为树根据EQS结果黑板变量进行决策。

四、显示EQS环境信息:

UE4的GameplayDebugger可在编辑器模式下实时显示特定游戏数据,我们可以通过它来查看AI在使用EQS时环境查询的实时信息,包括EQS受击到了哪些采样点,以及每个采样点通过Tests的最终打分结果,十分直观方便。
可以在Edit - Project Setting - Engine - Gameplay Debugger 进行相关设置。
当项目运行时,把准星对准AI,再按撇号键(回车键左边那位),就可以打开Debugger(再按关闭),可以实时显示某个AI当前的EQS环境信息以及一些运行时状态和行为树执行流。

后续我会继续深入研究EQS系统,并对相关引擎源码进行分析,本文会持续更新。

UE4学习笔记--EQS系统相关推荐

  1. 小猫爪:i.MX RT1050学习笔记4-IO系统

    小猫爪:i.MX RT1050学习笔记4-IO系统 1 前言 2 PAD 2.1 IORING 2.2 IOMUX 2.3 IOMUXC 3 GPIO 4 应用实例 1 前言 在介绍GPIO之前,不得 ...

  2. UE4学习笔记#三、蓝图混合空间

    UE4学习笔记(谌嘉诚大佬的PUBG教程) 三.蓝图混合空间 1. 设置初始角色(关卡开始时pawn获得的角色) 2. 角色移动蓝图 3. 镜头方向蓝图 4. 利用TimeLine平滑切换行走跑步 5 ...

  3. UE4学习笔记1st:编程快速入门

    UE4学习笔记1st:编程快速入门 今天我开始学习虚幻4游戏引擎,为了此我专门买了新的电脑,我将主要配置写在这里,有想学习的同学可以参考 显卡:丽台K620 CPU:E3-1230-V3 主板:b85 ...

  4. 2022最新树莓派4B学习笔记:系统备份 OpenCV SPI TFT HTML

    树莓派4B学习笔记 一.首次使用 1.系统烧录 2.优化配置与备份 3.一些基本操作 二.摄像头 三.Pi Dashboard好看的仪表盘 四.OpenCV安装编译 五.SPI_TFT屏幕 六.最终代 ...

  5. UE4学习笔记:GamePlay框架与蓝图功能实现,开关门互动、鼠标、按键开门、按键升降电梯

    前言: 目前是正式学习ue4第二周 个人觉得很重要的一点就是理解UE4 GamePlay框架.后续学习unity以及其他引擎,框架应该是需要最先了解的 我是先看了近2周谌嘉诚老师的教程,然后中途才了解 ...

  6. 【UE4】【笔记】5、UE4学习笔记 LOD与合并静态网格体

    UE4官方视频学习笔记--LOD与合并静态网格体 大纲如下: ​​ UE4LOD自动创建工具 LOD自动创建工具 选择一个静态网格体,打开静态网格编辑器,并在细节面板中找到LOD Settings分组 ...

  7. UE4学习之材质系统初探

    本文章所涉及素材均来源于网络,供学习使用,并不会实际投入到项目中 由于之前使用的印象笔记抽风,不能继续使用以供工作室学习交流,所以把平时学习时候的一些笔记搬运至博客,各位看官一笑就是: 这里主要是在介 ...

  8. UE4学习笔记[2]Game-Controlled Cameras/游戏控制的摄像机

    第一步:在场景中放置摄像机 如果你是 虚幻引擎4 (UE4)Unreal Engine 4的新手,你可需要先阅读我们的编程快速入门教程.对于本教程,我们假设你熟悉以下操作:创建项目,向项目添加C++代 ...

  9. 【小梅哥SOPC学习笔记】系统时钟的使用

    给NIOS II CPU添加一颗澎湃的心--系统时钟的使用 本实验介绍如何在Qsys中添加一个定时器作为NIOS II的心跳定时器,并在NIOS II中软件编程使用该定时器. 将上一个实验watchd ...

最新文章

  1. [转]Entity Framework4.0 (七) EF4的存储过程
  2. 优酷蓝鲸近千节点的Redis集群运维经验总结
  3. LeetCode Algorithm 1267. 统计参与通信的服务器
  4. 重命名myclipse中web项目名称的过程
  5. TensorFlow tf.keras.losses.CategoricalHinge
  6. javascript是什么?有哪些特点?
  7. 15个华丽的扁平风格的登录界面设计示例
  8. java并发编程(3)--线程 有序性 volatile
  9. 全能地图工具共享及操作规范
  10. Simulink仿真---clark变换、反clark变换
  11. gnuplot绘制文氏图
  12. 自己DIY一个pinephone——debian与主线linux在红米2(msm8916)上的移植
  13. Google账户二次验证取消
  14. 接入小程序客服(java版教程),处理第一次主动推送会话超时问题
  15. VS2015配置PCL详细教程,使用配置属性管理器的方法,一劳永逸
  16. 微信小程序 删除服务器图片,微信小程序实现图片上传放大预览删除代码
  17. 【Windows基础】本地安全策略
  18. 欧式极简大气工作汇报PPT模板
  19. java SNS网络系统_JEESNS首页、文档和下载 - Java 开源 SNS 社区系统 - OSCHINA - 中文开源技术交流社区...
  20. ABP入门教程(三)添加一个领域层和一个应用层

热门文章

  1. flutter与RN对比
  2. Openlayers 6 零基础教程
  3. Adobe的后期摄影图片处理软件Photoshop Lightroom(Lr) 6.2版本下载与安装教程
  4. 不允许一个用户使用一个以上用户名与服务器或共享资源的多重连接,中断与此服务器或共享资源的所有连接,然后再试一次
  5. 编码的奥秘:手电筒剖析
  6. 基于JAVA小微企业人事管理系统计算机毕业设计源码+数据库+lw文档+系统+部署
  7. Spring Boot框架
  8. 京东数据分析软件 | 如何获取京东平台的“增长榜单”
  9. Canvas画各种线
  10. 4种方法!怎么把电脑上的音频传到苹果手机上?