【游戏AI】2 - 游戏AI模型

在这本书中有大量的算法和技术。读者很容易迷失其中,所以从全局着眼去了解各个部分是如何组合在一起的十分重要。

为了有所帮助,我使用了一个统一的结构来讨论游戏中使用的AI。这不是唯一可选的模型,也不是唯一贴合本书中技术的模型。但是为了使讨论更清楚,我将展示每种技术如何适用于制作游戏 AI 角色的通用结构。

下图描述了这个通用模型。它将人工智能任务分成三个部分:运动、决策和策略。前两个部分包含基于字符的算法,最后一个部分针对某一团队或某一方进行操作。围绕着这三个AI元素的是一套完整的附加基础设施。

在这里插入图片描述

并不是所有的游戏应用程序都需要全部三个组件的AI

一方面,棋盘游戏,如象棋或冒险只需要战略层面,游戏中的 AI 玩家不需要自己做决定,也不需要担心如何移动棋子或角色。

另一方面,在许多游戏中根本没有策略。平台游戏中的 NPC 角色,比如《超级马里奥兄弟》(Super Mario Bros),是纯粹的反应型游戏,他们自己做出简单的决定并根据这些决定行事。AI逻辑并没有协同这些敌人角色来让他们将阻挠玩家的任务做到最好。

一、运动

移动是指将决策转化为某种运动的算法。在《超级马里奥·阳光》游戏中,当一个没有投射攻击的敌人角色需要攻击玩家时,它首先会直接面向玩家。当它足够近的时候,它就能发动攻击。攻击决定是由一组追踪玩家位置的移动算法来执行的。只有这样,攻击动画才能播放,玩家的生命值被消耗。

移动算法可能比简单的直接去某个点更复杂。一个角色可能需要避开路上的障碍,或者甚至通过一系列的房间。《分裂细胞》(Splinter Cell)游戏中某些级别的守卫会对玩家的出现发出警报。这可能需要导航到最近的壁挂式警报点,但可能很远,可能涉及复杂的绕过障碍物或穿过走廊的导航。

许多动作都是通过动画直接执行的。如果《模拟人生》中的一个模拟人物坐在桌子旁边,面前放着食物,想要进行一个吃的动作,那么就简单地播放吃的动画。一旦人工智能决定了角色应该吃东西,就不需要人工智能了(使用的动画技术不在这本书中)。然而,如果同样的角色在想吃东西的时候在后门,移动AI需要引导她到椅子(或附近的其他食物来源)。

二、决策

决策包括一个角色制定下一步该做什么。通常,每个角色都有一系列他们可以选择的不同行为:攻击、站立、隐藏、探索、巡逻等等。决策系统需要找出在游戏的每一个时刻,哪种行为是最合适的,然后被选择的行为就可以使用移动AI和动画技术来执行。

最简单地说,角色可能有非常简单的选择行为的规则。例如,在《塞尔达》游戏的各个级别中,农场里的动物会站着不动,除非是玩家靠得太近的,靠得太近它们会离开一段距离。
另一个极端的例子是,《半条命2》中的敌人会做出复杂的决策,他们会尝试多种不同的策略来接触玩家:组合一些过渡动作,如投掷手榴弹和镇压火力,以实现他们的目标。

有些决策可能需要移动人工智能来执行。近战(近身)攻击需要玩家靠近目标。在诸如《黑暗之魂》这样的重型战斗游戏中,决策会让角色向他们的目标移动,也会决定执行哪种攻击和动画。在其他游戏中,一旦作出决定,预定的动画是没有任何的移动(例如模拟人生中的任务吃东西)或直接修改游戏的状态没有任何形式的视觉反馈(比如《文明VI》中当一个国家AI选择研究一项新技术,它只是发生在玩家没有视觉反馈)。

三、策略

