育碧是如何做AI的? 《全境封锁》敌人AI设计思路分析

作者:对面对更惨 编译 2019-05-30

2016年,Tom Clancy's The Division 将玩家们带到了饱受战火蹂躏的曼哈顿市区,并在此与各个派系的敌人和其他特工展开战斗。这款Ubisoft出品的RPG式射击游戏为了让玩家们时刻保持警觉,创造了各式各样的敌人。

但与迄今为止我们所谈论的那些单机游戏不同,全境封锁需要解决作为一款在线多人合作游戏所需要面临的各种实际问题,并明确如何在全球数以千计的玩家环境中管理各类系统。

整个系列文章将由两部分组成,在第一部分中我将讨论Massive Entertainment工作室如何在全境封锁世界中创造各种有趣并具有挑战的情景;他们如何设计敌人,并且怎样在成千上万的玩家争相涌入纽约街道时管理这些敌人的行为。

part 1

全境封锁

在病毒爆发之后,纽约市陷入了混乱,直到污染得到控制并恢复秩序前都将处于与外界隔离的状态。玩家将扮演国土战略局的特工:在国家紧急状态期间辅助政府部门,帮助第一批“响应者”为纽约地区带来秩序。

玩家可以在总面积超过6平方公里,从第21街区和第9街区到第55及第3大道的曼哈顿区域单人或最多4人一组完成一系列故事及开放世界事件。


为了给玩家带来各种各样的挑战,地图的各个区域将有5个敌对派系控制:包括热爱火焰喷射器的清扫者,从Rikers岛逃出来的罪犯以及私人雇佣兵公司“The last man battalion”。此外,该城市中受污染最严重的的地区——“暗区”已经被封锁,这是游戏的主要PVP场所,在这里,你不仅会遇到敌人,其他玩家也可以在任何时候攻击你。

当玩家探索纽约市时,他们讲在以下三种场景之一中与非玩家角色(或NPC)互动:

  • 作为开放世界中的漫游者时:如“野狗”、平民、靠近安全屋时出现的联合阵线士兵或巡逻的敌对暴徒。
  • 遭遇战:这是玩家在游戏世界中发现敌人、怪物的情况,通常是由于游戏中系统的设置,在设计师意愿的驱动下使玩家进入战斗或制定代替路线。
  • 剧情任务:由设计师制作的任务,是游戏的主要故事的一部分。这些都是由较长的情节所驱动的,并将包括多个战斗模块。


在每种情况下,游戏世界出现的AI将符合以下两个设计目标之一:

  • 丰富游戏中的世界架构,为玩家增添沉浸感
  • 提出需要玩家在战斗中解决的难题


后者正是游戏的关键部分:

因为它意在鼓励玩家于战斗开始前侦查相关区域并建立战略构思。一旦战斗爆发,玩家需要不断重新评估他们战斗对象的优先级和空间位置,以免受到损伤。这就需要地方NPC具有有趣的行为特征:玩家能够识别、在基本行为方面保持一定的一致性、使用各类子系统来处理面临的威胁、动态化的目标处理能力以及对玩家行为作出反应。

系统

所有NPC行为都是通过行为树系统来实现的,其中行为树的子模块将用于激活并运行一些应对某些目标或变量的特定行为。这可以是导航至目标的目的地,探索潜在的威胁区域,攻击敌人,进入掩体等等。我们来看看敌对NPC的设计和结构。


上图中的行为树(注意:从右至左阅读)拥有丰富的分层结构,这种结构能够为每种行为提供多条路径。这样做的好处是既可以从一定范围内产生出一种特定行动,又保证了整个系统尽可能的灵活。

行为树的顶层【右橘色】分解了NPC的三种关键反应方式,分别为“系统直接命令、“维持主动战斗”和“在必要时启动战斗“。

继续向下执行则到了条件层【蓝色/紫色】,该层将根据当前的世界条件及角色本身的一些情况决定可以执行的行为。最后移动至下层【左侧】,该层将处理游戏中可能发生的几乎所有的战斗变化。

这其中的关键是构建中间层,以便它可以链接到下层的各种不同行为。这样做也是为了避免基于一些非常特定的条件通过行为树的下半部分去复制行为。因此,游戏中所有不同的NPC(下文中会提到),以及Seeker Mine-技术上讲,它是一个人工智能角色-会拥有类似的子树或者行为来满足需要进行复制的情况。

正如您想象的那样,这将导致行为树架构相当复杂,下图中显示的也是如此,这需要编程团队和设计团队密切合作才能实现。

考虑到问题的规模及面临的挑战,编程团队开发了许多工具来编辑和调试每一个NPC,并将这些工具构建到全境封锁所使用的Snowdrop引擎中。这些调试工具的用途非常广泛,它们允许开发人员在联机测试的实例中识别某个因特定字符所产生的问题,之后我们会继续讨论这一点。


