7

GDC 人工制作 vs 系统自动化:《神秘海域4》 中的战斗AI平衡 解读 part1

 3 years ago
source link: https://zhuanlan.zhihu.com/p/261111487
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

GDC 人工制作 vs 系统自动化:《神秘海域4》 中的战斗AI平衡 解读 part1

一边撸猫,一边敲代码

原视频:GDC Authored vs. Systemic: Finding a Balance for Combat AI in Uncharted 4

(需自备梯子)

Part2地址:https://zhuanlan.zhihu.com/p/264828754

Part1

1.1 Combat Design in Uncharted 1-3

神海4团队首先介绍了神秘海域第一部到第三部的战斗设计。神海前三部作品的战斗流程设计高度依赖硬编码。

他们提出了分区式NPC的概念,NPC只可以在指定的区域进行移动、战斗。策划需要在场景里设置好区域,保证NPC整体上可以覆盖到玩家所有可能的前进路线。

v2-458db8641614fe05030d78e3ac33ff48_720w.jpg

这么做的优点是,NPC可以均匀地分布在场景中,防止他们聚集到一起,还能产生一种NPC在智能利用空间地假象。缺点是,策划需要想到玩家所有可能前进的路线,为所有路线设置好分区。由于前三部的战斗场景比较小,战斗流程较为线性,所以分区式NPC机制运行良好.但是第四部的战斗场景得益于PS4的性能而扩大了很多,此机制没有办法良好运作。

在给NPC手动分配区域需要一些技巧。首先要让场景中地部分NPC的分区跟随玩家进行移动。这种区域作为前方战线, 使得玩家无论移动到哪里都可以感受到NPC的存在,保持战斗过程的持续紧张感,不会走到一个地方就突然没有了敌人。然后让场景中部分NPC的分区固定在场景的出口附近,并且将这些区域设置得大一点。这种区域作为后方战线,而且在战斗结束后,玩家正好面对出口,起到了引导玩家前进的作用。最后让场景中部分NPC的分区固定在视野最好的地方,并且将这些区域设置得小一点。这种区域作为聚集点存在。

v2-bb4a260797be19b1d6adf7cc361c615b_720w.jpg狙击点

上面提到的区域不但可以静态设置,还可以在运行时根据战斗情况进行调整。接下来用两个例子进行说明。首先来看一下第一个例子,注意观察左方阳台的NPC。

系统自动为一个NPC分配了一个区域在阳台上

系统自动为一个NPC分配了一个区域在阳台下方。然后玩家等NPC走到油桶附近再把油桶打爆,瞬间可能觉得自己很帅,但是其实都是策划设计好的。

再来看一下第二个例子

前方的NPC倒下后,后面的NPC分区会依次设置到前方。有利于保持战斗节奏,持续给予玩家压力。

1.2 Uncharted 4 Design Goals

由于游戏的运行平台从PS3升级到了PS4,性能得到了提升。团队希望实现在大场景下的战斗,以下是马达加斯加的战斗场景。

虽然还是线性战斗流程,但是增加了广度。神海前3部所使用的单纯的分区式NPC机制不再适用,神海团队对该机制进行了调整。

有了这么大的场景,就希望提升主角攀爬能力在战斗中的实用性,所以可探索的垂直空间也增加了。NPC也需要由一套良好的系统来处理攀爬。

前三部在潜行的过程中被法线就没有办法回到潜行状态。这次需要实现一套完整的潜行循环流程,在非战斗、战斗、潜行状态之间进行切换。

一场战斗中同时出现的NPC数量从8个增加到了16个,需要更好地调度敌人。

降低策划地工作量

1.3 Fundamental AI Technology

已有的以及为实现神海4设计目标而提出的基础AI技术

1.3.1 框架概念