你可以通过移动AI和决策AI走得很远,而大多数基于动作的三维(3D)游戏只使用这两个元素。但是为了协调整个团队,需要一些战略性的人工智能。

在这本书的上下文中,策略是指一组角色使用的整体方法。这一类的人工智能算法不只是控制一个角色,而是影响整个角色集合的行为。群体中的每个角色通常会有自己的决策和运动算法,但总体而言,他们的决策将受到群体策略的影响。

在最初的《半条命》中,敌人以团队的形式包围并消灭玩家。一个人通常会冲过玩家,占据侧翼位置。这在最近的游戏中也得到了遵循,比如《荣誉勋章》系列中不断发展的AI引擎。随着时间的推移,我们已经看到一个敌人团队所能执行的各种战略行动越来越复杂。

四、基础设施

然而,人工智能算法本身只是故事的一半。为了真正为游戏构建 AI,我们需要一整套额外的基础设施,移动指令需要在游戏中通过动画或物理模拟等基础设施转化为动作。

同样的,人工智能需要从游戏中获得信息来做出明智的决定。这有时被称为“感知”:计算出角色知道什么信息。实际上,它的范围远不止模拟每个角色的所见所闻,它还包括了连接游戏世界和 AI 之间的所有 API,这些 API 通常是 AI 程序员工作的一个重要部分,而且根据我的经验,它是 AI 调试工作的很大一部分。

最后,需要对整个 AI 系统进行管理,使其使用正确的处理器时间和内存。类似于游戏不同模块通常存在某种类型的执行管理(比如渲染分层级),管理AI也需要一整套自己的技术和算法。
这些组件中的每一个都可能被认为超出了 AI 开发人员的职责范围,有时候确实是这样,特别是,动画系统通常是图形引擎的一部分,或者越来越多地有自己的专门程序员。但是大多数基础设施对于 AI 的正常运作是必不可少的。在这本书中,我在一定程度上介绍了除动画之外的每个基础设施组件。

五、基于代理的AI

在这本书中,我并不经常使用术语“代理”,尽管我所描述的模型是基于代理的模型。
在这种情况下,基于代理的 AI 是关于从游戏数据中获取信息,决定根据这些信息采取什么行动,并执行这些行动的自主角色。

它可以被看作是自底向上的设计:你首先计算出每个角色的行为,然后实现支持它的人工智能;而游戏的整体行为是由个体角色行为的协同工作体现出来的。我们将使用的 AI 模型的前两个元素,移动和决策,来构成了游戏中一个代理的 AI。

相比之下,非基于代理的 AI 则试图从上到下计算出所有事物的运行方式,并构建一个单一系统来模拟所有事物。例如《侠盗猎车手3》中城市的交通和行人模拟。总体交通流量和行人流量是根据时间和城市区域来计算的,只有当玩家能够看到它们时,才会变成单独的汽车和人。

然而,这种区分是模糊的。我们将看到非常自上而下的细节技术,而大多数角色 AI 是自下而上的。**一个好的 AI 开发人员会混合和匹配任何可靠的技术来完成工作,而不考虑方法。**这种务实的方法是我一直遵循的。所以在这本书中,我避免使用基于代理的术语,而是更喜欢笼统地讨论游戏角色,无论他们是如何构造的。

六、关于本书

在这本书的正文中,每一章都将回顾这个 AI 模型,指出每章主题与该 AI 模型的联系。这个模型对于理解“事物是如何连接的”、以及“哪些技术是其他技术的替代品”非常有用。

但分界线并不总是泾渭分明;这是一个通用的模型,而不是一个紧箍咒。在最后的游戏代码中,每个类别的全部人工智能技术,以及大量的基础设施,都将无缝地运行在一起。

许多技术也可能在多个类别中扮演着角色:例如,寻路既可以是一种移动,也可以是一种决策技术;类似地,一些分析游戏环境中的威胁和机会的战术算法可以同时作为单个角色的决策者或决定整个团队的策略。