3D游戏中的AI是如何实现的?

人工智能 强化学习 游戏-ai 执行 赌博 算法请求
2021-11-04 09:27:40

几天前,我开始更多地研究人工智能并了解它的工作方式,这很有趣,但我找不到关于人工智能如何在 3d 射击游戏中实现的明确答案,比如 COD或几乎任何 3d 游戏。

我只是不明白他们如何根据游戏教给敌人如此不同的东西以适应其叙述。例如,3d 游戏中的敌人“AI”只是一堆 if-else 语句,还是他们实际上教敌人进行战略思考?在大型 AAA 游戏中,您可以清楚地看到敌人在射击时会躲着您,偷看射击,而不仅仅是冲上去被杀。

那么,3D游戏中的AI是如何实现的呢?他们如何编码?你不需要详细解释,只要给我一个想法。他们使用算法吗?

2个回答

AI与“游戏AI”的重叠

如今,如果你在网上搜索 AI,你会发现很多关于机器学习、自然语言处理、智能代理和神经网络的资料。无论如何,这些都不是人工智能的全部,特别是在历史背景下,但它们最近非常成功,有很多关于它们的公开资料。

游戏,尤其是动作游戏,往往不会使用这些新的流行技术,因为它们有其他优先事项。然而,在最广泛的定义下,一般的 AI 和游戏 AI,或者更具体地说,游戏中的敌人 AI之间有很好的重叠:

  • 游戏中计算机控制的对手实际上是在环境中运行的自主代理。

  • 游戏的目的是娱乐玩家,这通常转化为要求对手采取的行动具有挑战性和可信的行为(对于“可信”的某些价值)。

  • 带有物理引擎、其他移动代理和可能的危险的 3D 地图是一个复杂的环境,需要开发人员付出一些努力才能定义工作行为。

  • 很多游戏都需要解决寻路等一两个经典的 AI 问题。

综上所述,“游戏 AI”一词是描述敌方代理如何设计和实现的好选择。然而,今天在 3D 射击游戏中应用的人工智能目标与工业中用于控制决策的人工智能目标之间存在很大差异。

  • 动作游戏的每个敌人可用于决策的 CPU 预算较低。工业中的控制系统可以有专门的机器,有时是多台机器,只是为了运行人工智能。

  • 动作游戏的优先级是玩家的游戏体验,这转化为对有趣的敌人行为的“可信”定义的严格定位。相比之下,工业中使用的人工智能将准确性作为重中之重。

3D 射击游戏中的典型游戏 AI

在游戏中开发敌人 AI 是一项专业技能,仅与本网站的目的部分相关。有关详细讨论,您可能需要查看Game Development Stack Exchange ,其中包含许多关于Enemy AI等主题的问题和答案

非常粗略地说,像《使命召唤》这样的游戏中敌人 AI 的关键特征可能如下所示(我不知道 COD 是如何做到这一点的,所以在某些地方可能不准确):

  • 敌人将定义一种或多种行为模式。这可能就像“空闲”和“攻击玩家”一样简单,也可能有很多。对于COD,我怀疑有很多,有些可能在层次结构中-例如,根据敌人的设计,“攻击”行为可能有几种子类型。

  • 在一种行为模式中,可能定义了几个不同的组件,其中只有一些使用 AI 例程。例如,会有一些与行走或站立相关的特定动画,它们不是 AI,但如果代理试图四处移动,也会有一些寻路 AI。

  • 在不同行为模式之间切换的决定通常使用简单的触发器编写脚本,例如使用玩家和敌人位置之间的射线投射检测玩家可见性。当游戏 AI 无法产生逼真的结果时,通常是这些高级触发器很脆弱并且没有覆盖导致它的边缘情况。根据游戏的复杂性和行为的数量,可能会有一种算法来管理它们之间的转换,例如有限状态引擎行为树

  • 敌人将从他们的角度对游戏世界进行高度简化的观察,以加快 AI 决策。

  • 人工智能系统的 CPU 预算将受到限制。3D 游戏会花费大量资源渲染场景,并且通常会尝试快速渲染,例如每秒 100 次。可以通过多种方式分配 AI 预算,但相对常见的是 AI 计算分布在多个帧上,并且用于诸如寻路之类的任务的搜索结构会随着时间的推移而持续存在。

  • 在脚本行为和人工智能驱动的行为之间会有一个中间地带,其中分析是作为游戏设计的一部分进行的。例如,可以在某种程度上预先计算寻路路线。路点系统就是一个例子——它可能由游戏设计师设置,它可能由游戏资产构建管道的 AI 组件计算,或者它可能在游戏会话期间动态计算和缓存,以便多个敌方单位可以共享它。

  • 当不需要复杂的人工智能来实现目标时,当简单的计算或“木偶式”行为就可以了,那么可以选择这个。例如,一个敌人“瞄准”玩家可以是一个简单的向量计算,可能会根据射程添加一个失手率的因素,使敌人看起来很容易犯错,而不是像机器一样。

我不知道敌人使用掩体的行为是如何在 COD 中实现的。一个简单的变体是让每个敌人硬编码以使用特定的掩体,由于地图设计,这种掩体通常对玩家很有效。但是,可以肯定运行一个搜索算法(可能跨越多个帧),以评估敌人可以到达的附近位置与玩家当前的位置,然后将这些作为变量插入到“采取掩护并向玩家开火” “脚本化的行为。该评估将在敌人和玩家之间使用相同类型的可见性检测,用于触发敌人的“空闲”和“攻击”行为之间的变化。


顺便说一句,我觉得有趣的一件事是使用现代 AI 技术来混合动画并使演员和环境之间的交互看起来更逼真虽然它是一个比您所问的关于敌人行为的问题更低级别的功能,但它是机器人技术和游戏玩法之间的有趣交叉,我们可能会在下一代游戏中看到,并且可能首先应用于更详细的玩家模型动画。这是另一个应用于人形代理在不同任务之间平滑切换的示例,任何游戏玩家都会认为这是游戏引擎目前无法做好的事情 - 通常有许多由游戏中的事件引起的不和谐的过渡。

现在游戏中大多数所谓的“AI”敌人都是基于人类逻辑而不是机器学习,尽管它们被称为 AI。

提到游戏,ML 的第一件事就是强化学习。让机器人玩一轮以获得奖励(正面)或惩罚(负面奖励)。这些机器人可能终于知道如何隐藏或移动一点点进行射击。

我可以猜测射击游戏中机器人的一些可能动作:
移动 U/D/L/R、跳跃、躲避、寻找目标(坐标已经在内存中,仅在视角中有效)、射击。

在 3D 环境中训练机器人比在 2D 游戏中要困难得多,因为机器人的每个视角都是另一个环境状态,360 度左右和 360 度上下。敌人可以在任何位置,在框架内或框架外。