paint-brush
AI 游戏开发者做什么以及如何成为其中的一员经过@aleksandrpindyk
1,225 讀數
1,225 讀數

AI 游戏开发者做什么以及如何成为其中的一员

经过 Aleksandr Pindyk1m2022/06/07
Read on Terminal Reader
Read this story w/o Javascript

太長; 讀書

Aleksandr Pindyk 是基辅 Wargaming 工作室 AI 团队的首席工程师。他一直在为最受欢迎的在线游戏之一 - 坦克世界开发 AI(人工智能)。 游戏开发中的人工智能在复杂性上各不相同,因为游戏体验的多个方面都可以在人工智能的帮助下得到帮助。

People Mentioned

Mention Thumbnail

Companies Mentioned

Mention Thumbnail
Mention Thumbnail

Coin Mentioned

Mention Thumbnail
featured image - AI 游戏开发者做什么以及如何成为其中的一员
Aleksandr Pindyk HackerNoon profile picture

我叫 Aleksandr Pindyk,是基辅 Wargaming 工作室 AI 团队的首席工程师。五年多来,我们的团队一直在为最受欢迎的在线游戏之一 - 坦克世界开发 AI(人工智能)。我想多谈谈游戏开发中人工智能开发者的职业,他的工作细节,以及如何成为一名。


首先,让我们定义什么是游戏 AI。如果我们摆脱维基百科的枯燥定义,游戏 AI 是一个模仿角色或玩家行为的系统。根据游戏的类型和目的,人工智能的开发使用了不同的技术和方法。让我们看看主要的游戏类型和 AI 目标。


人工智能的目标是打败人类玩家的游戏


让我们来看看我们都知道的游戏。国际象棋和围棋就是一个很好的例子。这种类型的游戏可以使用基于神经网络的人工智能。由于 AI 的主要目标是不惜一切代价击败玩家,因此它不需要模仿人类行为。这种人工智能的行为通常看起来难以理解,有时甚至令人恐惧地不自然。即使是现在,人类也无法在相同的国际象棋和围棋中击败 AI(AlphaZero)。


除了这两款经典游戏之外,类似方法的实验也在扑克等纸牌游戏以及星际争霸和 DOTA 2 等竞技游戏中进行。谷歌和 OpenAI 的许多科学家和程序员正在努力构建它。然而,这些很可能是云解决方案,因为需要大量资源来训练人工智能。

这种方法在游戏开发中是不合理的,因为它的复杂性和使用 AI 的目标相互冲突。


在游戏内开发中,目标通常不是不惜一切代价击败玩家。并且不要忘记服务器容量。这种方法的另一个缺点是需要在引入新机制后再次训练 AI。


PVP游戏

这些是游戏,其主要循环是玩家或团队之间的对抗(玩家对玩家)。有人可能想知道人工智能在这种情况下的作用是什么?但在此类游戏中有几个领域使用了人工智能:


  • 适合初学者的机器人

    它们既用于初始训练,也用于游戏早期阶段的对手。如果根据玩家的技能没有媒人或无法平衡队伍时,机器人可以让您顺利增加玩家的难度。并消除与技术更好的玩家的频繁损失。 《坦克世界》和《炉石传说》中的机器人训练模式就是很好的例子。


  • 启动项目或打开新的游戏区域

    PUBG Mobile 在发布时使用了这样的技巧。当无法组建 100 人的团队时,机器人就会投入战斗。战地 2042 的 128 人模式使用最多 64 个对手的机器人。当服务器覆盖不同时区的大区域时,机器人可以平滑远程区域的在线提款。例如,当一台服务器覆盖欧洲和亚洲时。


  • 训练模式

    在发行时间较长且职业玩家较多的游戏中经常需要它,如果没有做好充分的准备,对战是具有挑战性的。此外,此类游戏并不总是将初学者和职业玩家分开,并且与机器人一起玩几乎成为获得技能的唯一途径。一个很好的例子就是逃离塔科夫。在玩机器人的同时,你将无法完成任务,但同时,你不会丢失你的装备,学习关卡,练习装备组合和射击技巧。


从开发的角度来看,这类游戏需要能够微调AI难度,调试机器人的决策逻辑。 AI 本身在游戏服务器上工作。开发团队尽可能地实现机器人的行为,类似于一个知道如何玩得好的人的行为。至少机器人会尝试像这样的玩家😁


PVE游戏