现在,我们已经对AI架构有了一些了解,让我们再来看看NPC本身的设计。

原型&派系

在发售时,全境封锁共有5种派系,其中包括36个敌对NPC类型,原型用于确定角色的行为类型,而派系则用于控制特定的NPC属性。为了实现游戏玩法的多样性,全境封锁中有大量的原型:

  • 突击型:采用基本的设计与掩护AI
  • 掠夺者:直接冲向目标
  • 坦克:能够承受并造成大量伤害
  • 狙击手:造成远距离且准确地攻击
  • 投掷者:投掷手榴弹或区域效果的物品
  • 支援型:协助战斗中的友方单位(例如治疗)
  • 抑制型:限制玩家
  • 领袖:为附近的友方单位提供增益
  • 控制者:通过间接方式战斗(例如使用炮塔)


当然,还会有一些不遵守原型的特殊NPC-但这些仅用于终局游戏和BOSS战。

这些原型中的每一种都会明确反馈出玩家将面临何种危险且让玩家思考如何进行攻击。此外,很多原型间会相互补充(如下图所示),以便设计师可以利用不同原型间的属性来实现他们的目标。


例如,当狙击手保持与玩家间的距离并尝试造成大量伤害时,掠夺者会尝试缩小他们与玩家间的距离并造成近战伤害。与此同时,坦克和抑制型将迫使玩家利用掩体,而投掷者会尝试将玩家从掩体内逼出来。

这样一来,AI就迫使玩家在敌方单位构成的特定战斗中使用不同的战术。这种设计源于全境封锁在战斗上期望玩家不断去评估三个关键的游戏属性:

  • 目标的优先级排序:我现在应该对谁发起攻击?
  • 转移位置与暴露:在当前情况下,我是否处于最佳位置?玩家需要经常性地移动至更好的战术位置以防止在战斗中处于不利
  • 续航奖励:提供长时间的战斗,考察玩家在一定强度的战斗下保持水准的能力


派系

就像前文所说的,36种NPC类型会分布在主要的派系中:Rioters,Cleaners,Rikers和分为1级与2级的Last Man Battalion。根据您在纽约地图当中的位置,您将在战斗中遇到一个或多个派系。

每个阵营都会随着游戏的进行按我所列出的顺序而改变难度。鉴于有如此多的NPC原型,设计者很容易通过迭代的方式进行难度管理,并且足以在整个NPC群体中进行普及。


为了实现这一目标,Massive构建了一个AI配置系统,可以修改NPC的许多公开属性。这使得他们对玩家构成的威胁变得更加可控。这是其中的八个属性:

  • 对玩家行动的反应时间
  • 移动速度
  • 集体行为
  • 掩体运用
  • 技能运用
  • 蹒跚抵抗
  • 抑制抵抗
  • 生命力
  • 攻击准确性


构建的配置文件可以在特定NPC类型及NPC所在的派系中保持一致。例如:

Rioters-他们是玩家在游戏中会遇到的第一个派系,其仅限只用“Dumb“配置文件,其中所有属性都相当低。

当然,重型、支持型、炮塔都拥有专用的配置文件,适用于所有派系一致的原型。与此同时,Last Man Battalion拥有自己独特的精英配置:这使得他们对玩家的威胁远远超过其他所有人。

对AI行为产生影响的最后一个因素是他在游戏本身中的角色定位。

角色的范围从常规的敌人到退伍军人、精英,最后则是命名敌人,他们将作为最高优先级的目标。随着NPC角色定位的提高,他们的基础属性也会受到影响,例如武器伤害、护甲和设计准确性,精英和命名NPC可以获得特殊的武器和模型。

他们甚至可以获得定制的激光瞄具,这些瞄具对他们的游戏能力几乎没有任何影响,但这会让玩家更紧张。

小结

这套体系使全境封锁可以建立一个严格且多样化的非玩家角色集合,帮助其还原一个末世的曼哈顿。虽然这一系统本质上使用着相同的核心AI架构,但使用原型、派系、配置文件与角色排名不仅可以实现敌人行为,还可以为全球玩玩家带来挑战。

但其中有一个更大的问题:如何在一个为世界各地玩家在线运行的游戏中保持这些系统的性能呢?自发售一来,全境封锁已经拥有了至少1000万名玩家,并且拥有超过100万名同时在线玩家。这就需要在数千个单独的游戏实例中创建、维护与控制许多的非玩家角色。

在本系列文章的第二部分中,我们将看看Massive Entertainment如何解决这个问题并进行在线整合,确保游戏尽可能顺利运行而制定的设计决策及对AI系统提出的问题与限制。