Skill拥有一个状态机,例如战斗Skill地状态机有开放战斗状态和掩体战斗状态。Skills是一个由Skill组成地优先级列表,运行时会实时判定各个Skill是否开启,然后再所有被开启的Skill中选择优先级最高的Skill作为当前Skil。Behaviour代表具体的行动,例如移动到一个点、进行设计。Locomotion Controller用于移动NPC和驱动动画,类似Unity的Animator。Bahaviours是一个由Behaviour组成的堆栈,还会去合理的调用Locaomotion Controller。当Skill的状态机确定一个状态后,会将多个Behaviour压栈到Behaviours。

1.3.2 Post

Post是地图上的位置标记,供NPC使用

1.3.2.1 手动标记的数据

黄色区域代表可正常行走区域,绿色区域代表可潜行区域

绿色线段链接的地方可以执行特殊的动画(例如上窜下跳、跃过裂缝、翻越掩体等)来越过障碍。这些特殊动画都需要定义入口、循环体、出口,所以一个动画可用于翻阅各种距离的障碍。

绿色线段标记了各个攀爬区域,橙色线段标记了各个攀爬点的连接处,这些标记可以让同伴NPC执行玩家的部分攀爬动作。

1.3.2.2 生成Post

引擎会利用以上手动标记的数据自动生成所有Post。下图中,Green Post代表开放战斗点,NPC会在这些点进行战斗操作,例如开抢、扔手雷、拳击等。Organge Post代表掩体点,NPC会在这些点位躲避来自玩家的攻击。Teal Post代表制高点,NPC会在这些点进行狙击、探头射击等。Purple Post代表攀爬点,NPC可以攀爬到这些点位上,利用垂直空间。

1.3.3 Post Selector

生成了大量Post之后,就需要用Post Selector模块来为为当前正在执行的Behaviour所属的NPC对各个Post进行评分,最后选中总得分最高的Post执行Behaviour。Post评分的指标有。NPC位于此Post时能否看见主角,能看到主角可以获得更高的分数;NPC到此Post的距离,距离越近获得的分数更高;此Post是否位于NPC所属的分区,不在分区内部的Post都直接零分。间接限制了NPC只能在自己所属的分区内移动、战斗,前三部中使用的分区式NPC机制在这里得到了保留。

例子

1.最下面的NPC正在射击玩家

2.突然决定靠近主角

3.Behaviour使用Post Selector来选择最合适的Post来执行具体操作,更详细的讲解请参考Travis McIntosh GDC 2014 "The Last of Us Human Enemy AI"

4.评分情况

上图中,绿色Post代表得分非常高的Post,这些Post距离NPC较近、NPC躲在该Post的掩体后面可以正对主角、NPC距离主角较远(因为NPC使用的是步枪,方便射击)。红色Post代表得分比较低的Post,这些Post距离NPC太远、距离主角太近。

上图中全是零分的点,因为NPC躲在这些Post的掩体后面没有正对主角且遮挡视线、比当前NPC所处位置更加远离主角。

5.最终选择

1.4 Thing That Didn't Work

接下来会讲解神海团队开发早期的失败尝试。

团队首先尝试同时使用分区式NPC机制Post Selector机制。第一张图中央的NPC的分区被设置在了如图所示的立方体中,NPC没有任何行动,AI宕机了。具体原因是,NPC处于Combat Skill,Combat Skill需要使用Post Selector去选择一个合适的Post。出于性能考虑(不止),只对在以主角中心,半径为25米的一个球范围内的Post进行评分,最后选取评分最高的Post执行Behaviour。由于地图较大,主角距离NPC过远。由于这些Post都在NPC所属的分区之外,Post Selector给这些点都打了零分。

这是一个相当基础的框架设计瑕疵,分区式NPC机制和Post Selector机制完全脱节。在设计的一开始就没有考虑它们之间的相互配合。按理来说,一个有着这么多年游戏制作经验的团队不应该会犯这样的错误。

随后神海团队设计了一个新的系统来代替分区式NPC机制,需要实现NPC能够分散分布以及智能占据空间。