在这些游戏的主要循环中,玩家的交互是与环境和 AI(玩家与环境)。这些可以是纯粹的单人离线游戏(巫师 3)和在线 PVE(Genshin Impact),也可以是 PVP 游戏中的特殊事件和模式(坦克世界中万圣节的 Mirny-13)。在此类游戏中,AI 没有不惜一切代价击败玩家的目标。甚至反之亦然。一位优秀的游戏设计师说:“AI的主要目标是漂亮地放弃。”为了让人类玩家能够从胜利中获得积极的情绪,在这种情况下,AI 是设置游戏复杂性的元素之一。


在敌人的数量、他们的“厚度”和游戏能力之间取得平衡,您可以为一个人创造适当的复杂程度和兴趣。此外,根据游戏的不同,AI 机器人的视觉逻辑行为的重要性会增加或减少。在像 Genshin Impact 这样的游戏中,机器人只是炮灰,玩家并不总是注意它们的行为是否合乎逻辑。


使用机器人时的另一个选择是简单的盟友和玩家能力。例如,DOTA 2 中的小怪非常原始,只有一个目标——前进并攻击敌人。当游戏是单人离线游戏时,AI 最常为客户端中的玩家在本地工作。对于《坦克世界》等游戏,AI 和 PVE 模式在服务器上运行。这是必要的,因为游戏在线,服务器控制所有动作。它限制了 AI 可以使用的 CPU 和 RAM 资源。


开发此类人工智能的关键任务之一是能够为机器人创建引人入胜的行为场景。例如,玩家必须到达阵地,守住一段时间,得到援军后,继续进攻,击败所有敌人。游戏 AI 脚本可以由几个部分组成。在第一部分,机器人很弱,允许玩家快速到达所需的位置。然后,攻击玩家的机器人变得更强大,并开始使用阻止玩家提前进攻的策略。在时刻 X 之后,机器人会犯一些错误,这使它们能够在不降低复杂性的情况下直观地为玩家提供优势。意识到这一点后,他们将继续进攻并能够获胜。


有助于游戏开发的工具

除了游戏玩法,人工智能在以下几个方面帮助游戏开发:


  • 关卡设计和测试——例如,机器人可以在整个关卡中行走或驾驶,从而揭示关卡几何设计中不可通行的区域、堵塞和其他细微差别。


  • 关卡平衡测试——如果你和机器人互相对抗,那么通过收集统计数据,你可以了解新的关卡平衡变化有多好。这种测试的一个必要条件是机器人的技能。为了获得最相关的统计数据,机器人应该在普通玩家的水平上玩。无需庞大的水平测试人员团队极大地加快了平衡抛光过程。


  • 测试新物品和技能-开发者可以在游戏中创建新设备、物品等时使用机器人作为测试对手。例如,您可以在引入新步枪时将机器人添加到地图中,并检查其执行任务的情况。


  • 功能和负载测试——人工智能有助于测试不同的游戏组件,甚至可以测试自己😀。例如,您可以创建一个场景,其中每种武器的机器人将向所有类型的表面射击,并收集有关哪个表面、它如何突破以及是否对表面后面的敌人造成伤害的统计数据。您可以对客户端进行负载测试。发送机器人在地图上四处走动,看看是否有 FPS 掉线甚至整个游戏。对于服务器,您可以执行负载测试,从而检查服务器在“意外”峰值负载期间的行为。


人工智能在游戏中的工作原理

我们已经考虑了游戏 AI 如何帮助游戏开发,现在我们将考虑它是如何工作的以及在其开发中使用了哪些方法。


人工智能的工作循环是:感知>>思考>>行动以实现其目标。每当出现有关环境的新信息时,无法做出决定,或者动作的执行完成/中断,AI 就会进入新一轮的Sense >> Think >> Act循环。

让我们看一下 AI 行动周期中的每个主要步骤。


信息收集(感觉)

第一步。 AI(代理或机器人)收集有关环境的信息以做出任何决定。例如,它可以是关于对手和盟友的信息。他们的职位、条件、设备等。


决策(思考)

下一步是人工智能中最复杂和资源最密集的部分。由于 AI 代理收集的所有信息都在此阶段进行处理和分析。根据选择性决策原则,计算的复杂性和结果的准确性会增加。考虑决策的主要方法:


决策树- 开玩笑地说,你可以称之为“如果”驱动的开发。构建 AI 的最简单方法是创建许多“if-then”检查。它也可以称为对外部事件立即做出反应的方法。从这些检查中,通过 AI 代理通过的节点创建一棵树,直到它找到一个将有动作的节点。通常,信息收集和分析步骤组合成一个块,通常是一个“if”测试条件。在这种方法中,如果检查结果为“假”,则转移到下一个检查和执行操作都是可能的。



