本文回顾了游戏中AI的发展历程,从最早的脚本AI,到后来的有限状态机、行为树,再到时下流行的基于机器学习的AI,且看它是如何从“智障”一步步走向“智能”的

 

今天的电子游戏行业,蓬勃发展,日新月异。随着渲染画面越来越逼真、物理反馈越来越真实、传输速度越来越快,加上多人同屏、无线通讯、AR/VR这些新技术的加入,今天的游戏玩家们可以更好地沉浸在设计师们构建的虚拟大千世界里。然而,有一项古老的技术却仿佛受到了冷落,那就是游戏中的AI能力。

AI能力本来是游戏中的核心逻辑,它提供了最直接的玩家体验。其中的代表就是NPC(Non-Player Character,非玩家角色)。玩家和NPC的关系,就像奥特曼和怪兽一样,「Boss虐我千百遍,我却待他如初恋」。然而,在如今越来越高级的渲染、音效甚至交互方式面前,我们看到这些AI仍旧宛若“智障”一般,难以带来惊喜。

 

 传统脚本AI 

 

回顾电子游戏的发展史,不难发现,游戏中的AI能力是伴随着电子游戏一起诞生的。早在1950年,电子计算器还是微型真空管的时代,就已经有工程师们在创造游戏了。其中有一款游戏名为《伯蒂的大脑》(Bertie the Brain)[1],玩家可以在四米高的计算机上,通过九宫布局的背光键盘走子,与电脑对弈井字棋,同时大屏幕上会显示当前的棋局。

《伯蒂的大脑》游戏

 

当时这个巨大的电子设备上有一个亮着灯光的记分板,上面写着:“电脑大脑”vs“人类大脑”。似乎已经预示了,在电子游戏的发展道路上,游戏AI注定会作为一个重要的组成部分,为玩家提供对抗、合作、观察等丰富的游戏体验。

 

而AI能力真正被玩家广为熟知,是通过早期Atari 2600平台上的一些游戏,其中最典型的就是《吃豆人》(Pac-Man)。

 

《吃豆人》游戏

 

这是一款令无数玩家着迷和抓狂的游戏。其中的四个“小鬼”是通过AI来设计的,会不断跑动来抓“吃豆人”。玩家需要在一次又一次紧张刺激的路口抉择中,完成吃豆和躲避“小鬼”。新手玩家甚至会有被“小鬼”们戏弄的感觉。

 

实际上,当时的AI并没有那么智能。“小鬼”的“思考”方式非常简单:

  1. 红色:一直跟在玩家后面。
  2. 粉色:以玩家行进路线的下一个路口为目标。
  3. 蓝色:以下一个路口后的路口为目标。
  4. 黄色:完全随机行动。

 

小鬼们的“思考”方式

 

而就是这些简单的逻辑,组合起来后就仿佛具有了思考能力。让无数的玩家在一次又一次的被抓后,毅然开启新一盘的挑战。不过,虽然怪物的行为有多种规则,目的还是太过单一。在“吃豆人”这种简单目标的游戏中还好,到了目标更多、更复杂的游戏中(比如策略类游戏),那么仅按照单个预定目标一直走下去,显然还是过于“蠢”了。[2]

 

于是,以有限状态机、行为树为核心的游戏AI模式出现了。

 

 有限状态机 

 

有限状态机,简称FSM(Finite-state machine),是一种基于单个或多个状态的假设机器。有且只有单个状态可以处于活动状态,因此机器必须从一种状态转换到另一种状态,以便执行不同的操作。

 

如下图所示,基于有限状态机的AI怪物,可以体现出比较复杂的行为,包括原地巡逻、发现玩家后攻击玩家/躲避攻击,甚至在自身血量少的情况下,还会主动逃跑、寻求支援。

有限状态机

 

此时的游戏AI,会更接近对真实世界生物行为的模拟,产生更丰富的行为。但状态机的弱点也很明显,玩家熟悉后会逐渐总结出设计者的逻辑,并形成针对性的策略。好的一面是游戏AI本身产生了不少有趣的套路玩法,而坏的一面则是一些bug会让玩家找到漏洞,研究出反制策略让设计者的意图落空。

 

比如时下很火的动作游戏《只狼:影逝二度》,玩家就学会了利用NPC Boss的一个逻辑bug,在特定的地形位置,100%无伤地慢慢消耗boss血量,以“作弊”的方式击杀Boss。玩家把这种操作戏称为给Boss“修脚”。

 