此外,我们还将介绍为在线实例中测试AI行为而构建的工具,以及如何使用AI工具在测试服务器上验证故事任务的一致性与稳定性。

在上一个部分中,我们研究了游戏的整体结构和它的核心敌人AI。当玩家们在纽约的街道上漫步时,他们面临着各种各样的人工智能单位,无论是敌对的还是友善的。全境封锁采用庞大的行为树去实现并处理决策,其中包括属性管理系统、监督角色派别以及技能档案和敌人级别等。


但是这些都无法解决这个游戏面临的更大更根本的问题:与我迄今为止讨论的人工智能方面的游戏问题不同,全境封锁是一款在线游戏,需要玩家连接游戏服务器才能够游玩。

这就要求人工智能的执行方式必须使所有的在线玩家拥有相同的游戏体验:在一个与其它玩家共享的世界中,使用自己的设备与相同的敌人作战。

因此,在这第二部分中,我们将探讨如何建立非玩家角色的在线基础架构、如何创建和管理这些角色,以使所有玩家获得相同的体验。同时也会讲一讲如何利用人工智能角色在开发期间帮助测试并完善游戏中的新内容。

part 2

AI如何在线工作

如果你不熟悉在线游戏是如何运行的,这个运作机制我们称之为客户端-服务器模式。每个玩家他们从他们自己的游戏副本(PC或者主机,即客户端)登陆到托管游戏的服务器。

这个服务器承载这游戏发生的事件:每天或每周发生的种种挑战、正在发生的世界事件和游戏中的经济情况等。

这就是我们在执行游戏时需要考虑的:一个小队中的玩家和他的队友们的经历不该有任何差异。如果你被敌人近距离攻击,但你的朋友看到的并不是这样,这其实非常可怕。

为了解决这个问题,游戏中所有的人工个系统都将运行在服务器端。我在第1部分当中提到的行为树人工智能系统中没有一个是在客户端运行的,这一切都发生在服务器上。这确保了所有在线玩家的一致性。

行为执行

但这就带来了一个问题,行为树只代表了游戏中人工智能的决策,但玩家需要的是在游戏中看到这一切决策所带来的表现,因此需要游戏中的各种角色在服务器上去执行行为树所做的决策。

同时,为了减少玩家和服务器之间传递的数据量,使人工智能能够顺利执行,所有角色的动画都将全部在客户端进行处理,服务器上的人工智能系统对于指定角色的动画如何工作的理解十分有限,因此它只需要知道要执行的是哪个角色,而客户端会最终处理所有这些问题。


这种做法解决了一个问题,使得客户端和服务器之间发送的数据保持在最小值,但却在NPC移动方面呈现出了一个新问题。

全境封锁中的所有非玩家角色的使用一种更为智能的角色动画移动过程,即以动画来驱动移动。这使得NPC能够更流畅地移动并且他们的动画将更符合运动学。

但是,如果服务器不去监视移动的执行,它如何知道这些角色是否移动到了正确的位置呢?为了解决这一问题,服务器上的运动系统会为要执行移动的角色计算一个运动计划,然后在客户端上,它必须在角色的动画中寻找与原始计划匹配的可用动画来创建一个运动路径。

这听起来好像很复杂,但它其实将运算与数据的消耗保持在一个非常小的范围内。


这种做法也会产生一个问题,就是某些信息或事件将在客户端和服务器上同时执行,例如NPC部署炮塔、投掷手榴弹或者进行治疗行为等。

这样做是为了减少客户端和服务器之间的数据传递,但这也意味着一些信息需要在运行时进行同步。这种行为也导致了全境封锁发布后的头几个月,PC版本上出现的数据修改和外挂泛滥,玩家会修改客户端中的数据,给自己带来生命值与伤害的提升。

管理世界

全境封锁中的每个服务器都包含着几个游戏地图的实例,在最繁忙的时期可能会有多达1000名玩家在同一个指定的服务器上游玩,同时还伴有上千名AI角色。

为了适应大量的玩家和人工智能角色,服务器的刷新频率为10HZ,这意味着所有的行为和位置每秒都会更新10次。服务器本身对于2016年来说,也是非常强劲的——40台核心机器拥有256GB的内存,通过对游戏进行优化后(包括我没有提到的许多优化),它们可以在不到20毫秒的时间内对每一个游戏世界运行一次标记更新,在最坏的情况下,最慢也只需要100毫秒。

另外,玩家和服务器之间发送的连续数据非常少,其平均传输速率仅为每秒50千比特左右。因此,理论上你可以在56K调制解调器上运行全境封锁。


有趣的是,服务器并不是限制游戏中人工智能数量的因素。真正限制的因素是玩家的设备——个人电脑或主机。