有限状态机-当 AI 代理处于其中一种可能的状态并且拥有关于它可以进入哪种状态的信息时的情况。例如,机器人处于巡逻状态。他可以进入敌人攻击的状态,也可以从这种状态撤退。选择进入哪个状态可能取决于机器人有多少生命值以及 X 米半径内的盟友/敌人的比例。状态和转换条件的数量不受限制。在每个新的状态更新周期中,通常是每一帧(有时,为了优化资源消耗,不太频繁地重新计算转换条件),检查每个状态的转换条件。如果满足条件,则激活转换。这种方法的优点是我们有一个清晰的状态转换逻辑。



效用系统-系统基于评估特定动作或过渡的有用性。逻辑是AI代理有一组动作。他根据战场上的当前情况、执行动作或从一种状态到另一种状态的转换的固有优先级系数来选择执行哪一个。例如,机器人在该区域巡逻时遇到了敌人。对于这个机器人来说,更重要的是不要攻击敌人,而是隐藏、发出警报并向其他机器人寻求帮助。在这种情况下,他避免直接碰撞的系数将高于攻击敌人的愿望。如果机器人对敌人没有关键优势,它不会选择与攻击相关的行为分支。



行为树-它是状态机的便捷插件。它允许您对状态机本身进行状态管理。因此,我们可以创建一个条件树,通过它我们将为 AI 代理切换状态机。





  • 面向目标的行为-这是一个允许机器人发挥作用的概念,专注于 AI 代理最合适的角色和目标,并据此选择要处理的行为树。该行为树确定了机器人转换到不同状态和执行操作的条件。


    在这种情况下,机器人使用基于计算特定角色的重要性和有用性系数的模糊逻辑。例如,具有武器或盾牌的机器人的角色。成为“坦克”的系数将高于侦察员的角色。接下来,在选择了一个角色之后,会计算现在哪个目标最有用。如果旁边有魔法师正在准备法术,那么最好的目标就是不惜一切代价保护他。接下来,基于当前目标,选择一个行为树集,它允许机器人实施行为以实现目标。


    这种方法允许您创建不服从命令但根据其能力、当前战斗情况和开发人员优先级选择一个或另一个动作的机器人。在开发 AI 时,我们在《坦克世界》中使用了这种方法。


行动 (Act) - 最后一步。它是任务的执行。通常,这包括寻找路径并沿路径移动,实施射击,掩护等。


那么,人工智能开发人员做什么?主要任务是执行 Sense >> Think >> Act 循环。 AI 开发人员与其他团队成员密切合作,因为 AI 行为算法的实施和优化是程序员、游戏设计师和 QA 的共同工作。让我们再次从开发人员的角度来看 AI 周期。


信息收集(Sense) ——在这部分循环中,AI程序员负责收集和存储有关战场情况的信息。在团队游戏的情况下,开发人员与游戏设计师一起确定收集哪些信息、更新频率以及如何在同一团队的 AI 代理之间分配信息。


在团队游戏中,其中一些数据对所有 AI 代理都是通用的,机器人可以交换这些信息,从而为 AI 机器人提供更高的真实感。通常,信息的收集不会消耗很多资源,除非是频繁的光线投射,开发人员应该对其进行优化。


此外,一些信息可以是静态的。例如,在《坦克世界》中,我们在地图上创建了几层数据。一层负责在整个地图上进行点对点拍摄。它可以让您了解一个位置受到了多少保护,或者可以从这个位置控制地图的哪些区域。


另一层告诉你该区域隐藏得有多好,让你了解这些灌木丛是否适合侦察坦克。另一层是NavMesh ,它允许机器人在地图上移动。它只是预先创建的数据的一部分,除此之外,我们还可以进行预先计算。例如,我们不仅可以存储避难所的地图,还可以存储它们所保护的方向。


对于大型地图,我们可以预先计算从地图上的一个兴趣点到另一个兴趣点的长路径。同时,你可以从长度、地形复杂度等方面计算出路径有多好。在战斗中,你已经可以叠加沿途潜在敌人的动态信息。因此,您可以在选择路径时节省大量 CPU 和 RAM 资源。这是人工智能发展中非常重要和令人兴奋的部分。除了从优化和向机器人中添加新功能带来的明显好处之外,开发人员还获得了一个很好的开发领域,因为需要发明这些层,并且需要改进算法并使其适应他们的项目。