《只狼》中的修脚师玩家

 

 行为树AI 

 

现代游戏AI的主流方法是行为树AI。它有着比状态机更为复杂的结构和设计,但本质上也是通过把人类的决策思路通过具体的逻辑判断,一层一层展开来实现的。

 

行为树的设计是通过一个树状结构,每次更新时都会从树的根节点出发,根据子节点的类型和状态,来确认要操作的状态切换以及实际动作。它比状态机复杂的地方在于,每一个节点都有执行的状态,以及,每次执行完成后都会向父节点传递执行结果。再配合各种内部的特殊节点,就可以实现有一定复杂行为的游戏AI。

 

其中比较重要的特殊节点包括:

Selector Node 选择节点:按顺序选择第一个执行条件为真的子节点,遇到True停止。

Sequence Node 序列节点:按顺序执行每一个子节点,遇到False停止。

Parallel Node 并行节点:从头到尾,平行执行它的所有子节点。

 

通过合理的设计,可以快速实现一个复杂AI,比如:让Boss通过选择节点攻击离它最近的玩家的同时,通过并行节点关注自身血量,并且通过序列节点使用各种技能给自己回血。上述行为的编写只需要几个简单的特殊节点,即可串起整个逻辑。

 

如下图所示,通过直接编写AI的判断逻辑,制作对应的动作,即可实现一定程度的“智能”。基于可视化的工具,可以很好地看到行为树的执行状态。

 

可视化的行为树

 

行为树对游戏设计者来说,已经是一个相对靠谱的解决方案。但随着游戏越来越复杂,行为树的节点数量会出现爆炸增长,维护难度也随之大大提升。

行为树节点爆炸

 

但即使在这么细致复杂的结构下,一些关键问题也始终未能得到解决:

 

1) 未知输入条件适应

基于人类想实现的效果、以人类思考逻辑来编写,始终无法确保不会存在设计者意料之外的分支。在那些分支下,由于输入条件是未知的,再精雕细琢的AI也会显得特别“弱智”。随便举个例子,打过《魔兽争霸3》的读者可能知道,早期人族打AI时有一个耍赖战术:箭塔流。第一个开发出这个战术的玩家看来是吃透了电脑的智力水平,直接一路把防御塔修到对面家门口,电脑就算看到有个农民在这造塔也会假装没看到,继续安心工作。跟这样的电脑对手打,中等水平的玩家都会很快丧失兴趣,更别提那些指望提升技术的高手玩家了[3]

《魔兽争霸3》玩家“箭塔流”取胜

 

2) 固定的临界值判断

AI在编写判断逻辑时,一般都会有一个临界值。比如怪物在追击了玩家一定距离后,自动会返回巢穴。而聪明的玩家,会在此时立刻转身开始反追怪物,导致怪物傻傻挨打。这种行为还有了一个专门的名称:“拉怪”。以至于现在的游戏不得不在怪物返回巢穴的时候,增加回血机制或者直接变成无敌状态。可见这种单一的条件维度和临界数值,很容易被玩家感知并加以利用。

玩家“拉怪”操作

 

3) 随机性和成长性缺失

行为树规则下,每次执行的行为通常也是固定的,既缺少由随机性能带来的分支广度,也缺少经过时间累积、根据玩家个性化操作产生的分支深度。对玩家来说,见过第一次之后就不会再有任何惊喜感。电影《勇敢者的游戏:决战丛林》里有个桥段就是调侃游戏里NPC的对话内容一成不变。

《勇敢者的游戏:决战丛林》剧照

 

 总结 

 

回顾游戏AI的发展历程,可以发现今天的游戏AI还有非常大的提升空间。随着深度学习、人工神经网络的兴起,游戏AI(甚至游戏里其他方方面面)的问题,都可能迎来全新的解决思路。包括前文提到的对未知输入条件的适应单一的临界条件值、以及随机性/成长性问题等,都是深度学习所擅长的领域。

 

而结合大数据、统计学习的能力,可以让深度学习在游戏关卡设计、数值平衡、NPC对话内容生成、美术模型/贴图、动作资源产生等方面带来进一步的效率优化。

 

我们有理由相信,在不久的将来,AI赋能下的游戏将会变得更加丰富多变、更加贴近真实世界,甚至开创出全新的游戏品类。

 

从“智障”到“智能”——浅谈游戏中的AI实现

2019-07-19
0