撰写了文章 更新于 2020-09-20 21:05:52
From Software研发部:从改自家游戏到AI测试成功*
禁转,尤其a9vg。
CEDEC** 2020第三天(2020年9月4日),讨论了“想研究游戏AI!没素材研发部就拿老作品改!!”(ゲームAI研究をしたい! ゲームを持たない研究開発部署は、発売済みタイトルから実験場を生み出した!!)议题。
主讲为From Software研发部亨·让菲利普(ヘン・ジャンフィリップ),内容有研发部门(R&D)作为开发者在研究游戏AI时需要跨过的障碍、为跨过障碍所作的努力以及开发专用AI的范例和展望。
<讲师履历>
2014年 蒙特利尔学习算法研究所(Mila)实习。后赴日读研,主攻强化学习方向。
2018年 就职From Software。
在研发部负责开发辅助工具库、机器学习商业化的应用研究。<对听众的寄语>
近来,AI的实践并没有止步于成为Starcraft 2、Dota 2的高玩,测试、调整当中采用强化学习的例子也公开过不少。
然而在游戏开发方面,构建高效强化学习环境的参考还谈不上充足。
希望本次交流能给各位在引进强化学习的可行性带来一定启发。
![]() |
研发部研究游戏AI时遇上的坎
研发(R&D)一般不直接参与游戏开发,而主要负责开发库和工具、物色有应用前景的技术并对其进行研究。From Software研发部尤其重视以实际运用为前提的技术储备。毕竟码农出身的中小企业,资源要用在刀刃上,功利/实惠。
其中自然包括对游戏AI的研究。 AI在游戏中的职能包括NPC的操纵和调试、整个游戏的控制(meta-AI)、自动调整和环境分析。此外,AI除了脚本(script),行为树(behaviour tree)和状态机(state machine)之类的经典模型外,也有近来关注度较高的增强学习和机器学习模型。
要研究游戏AI就少不了AI沙盒,因为需要能轻易反复试错并使用多种方法进行验证的环境。
然而研究部门一旦以研究目的构建沙盒,就容易做得“针对实验”、“迷你游戏”。这种环境易于操作乍看没问题,但加载AI时就会遇到麻烦。
换句话说,由于AI仅在最宽松的环境得到测试,而游戏环境复杂且受限,于是容易出现意料之外的问题。 这么一来加载AI的代价就很大。 开发一线对此也心知肚明,所以也不会轻易尝试。
即便强行操作,问题一样会大量出现。根治不了,风险也会增加。
要避免此类故障,就得考虑开发过程中存在的问题和限制,并准备明显能够运用到开发过程、接近游戏环境的实战型AI沙盒。
但是,由研发部准备实战型AI沙盒是比较困难的。 如开头所述,研发并不专职游戏开发,不具备开发接近游戏环境的知识经验。 强行创建显然会耗费大量工时,势必对研发部的本职工作造成影响。
此外,还有两条路:“使用现成环境”和“参与游戏开发”。
现成AI环境有ALE(Arcade Learning Environment)、ML-Agents或者提供AI专用API的《Starcraft 2》。如能使用这些环境,研发部就不用自行开发了,但这些环境不开源,就算开源因为授权限制也没法用,就算能用也发生过小游戏(mini game)或怀旧游戏(retro game)的问题。此外,最近出现的AI环境大都针对强化学习,很难验证其他模型。
![]() |
![]() | ![]() |
另一条路就是参与游戏开发,在AI相关功能尚在构建的游戏中直接对AI进行试验和验证,研发部无需自行创建沙盒,直接获得实战环境。
不过,一旦涉及游戏开发,开发作业是优先确保的,研究这边就很难有机会推进。 此外,开发阶段出现bug、规格改动导致环境跟着变,无法指望稳定的环境。 于是得出结论,用开发阶段的游戏研究AI并不现实。(难怪总是测试不足)
如何跨过这道坎呢
最后,研发部决定把已上市的自家作品改成AI沙盒。既然已经上市就是现成又稳定的实战环境,而且可以优先进行感兴趣的研究。
接下来就是选择合适的作品了。选择条件就是“AI的职能尽量多,研究起来简单”(できるだけ多くの役割のAIを簡単に研究できること),能构建的场面越多越理想。符合该条件的两个备选分别是2016年的DARK SOULS III和2013年的ARMORED CORE VERDICT DAY(ACVD)。
![]() |
比较讨论下来,几乎全部项目(例如“移动区域”、“战斗距离”)都有大量选项、自由度更高的ACVD被选为AI沙盒。而ACVD没有现成的PC版,所以只移植了需要的部分。
![]() |
此外,ACVD有不少AI模型未对应行为树(behavior tree)、强化学习,需要扩充。
然而ACVD的AI和游戏环境紧密结合,直接扩充有困难。代码也比较复杂,贸然操作可能会引发意外的bug或故障。
于是把AI部分从游戏抽离,这么做还有“进行某些研究时可以无视ACVD的情况”“方便移植”“能适配新的AI模型”的好处。
![]() |
![]() |
作业的具体内容是用中间件(中間層)替换了ACVD里的AI环境(AI関連の実装)。中间件具备原作环境的几乎全部机能,外部AI连接于其上。于是,对游戏环境而言一切照旧,而真正的AI则在和泛用接口进行交互。
此外,考虑到调试,测试员能直接操作通常由AI控制的角色会方便不少,所以中间件除了接AI,还能接手柄。
![]() |
在推进过程中,研发部发现游戏环境和AI有不同的数据倾向。以角色的位置坐标为例,游戏环境擅长处理自身世界位置的“世界坐标”,而对AI而言则是以自身为出发点离开多少距离的“局部坐标”更容易处理。
所以中间件加上了这种差异的转换功能,游戏环境和AI就不用自己转换了。
![]() |
![]() |
研究中的实例
用调整好的AI沙盒进行的验证当中,讲座介绍了两个NPC操作实例。首先是研发部内部举行比赛的例子,使用经典AI模型(脚本、行为树、状态机)。
所有研发部成员使用Lua语言创建自己的AI,参加循环赛。 旨在搜集比赛数据。胜负及比赛中的受创情况等信息也得到可视化。
![]() |
![]() | ![]() |
而在强化学习的案例中,亨介绍了首先要考虑的两个特点。第一个是强化学习“很难自行适应最新的算法”。具体原因有:规模大、实装里的数学容易弄错、不优化就会把大量时间浪费在学习上、难以调试。
第二个特点是“需要大量实时数据”。这与其他机器学习相同,尤其在强化学习中,要在学习的同时收集数据,而作为验证者还是希望把数据收集的时间压缩到合理范围内。
作为针对措施,对于最新算法自适应问题,研发部采用已在Python中实装的学习算法。原因有许多主流的学习算法都使用Python且开源、几乎全部用于机器学习的库都支持Python。
但最近遇到过要把Python环境的学习算法用到C++开发的游戏上的问题。解决办法是在游戏和算法间使用Python的强化学习工具包Gym和网络通信库grpc。
![]() |
![]() |
对于需要大量实时数据,则通过并行强化学习提高效率、禁用学习中用不上的描画降低计算成本。 通过这些措施,普通配置的PC也能玩转合适时长的强化学习了。
![]() |
这么一来,主要问题得到了解决,但Gym并不支持学习期间环境参数的改变,譬如场地。另外,它也不支持对战型学习,学习AI之间不能对打。于是研发部自建实例管理服务器解决了这些问题。
最后I7-8700,GeForce GTX 1060配置的PC,在128并行实例(並列実行のインスタンス数128)环境下,花了大约12个小时确认了强化学习的动作。
![]() |
![]() | ![]() |
![]() |
![]() |
亨表示今后会在ACVD外的游戏中进行类似研究。调试AI等承担更多职能的AI也在考虑当中。
当然,将来随着研究正式立项,实用AI能做出来的话,会考虑用在From Software的游戏里,他总结道。
*如有错误请不吝赐教。由于中日语言表达方式的差异,个人极力避免翻译腔,受母语能力所限最近的手法是只求达意不求保留结构,所以原文一些表达会被调整语序砍得面目全非。
**CEDEC = Computer Entertainment Developers Conference,遗憾,2020第三天的视频里并没有本次讲座。
私货时间:
0.牛关终于也加载了敏感词,接口+交互,具体+位置连一起试试。唉,真无聊。
1.与时俱进地为AI强化学习进行人才储备,毕竟7年前上市的vd那行为树也比较老套了,从本文也能看出,研发部纯粹因为没素材临时改一个现成游戏。而部分ac玩家却在意淫vd移植PC的可能性,太过饥渴。From毕竟是个抠门公司,资源永远用在刀刃上。回忆下先前的HD作品,哪个他们自己操刀?标题图就是我的态度,理智又熟悉from和ac系列的人也不会觉得意外。
「ACV」向けのAIは「戦略層」、「戦術層」、「機体制御層」の3層で構成されている。上位層で行動目標(ゴール)が設定されると、下の層ではその実現のために取りうる手順が、個々のゴールとして組み立てられていくという趣向だ。
出处
vd行为树也是一样自上而下三层架构。
2.说起From的AI,ACVD上市前制作组坦言就是内部ai编辑系统的简化版。所以看到CEDEC这讲座我是有些纳闷的。到底是因为那套系统太老需要更新还是已经没人玩得转了?考虑到老外18年入职,from最新作品打铁是19年3月上市。时间上有种莫名的吻合,而文中介绍的工作也明显是为将来打基础,三个好处之中“方便移植”。话说老头环一个运行演示都还没公布过来着。无论如何,From的ai各种蠢是该进化了,后文会列举。
3.from除了自己编,还有上世纪末把高玩打法做成ai。据我所知From游戏里最先尝试让玩家编辑ai是2003年的ACSL,游戏提供一个培养名额,乍看是玩家驾驶舱里的幽灵,会学习模仿玩家操作云云。听下来是不是很兴奋觉得能克隆一个自己了?实际机制是把玩家的倾向取平均,于是要灌输一个动作就必须在一场战斗中尽量多次发生该动作。From不仅CG欺诈。
之后则是2005年模块更加明确的ACFF,毕竟psp按键太少,尽可能的因地制宜。然后是06年的合金猎犬,之后就是受其影响巨大的VVD了。sl、ff、vd在剧情上也嵌入了ai的内容。
不得不感慨ds3性价比之高。
但ai再厉害,开发者的思路更重要。譬如v当初的概念是巷战,制作组希望玩家通过建筑物遮挡攻击,所以v没有盾牌。但最后给玩家玩成了蹬墙机动战。而v的ai是基于制作人预期编制的,于是单机部分几乎所有的机甲npc都显得很蠢,大多不会滞空,菜鸟玩家也是这样。“True groundwalker stands completely still.”
如果你vd里编辑过ai,会发现它们的逻辑和玩家完全不一样。
玩家的流程:丢探机,扫描对手三防,换对应武器针对弱项,走位&攻击。
而ai则是:感应敌人位置,通过距离切换对应武器,走位&攻击。
譬如acvd里编辑ai里首先通过敌人距离选择武器,由于有两套武器(制作人的逻辑是武器按有效射程划分,并有不同属性,而玩家的着眼点则是目标装甲的弱点属性,rpg那套),如果设置的切换距离有交集或者间隔不够就会发现unac不断切换武器划水。临界点现象在魂系也能见到:ai在边界进进出出(血源太刀哥、假医生),同个ai在特定地形会非常厉害,一旦换场地/引到其他地方,马上变弱,表面上是激活了ai底层逻辑里对活动范围的限制(from有把ai和属地绑定的传统)。
曾经也有这种精巧ai(3:27开始是ai视角,玩家开了金手指,所以机动性不在一个水平),暴力读取玩家坐标,花式套框固然凶狠,好在场地简单,但可以发现,那时候的ai也不太离地。
对面玩家开了金手指(至少有3倍速+强化人)。
到了ps360上的acv,由于地形变复杂,绝大部分ai都显得很蠢,到了vd制作组也只能通过高速推进器+低传导身改变ai移动节奏制造变数,当然,最重要的是地图扁平简单化(对于ps360而言也是好事,v计算量太大,ps3黑屏死机退xmb不胜枚举),戆戆度稍微得到了改善,售前试玩玩家甚至给ai打得满地找牙。不禁怀疑from那套ai模板,对3d支持不佳,所以魂也不太跳,打铁其实也一样。也可能是复杂的地形占用太多留给ai的资源更少的缘故。
除了3d,from的ai还看不到障碍物。可能是程序员实力不够,也可能还是硬件拖累etc。
卖萌。
11年后,还是这样。
ai的武器不能往下戳,没有垂直导弹又没法术支援。只能被地形卡住干瞪眼。
义父逃课。
希望老头环的ai能有些进步。
目录
goshinsui [作者] 1年前
发布
InterestedAndFun 1年前
goshinsui [作者] 1年前
发布