决策(思考) ——开发人员通常不会自己实现机器人行为的逻辑。他和游戏设计师一起做这件事。


另外,开发者实现了一个负责执行行为树的系统(我们可以姑且称之为AI引擎)。他们与游戏设计师一起设计了一个用于处理行为树的 API,然后开发人员实现了该 API 的逻辑。例如,允许您计算击中敌人的概率、避难所的吸引力或评估某个区域的威胁的方法。它是 AI 工作中最耗费资源的部分。


解决性能和资源问题的选项之一是开发高效算法和高效使用静态计算的数据。基于它们,人工智能决定特定动作的最优性。同时,决策系统必须足够灵活和稳定,因为并不总是可以保证机器人拥有所有可用的子系统。或者他们对人工智能所扮演角色的适应程度如何。有时,精心打造的 AI 基础可以帮助她抵御部分伤害。


当我们决定尝试将传统坦克的逻辑用于火炮时,我们在《坦克世界》中有一个有趣的案例,并针对像火炮一样的射击能力进行了调整。我们打了一场常规比赛,我们的 QA 决定证明他比机器人打得更好(事实上,他做到了,但并非一切都那么简单)。


他可以绕过机器人,到达敌方基地,并决定摧毁所有敌人的火炮,三个机器人。他忽略了他被离基地不远的敌方车辆发现。当他进入火炮的视线后,立即以自由拍照模式前往观战。原来,机器人看到一个危险的敌人接近,决定向他开枪,并提前计算了他最有可能出现的位置。一旦我们的英雄出现在视线中,机器人就向他开火。一切都会好起来的,但是所有三门火炮同时做到了这一点。我们发现了一个出乎意料的协调良好的火炮机器人游戏,尽管它还没有实现!



动作(Act) ——在这部分,开发者实现了允许AI代理在做出决定后执行指令的机制。实现模块负责导航(例如,使A*适应游戏的功能),射击等。例如,您可以将A*算法用于您的产品中。但大多数情况下,你会有额外的条件,比如悬崖。如果没有优化,那么重型单位的路径可能会建得太靠近悬崖,导致其坠落。在这种情况下,有必要为接近悬崖或其他不方便类型的地形引入附加系数,并实现路线的平滑平滑。否则,机器人将走“阶梯”。该区域非常接近游戏玩法,因为它使用其机制来完成任务。


工具AI 开发者除了执行循环(Sense >> Think >> Act)外,还为自己、游戏设计师和 QA 创建工具。有时,为了实现一个特定的机制,创建一个工具来配置和使用功能会更容易,然后才直接继续执行任务本身。游戏设计师需要能够分析人工智能决策的逻辑和顺序。出于这些目的,我们在 World of Tanks 中创建了一些工具,让您可以记录机器人在战斗中的所有动作,然后创建回放以可视化机器人的步骤、做出的决策顺序以及这些决策所依据的数据制成。


开发人员还在创建允许 AI 帮助开发游戏的系统。您可以为关卡设计师创建一个工具包,使您能够按关卡快速排列机器人并为它们设置场景目标。


例如,遍历整个地图并检查通过能力是否一切正常。对于 QA,通常需要创建允许您使用机器人检查游戏的各个子系统的工具。


在《坦克世界》中,我们使用 AI 来自定义 AI 在地图上的播放方式。为此,我们创建了一个统计数据收集工具。接下来,我们更改地图,例如机器人战略区域的外观以及这些区域之间的转移点在哪里。接下来,在服务器上展开1000-3000场战斗。之后,我们使用统计数据和热图查看战斗模式。游戏设计师根据这些数据调整地图设置并循环重复。同时,使用足够的服务器容量,你可以在晚上得到这样的统计数据,并在早上进行分析和更改。



在实践中如何运作

让我们使用《坦克世界》中的一个真实示例来了解使用 AI 创建新功能的完整周期。我们还将能够观察程序员、游戏设计师和 QA 是如何相互作用的。


让我们从这个任务开始:我们需要能够撞击玩家并爆炸的机器人,对他和他周围的小范围造成伤害。我们称它们为“刺猬”。这些“刺猬”在附加条件下会比玩家跑得更快。他们不会射门,形状类似于球,一枪就可以炸毁,只能撞击球员,并骑在一组 X 单位中。看起来,还有什么比这更容易的呢?