1.4.1 新系统的首次尝试

为了让战斗更有层次感,加大了武器射程对战场层次的划分。因为主角地移动速度还是相对较快,NPC需要配合移动,最终导致肉眼可见的NPC频繁同时转移位置。如下视频所示

1.4.2 新系统的后续尝试

为了更好地对候选Post进行评分,神海团队提出了连接度(Connectivity)和地理优势(Vantage)两个概念。

连接度需要利用navMesh生成的网格自动识别出特征地点,例如房间门口、走廊等。但是只适用于人工建筑,不适用于自然场景。因为人工建筑的空间相对较小,navMesh网格的分辨率足够大。而自然场景的空间相对开阔,navMesh网格的分辨率不够大。这个衡量指标没有在神海系列作品中使用,但是在隔壁的《美国末日》系列作品中大量使用。

地理优势用于处理在NPC看不见主角的情况下,应该选择移动到哪个Post。下图中橙色的区域代表主角从NPC的视野内消失时,在3秒内大致可移动到的位置。从每个候选Post开始向橙色区域内的所有Post打出射线进行检测,绿线代表无遮挡,红线代表有遮挡。最终选择绿线最多的候选Post进行移动。

上面所提出的两种度量指标都没有办法适应所有的游戏场景。很大的一个原因是这两种度量指标都是对策划的高级决策进行逆向工程得到的,都是在尝试将策划的具体想法转换成一套通用的自动化算法。这样得到的算法限制了策划为每场战斗增加独特性,因为算法的成功运行总是存在一定的前提条件,在前提条件的限制下,策划可配置出来的结果也受到了很大的限制。而且算法的执行总是存在着一定的规律,玩家多次游玩之后总是能察觉出这个规律。当然,游戏的玩法总是会存在或多或少的规律,非核心玩法可以有些许规律,但是核心玩法的规律越模糊越好。这样游戏的可玩性,玩家的探索欲才会足够强。

1.4.3 Search Skill的首次尝试

前面有提到神海4需要实现一套完整的潜行循环流程。主要的难点在于,玩家消失在所有NPC的视野之后,NPC应该如何展开搜索。

当玩家消失在所有的NPC视野之后,NPC最后一次看见玩家时玩家的所在区域会会被设置上一个初始的热度值。如下图所示,紫色表示很热,蓝色表示很冷。

NPC开始搜索后,会以热度值为优先级依次搜索各个区域,期间视线扫过的区域的热度值会不停下降,如下视频所示。

从上体视角来观察NPC的行为会觉得很正常、很自然,但是从玩家的视角来看就没那么自然了。这个搜索算法存在以下缺点。

玩家难以预测NPC的移动路径,NPC会经常突然180度转向,正常人很少会频繁180度转向。当玩家看着NPC渐渐走远,冲出草丛准备转移位置时。NPC这时突然转向就很尴尬。

NPC还会成群结队一起展开搜索,因为大家都按热度值对待搜索区域进行搜索。

NPC不容易观察到一些地图边缘的点,这些点所在的区域热度值一直降不下来,NPC会不断去查看这些边缘区域。最终导致场景的中央很空旷,玩家很轻松地大步通过这个场景。

存在这些缺点的根本原因是神海团队从NPC的视角去设计Search Skill。游戏是为玩家设计的,而不是为NPC设计的。我们应该要从玩家的视角去设计游戏,尽可能地保证玩家游戏体验良好,即使实现上不是那么地符合现实。

1.4.4 失败总结

神海团队在给神海4做设计时,想要从过去的人工配置模式完全转换成系统自动化模式。希望大幅度降低策划的工作量,提升系统的智能化程度。但是这个转换用力过猛,步子大了扯着x,导致神海团队做出了很多错误的系统设计。所以我们在进行全面的系统设计时要在人工配置系统自动化之间找到平衡点,越早越好。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK