在虚幻引擎中,Mass Framework是面向数据的一种框架设计,而MassAI则是一个具体的用例。
Mass Framework可以分为三部分:MassEntity,MassGameplay,MassAI。
1. Mass Entity
MassEntity是一种面向数据的框架,该框架有两部分,一为片段(Fragment),非常小的数据结构,会连续的储存在内存中;另为实体(Entity),则是由片段构成集合的实例。
该框架中将所有处理逻辑与数据构成进行解除联系,所有的数据构成均在片段中。为了了解要在哪些实体中执行某些逻辑,需要通过实体查询(EntityQuery)的方式来过滤实体,将其分割为特定逻辑需要的片段,然后再由处理器(Processors)对所有逻辑进行批量更新。例如,要更新所有实体的位置,就是通过处理器来一次性执行。
这种处理逻辑与数据构成分离的方式,可以增强数据和代码的一致性,减少高速缓存缺失,简化未来的并行执行,可以有效的限制一次性模拟实体数据的基础。
2. Mass GamePlay
Mass GamePlay能够将大量的实体正式带入游戏世界中。我们可以在Mass GamePlay中定义生成可视化、LOD等机制。
MassSpawner是Mass GamePlay中管理实体生成的部分,其为一个需要放置在关卡中的常规Actor。
2.1. 获取生成位置
MassSpawner通过区域图(ZoneGraph)来确定实体的生成位置。
区域图(ZoneGraph)可以取代AI导航网格体的作用。它是一个由交叉点连接在一起的逐点廊道结构生态系统,并存储了可操作的标签,这些标签可以是静态的,如识别车道中的行人;也可以是动态的,如一条开放或封闭的车道、指定AI行为。
在《黑客帝国》中,MassSpawner通过区域图对行动中的人群与交通工具实现了基于密度的实体分布,对于停在路边的车辆使用了根据静态点云的分布方式,这些实体分布方式可以在Mass Spawner的属性中选择。
以人群举例,MassSpawner合并了行人密度和人行道网络的数据表示,为人群创建了一个相互连接,且带有正确注释的区域图。区域图中的注释会说明它们的功能,如:人行横道、人行道、十字路口道等。此外,这些注释还包含预期密度,当前是否处于封闭状态,是否开启调试信息等选项。MassSpawner会在这些线路上,根据密度数据,在不同距离上创建一个生成位置。交通系统也是如此操作的。
对于停放的车辆,通过点云的方式直接在每个位置生成一辆载具。
2.2. 具体生成实例
具体生成实例不仅需要完成视觉效果,还得生成AI的行为。
MassSpawner通过Mass Entity Definition来确定具体生成的实例。
Mass Entity Definition是一种新的资产类型,通过该资产,可以轻松处理不同实例使用的片段列表。该定义最重要之处在于视觉效果,如在不同LOD级别中显示什么?截距距离是多少?可视角有哪些?每级LOD的预算最高是多少?
如上图所示,框架中会存在四个不同的LOD级别,分别为红色10m(带有面部动画的Actor),黄色20m(无面部动画Actor),绿色500m(轻量级的顶点动画网格体),无显示。
在Mass Entity Definition中,人群与交通系统存在着一定的区别。
人群使用的是状态树,一个可扩展的通用型状态机。通过状态树,可以描述当前实例可能出现的所有状态,即控制AI的行为,如漫步、闲逛、奔跑等。状态是通过自上而下评估入口条件和运行相关参数化任务来确定的,确定后状态树会默认转换到该状态,除非满足了另外的转换条件。
此外,为了完成人群的相互避让,虚幻官方开发了一个基于力的避让机制,可以高效的处理动态和静态障碍,且会对身体碰撞做出反应,如在恢复原本行为前播放一段一次性动画。这些动画的数据来自于Mass动画处理器,而Mass动画处理器的相关数据来自于实体的片段。
交通系统中,则没有使用状态树。所有行为都在Mass Processor以编程的方式生成。
如沿着车道陆续前进,会沿着车道排列车辆。为避免车辆相撞,车辆会知道他与另外一辆车的距离,并根据距离调整车速,
且车辆采用人群中使用的避让系统,会对障碍物进行避让。
此外,交通系统需支持车道变更与车道合并。当检测邻近车道为空车道时,通过创建一个幽灵实体来模拟车辆出现在这条车道上,然后就可以进行变道了,且在变道完成后,会移除原车辆实体。
交通系统中的车辆也具有LOD系统,操作与人群的基本一致。红色10(可形变,可摧毁,可交互的Actor),黄色150(有物理效果,但只是在Mass Framework中模拟的Actor),绿色5000(仅有简单曲线和位置的实例化静态网格体),与无可视化。
交通系统的移动矢量生成,随时都可以发生,所以官方通过矢量拉动的方式来降低开销。
3、Mass AI
Mass AI主要分为Mass人群与Mass交通系统。具体实现在本文上部分已有讲述。