从游戏设计师那里收到这些数据后,开发人员记住了数学以及如何计算玩家运动的领先优势,并与游戏设计师一起创建了一个行为树逻辑集,将机器人指向敌人并让他撞上。对程序员的破坏和区域损坏负责地实施了一组特定的方法。为了检查,他们创建了一个特殊的脚本,在其中放置了一个 ruff 机器人和一个常规机器人。


第一个成功撞到第二个,一切都很好。我们决定将其用于团队内部的游戏测试并收集统计数据。它表明真实地图上的机器人无法接触到玩家。事实证明,由于在颠簸和跌落时的高速弹跳,机器人受到了伤害。在几次这样的跌落之后,它们爆炸并损坏了邻近的褶边。反过来,它产生了连锁反应。我更正了实时机器人的数量并添加了逻辑散射驱动器。我还根据带有山丘的真实地图调整了测试场景。


在运行第二个测试阶段后,我们意识到这些机器人非常“礼貌”。问题是他们只沿着运动路径撞击球员,即正面。但如果他们从后面靠近,他们就会开始绕着玩家绕一个大弧线。在与游戏设计师讨论了选项后,程序员更改了选择撞击轨迹的公式。在进行了一系列新的测试后,QA 给出的反馈是机器人太快太准确,玩家没有机会。因此,我回到公式并更正它,以便它有时会出错并在机器人错过玩家后修改接近新圈的行为。


机器人转弯和向后冲撞的轨迹增加了,允许玩家重新加载并回击他们。它创造了令人兴奋的游戏时刻,机器人有时会飞出地图,有时会错过并在最后几秒内成功击中它们。有时他们成功地困住了玩家并从不同的方向攻击。 QA 对遇到 ruffs 的游戏体验表示赞赏,并且此功能已进入播放器版本。


从这个例子可以看出,在功能开发的整个过程中,程序员、游戏设计师和 QA 不断地沟通,这使得在问题到达玩家之前发现功能的任何问题区域并修复它们变得更加高效。此外,程序员和游戏设计师共同开发了撞击玩家的算法,而 QA 则反馈了与此类机器人对战的乐趣。这是我们团队和寂静岭系列创作者在 PVE 模式 Mirny-13 中的一个真实例子。


成为 AI 开发人员需要具备哪些条件


首先,热爱游戏!说真的,如果你不喜欢游戏,为什么还要去做呢?

其次 - 经常玩你的产品很重要,因为只有设身处地为玩家着想,你才能理解他如何玩以及机器人应该如何玩。


否则,您将“编码”游戏设计师的任务,而您将无法以这种方式成为 AI 开发人员。最后是渴望了解为什么某事以这种方式或那种方式运作。复杂游戏的人工智能不使用清晰的逻辑,感觉 >> 思考 >> 行动循环的结果并不总是 100% 可预测和可理解的。开发人员、游戏设计师和 QA 必须分析机器人做出的决策的数据,以了解 AI 的行为是否正确,这种情况并不少见。而且不需要硬技能和软技能。


硬技能(这是一组技术知识)。列表中的第一个是脚本编程语言的知识,通常是编写的游戏逻辑。例如,在 World of Tanks 中,它是 Python,而对于 Unity,它将是 C#。第二个基本项目将是 C++。没有它,它不会很容易,因为大多数优化都是在它上面进行的。


现在下一步。


对数据结构和算法有很好的理解。 AI 开发涉及大量计算,选择最佳的数据存储和处理策略可以节省大量时间以及 CPU 和内存资源。第二年大学水平的数学知识也是必要的。当然,了解人工智能开发的基本方法(人工智能周期和决策方法)会很好。


软技能(使您能够在团队中工作并进行建设性对话的技能)。有价值的软技能有很多,但在人工智能开发中,我想挑出一个:


团队合作!


游戏设计师、程序员和 QA 紧密合作,如果不结合他们的经验和知识,通常不可能完成任务或解决问题。这就是为什么倾听他人、讨论而不是争论以及提出问题等技能至关重要的原因。有时最好向游戏设计师或 QA 询问游戏或机制中的特定细微差别,而不是自己发明和做,然后痛苦地重做很长时间。 AI在游戏中的好工作永远是整个团队的功劳,而不仅仅是一个专家!


如您所见,为游戏创建 AI 很困难,但它非常有趣和令人愉快!除其他外,这是发展硬技能和软技能的好领域。


让我们制作不同的、令人兴奋的游戏,人工智能会帮助我们。