在开发的过程中,我们发现玩家的控制台成为了人工智能同时执行数量上的瓶颈。因此,同时在游戏中活跃的NPC数量是有限制的。

如果你已经玩过了全境封锁的故事模式,你可能会注意到游戏经常会出现时长不等的休息时间来结束战斗部分,这其中的大部分是为了解决上述中玩家设备造成的NPC数量瓶颈的问题。

全境封锁也在开放世界的基础上建立了不同的区域。

在每个区域中,如果一个NPC是作为游荡者或者特定的遭遇而布置的,它将被限定移动的范围。这很大程度上是为了确保NPC不会偏离他们最初的刷新点过远,这意味着你不会在时代广场碰到Last Man Battalion的部队;同时,这也避免了玩家会被一个敌人从曼哈顿的一边一直追逐到另一边。


除此以外,人工智能角色还拥有与导航行为树相连的感知系统。

这些角色即拥有锥形的视觉传感器,也能根据他们的强度等级在不同的距离范围内听到声音。另一方面,他们还可以进行战术分析,以确定当战斗开始时,他们可以进入150万个掩体中的哪一个。

这些传感器的更新速度和精度取决于玩家与他们之间的距离,也取决于服务器中的天气系统。雨雪等其他恶劣天气将影响这些传感器的范围和精度。同时,敌人的感知系统会在战斗中每帧更新,而在距离玩家50-150米之间每2秒更新一次,当周围150米没有玩家角色时,更新将被完全禁用。


构建测试工具

现在,我将要讨论的是我们究竟测试了多少非玩家角色和游戏系统,以及AI是如何帮助并构建全境封锁的。

正如第1部分所提到的,Massive构建了大量的工具,使设计师能够完成和迭代他们的设计,同时也帮助程序员在游戏中发现特定的问题。

Jonas Gillberg在2016年的GDC中谈到了他们使用的工具和系统,这些工具对于程序员来说是很必要的,而对于不同规模的开发团队,想要简化生产流程,这是一个很好的参考。

这种测试工具可以在行为树处于运行状态时对其进行全面的调试,但最令人印象深刻的还是在实时模拟测试中这些工具体现的潜力。

调试工具链允许使用本地服务器来模拟活动实例的行为,这不仅可以确定问题出现的位置,还可以在测试期间回滚时间线,以此来了解问题何时发生。


当然,确保每个任务都是完整、有效和稳定的是测试中最有意义的地方。像全境封锁这类规模的游戏,一点点小错误都可能阻断任务之间的进展,或者使玩家无法触发游戏内所需的特定事件。

而Massive构建的测试工具可以创建数百个能模拟玩家的AI角色,并将它们放入测试服务器来运行以跑通所有内容。

超过1000名AI玩家将被投入到地图中,但是他们具有各种各样的作弊功能:他们不尊从物理碰撞,如果有有必要时可以进行穿墙;也可以在世界上的任意两点间执行不需要导航的移动行为。

无论他们是个人还是已经组成了队伍,都可以解散并完成整个任务,亦或是探索开放世界。除了四处游荡并杀死他们该杀死的东西以外,他们并不知道他们该做什么,但是这1000只“敲击打字机的猴子”可以帮助分析错误并测试服务器负载,验证任务进展、世界事件、动态遭遇等多方面的问题。

结语

距离Tom Clancy‘s The Division 2的发布已经不远了,思考并见证这些系统如何在全境封锁2中扩展是非常有趣的一件事。

很明显,全境封锁将在其整个生命周期内得到不断的更新,如:地下模式DLC、生存模式DLC和Last Stand,甚至还有过去一年中的许多免费更新,他们仍然在设计有趣的东西。

当然,许多现有的人工智能功能将在这段时间内得到改进与扩展,而一些新的系统将会脱颖而出。就目前而言,他们会如何发展仍然是一个迷,但我可以打赌,未来你一定会在这里再次看到全境封锁的AI相关文章。

原译文:
https://www.gamasutra.com/blogs/TommyThompson/20181203/331725/Enemy_AI_Design_in_Tom_Clancys_The_Division.php

参考文献:

Jonas Gillberg, "AI Behaviour Editing and Debugging in Tom Clancy's The Division", Game Developers Conference (GDC), 2016.
Drew Rechner & Philip Dunstan, "Blending Autonomy and Control: Creating NPC's for Tom Clancy's The Division", Game Developers Conference (GDC), 2016.
Philip Dunstan, "How Tom Clancy's The Division Simluate Manhattan for Millions of Players", Nucl.ai 2016.


作者:对面对更惨 编译
专栏地址:https://zhuanlan.zhihu.com/c_1055482039062671360



最新评论
暂无评论
参与评论

商务合作 查看更多

编辑推荐 查看更多