游戏人工智能 读书笔记(十一)游戏内容生成

作者:xiaoxiwang 腾讯IEG高级研究员

AI在游戏中的应用一直很广泛,今天我们来聊一下关于AI用在游戏内容生成方面的事。

说到最早使用算法来生成地图的游戏,或许就是1973年的Maze War[1]这款游戏了。在游戏中,玩家以第一人称视角操控,在一个迷宫里面游荡,时而会遇到敌人进行战斗。虽然以现在人的眼光来看,Maze是款简单粗糙的游戏,但它很大程度上影响了后续第一人称射击游戏的发展;并且也开启了算法生成游戏地图的新纪元。对于那个年代就已经接触计算机的天才们,随手写一份随机迷宫生成算法自然是信手拈来;而对于如今每天接触互联网的我们,如果想写一份类似的随机生成算法,只要在Google上搜“Maze generation algorithm”也就可以了。

《Maze War》

此外,游戏内容生成的另一个常见的应用场景,就是随机地图了。举个简单的例子:一片空地,上面随机堆放几块石头,就变成了一个有障碍物的地图,如果再随机加上一些草地,砖墙,河流,甚至宝物奖励,就可以玩《坦克大战》了。如果再跟迷宫算法结合,那就变成了一个“地下城”(Dungeon)。摆上魔物和巨龙,就成了《龙与地下城》,换上随机出现的史莱姆,就变成了《勇者斗恶龙》。

《勇者斗恶龙·怪兽篇》里的迷宫

当然事情实际上并没有那么简单,或许一些简单小游戏关卡设计可以直接随机,但通常来讲,这项工作并不是几个random()就能搞定的事。

譬如地下城类的地图生成。在较早的2D俯视游戏中,地图往往会用网格系统来表示,即一个MxN的网格,每个格子是一个元素。元素可以是可通过的地面,墙壁之类的障碍物,以及宝箱,机关,等等。以一个只有地面和障碍物的地图为例。假如每个格子只是按照一个概率p来决定是地面还是墙,那么就会出现很多问题:比如生成的墙并不能让地图形成几条较明显的“通道”,反而是像一堆“颗粒”散落在地图上;此外,如果墙出现的概率过高,往往会形成很多死胡同,如果概率过低,则地面基本上是一马平川,完全没有迷宫的感觉。

一种比较经典的地下城迷宫生成算法叫做Cellular Automata,是一种模拟细胞自我复制的算法。相关算法用Google搜“Cellular Automata”或者中文名“细胞自动机”就能找到实现方法,这里就不赘述了。这个方法会先在地图上随机生成一些“墙壁细胞”然后让它们自动增殖,一些细胞繁殖的同时另一些细胞也在结束生命周期而消亡,整体效果看上去就像地图上“生长”出一片片的障碍物一样。这种方法的优点在于生成的障碍物连通性很强,也比较符合常识,且作为冒险世界的迷宫效果很棒。

Cellular Automata 生成的迷宫(图片来源[2])

这里需要注意的是:Cellular Automata生成的地下城并非传统意义上的迷宫(比如文章开头说的Maze游戏那种)。传统的迷宫往往有一些较严格的定义,比如必须有且只有一个入口和一个出口,且从入口到出口的通路有且只有一条,等等。Cellular Automata生成的地图更注重于一种“洞窟的形状”,却不一定有严格的出入口。不过这样也有个好处是可以生成一些有多出口的迷宫。

关卡与地图生成

关卡生成可以包含很多内容,比如地图的配置,敌人的数值,角色的技能,资源的分布,一些需要动脑解开的机关和谜题,等等。而且往往是多种元素组合,比如《文明》的地图上就包含了各个势力,资源点,和野蛮人的分布以及它们对应的数值。类似一些其他游戏,比如《英雄无敌》系列,也会使用随机地图,这样可以每次带给玩家更多新的挑战。当然,就算游戏本身没有“随机地图”这个设定,也不代表我们看到的地图就不是计算机生成的,游戏策划仍然可以从随机生成的地图中选择他们认为比较好的,作为关卡内容。(另:尽管《AI and Games》这本书中使用了《超级马里奥》作为一个算法的例子,但我暂时没有发现证据表明《超级马里奥》使用了计算机自动生成的关卡地图)

从关卡生成的方法角度来看,我个人认为可以分为三类:

一类是以目标为导向的生成方法。给定计算机一个目标(一般来说是一个评估函数),然后让计算机根据一些算法(比如随机和搜索),生成大量的关卡数据集,最后用评估函数评估每个生成的关卡,找到评估得分高的拿来用。这类方法跟AI里的遗传算法很类似(甚至很多时候就是用的遗传算法)。我们知道,遗传算法里面重要的往往是它的评估函数,同样,这里如何找到游戏关卡的合理量化方法则是关键。量化标准里面首先要保证关卡是可解的,并且关卡难度是人类可完成的;其次,要保证不会出现一些极端的情况,比如游戏设计者肯定不希望一个平原上连续摆放着10个宝箱(虽然玩家可能会对此喜闻乐见),或者出现完全可以绕过关卡Boss直接通关的路径。再者,关卡应当能够带给玩家直观上特征较为突出,有特点的感受,而不是太过于随机化的敷衍。假如我们用随机的方法生成《超级马里奥》那样的横版2D过关游戏,那么生成一些连续排成排的砖块和阶梯形的平台要比随机散落的断断续续的砖块更让人感觉舒服,因为有形状特征的物理往往让玩家更容易将其与现实中的事物联系起来,本能地激活大脑的归纳和总结的能力,从而留下更深刻的印象,而散乱随机的设计则失去了特征上的意义,如同噪声般令人乏味。

这类方法适合于生成大量的,规则限制较简单的关卡。而当我们要生成一些前后逻辑关系很强,比如像《纪念碑谷》那样的解密游戏的时候,这个评估函数就不那么容易设计了。其原因在于,如果要评估这类关卡,那么至少要证明生成的关卡是可解的,这就意味着评估函数中就要包含能够自动解关卡的算法。对问题复杂度了解的朋友们知道,很多问题上去寻找一个解法要远比验证一个解法复杂得多。这时候这种基于目标的方法就非常不实用了。那么怎么办呢?我们来看第二类方法。

第二类方法则是基于一些规则或模版,来生成仅符合其逻辑的关卡。比如前面提到的Cellular Automata算法。它的内容虽然是随机生成的,但并没有依靠一个评估函数来筛选,理论上我们可以认为这种算法生成的所有结果都是合理的(虽然实际上往往还是会有人或用一些规则来找出最令人满意的结果)。这种情况往往是游戏的内容能比较容易抽象出规则来,因此只要是按照规则生成的内容必然会满足关卡的要求。

比如解密游戏中一种最简单的内容生成方法:逆推。从谜题解开的状态开始,一步一步根据游戏逻辑,找出可能的上一步,然后逆推回去。比如滑块类游戏(sliding tile games,算法课上的“8-puzzle”,“8数码问题”)关卡的生成,就是一个3x3的格子里面摆8个数字或图片和一个空位,每次可以移动一个数字到空位上,目标是将8个数字按顺序排好或者是还原成原来的图片。这个问题的关卡生成最常用的就是逆推的方法,这样能够百分之百保证生成的关卡是可解的,但要注意的是这里并不能保证解法是唯一的。(这种方法貌似《AI&Games》里面并没有提到。)

OS X 自带的滑块游戏

第三类方法则是利用机器学习技术来模仿人类的设计。这种方法的优点在于,机器学习的方法往往能够学到一些难以用简单的公式来量化的人类设计的特征,使得生成的关卡更像是人设计的,内容直观上的逻辑性相对更强一些;而缺点则是通常需要大量的关卡数据来做训练。而一个游戏的关卡往往是有限且少量的,所以这种方法现在更多并不是用在关卡生成上,而是会用在其他游戏内容的生成上更多一些。

以上的三类技术,在实际运用中,经常会以组合的形式出现,比如在随机生成的洞穴中,用一些规则让史莱姆这种新手练级怪可以成群结对地出现,但远古巨龙就要孤独地蹲在迷宫深处等待一身神装的勇者到来。这样才能让玩家不至于前期拿满了装备然后无脑推了全图。而游戏策划也要注意检查算法生成出的内容是否有致命的缺陷。

更多包含随机关卡生成的游戏可以参考 http://www.mobygames.com/game-group/games-with-randomly-generated-environments

游戏多媒体内容生成

《AI&Games》这本书中并没有深入探讨关于游戏多媒体方面的话题,只是简单地罗列了一些游戏应用的例子(顺便猜测一下作者对于日本娱乐产业了解甚少,否则这里应该把《初音未来》列出来啊)。

日本国民级虚拟偶像《初音ミク》

像《初音ミク》这样,以语音合成技术为游戏核心的作品能做到如此成功实属不易。尽管随着技术发展日新月异,各种图像语音生成算法层出不穷,但如果我们仔细调查分析,会发现这些算法大多是关注于如何生成更细致、更真实、更像人类作品的图像或音频视频。这样的结果尽管的确可以一定程度上丰富游戏素材(比如生成各种不同形状的飞马或者精灵),但是截止我写这篇文章之时,这些作品目前仍然无法达到一个等同或超越人类的高度。除了技术上的原因之外,还有一个重要原因是因为这些作品在生成的过程中,缺少一个整体的大的风格与背景的限定。在一个游戏中,角色是随着一个完整的世界观创建出来的,其中人物角色们的性格、情感、关系也是应该能够通过外貌表现出来的(比如同一家族的衣着有着同样的一些特征,人物直接的情感关系是可以通过他们的表情所表达),这样带给玩家的就是一种完整的,统一的直观感受;但在这一点上,靠算法就很难实现得很好,比如如何将这些背景关系进行抽象描述并输入给计算机这件事就不是一件容易事,之后如何用算法将他们组织起来就更难了(尽管很多人可能觉得用深度学习理论上是可以实现的,但是实际上目前深度学习对于语义理解的能力仍然有待提高)。更何况,目前并没有一套完整的框架能够执行下这整套流程。因此从商业角度考虑这样做也是不现实的。

另一方面,玩家们对于游戏作品中的多媒体素材的需求有时候是能够超越其素材本身的。比如从对游戏角色的喜爱到对其画师以及声优的热爱,甚至反过来从对画师声优的爱导致对游戏中虚拟人物的爱。比如当前大热的手游《Fate/Grand Order (命运/冠位指定)》就是个很好的例子。

《Fate/Grand Order (命运/冠位指定)》

相比之下,目前还是没有哪个AI能够自成一派,创作出有个体风格的作品。或许对于一些低成本的游戏来说,可以用一些算法丰富一下内容素材。但是对于顶级的游戏,目前还是需要人类依靠直觉、经验、以及创造力来把握游戏的内容和灵魂。或许将来某一天AI也能做到这样的事,不过那时候应该是所谓的“强AI”诞生的时代了吧。

关于《AI&Games》的第4章

前面借着书中内容写了很多个人的观点,最后还是回来说一下关于《AI&Games》这本书第四章的本来内容吧。这本书4.2节探讨相关不同角度的分类法的部分讲得还是很有意义的;然而4.3节从算法的分类角度来逐条讲使得这部分更像是大学的授课讲义,并没有关注实际使用时需要的条件和限制,以及能够满足的需求;4.4节相对来说分析得比较到位;其后的几个小节内容却略显单薄。另外作者是西方人因此关注的大多数一些欧美风格和一些知名度较高的游戏,但显然对日系游戏及相关文化所知甚少,这也使我们在看这本书的时候需要思考一下书中的内容是否与现在的游戏市场和相关文化能够匹配。

[1] https://en.wikipedia.org/wiki/Maze_War

[2] https://gamedevelopment.tutsplus.com/tutorials/generate random cave levels using cellular automata gamedev 9664

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏量子位

全程中文!谷歌发布机器学习速成课,完全免费(附视听评测)

全球AI第一大厂Google推了新课程! ? Google今天上线了一个“机器学习速成课程”,英文简称MLCC。用他们自己的话来形容,这个课程节奏紧凑、内容实用...

3365
来自专栏新智元

谷歌新目标——让计算机实现自我编程,自主机器时代不再遥远

【新智元导读】 许多人对AI的想象都停留在应用层,而忽视了技术层AI也将产生颠覆——让机器自己编程。谷歌大脑、DeepMind、Facebook甚至Viv 都在...

3286
来自专栏灯塔大数据

深度|DT时代的核心竞争力---数据分析与挖掘

数据分析与挖掘,指的是通过对大量的数据进行观察与分析。发掘其中的未知的,潜在的、对决策有价值的关系、模式和趋势,并利用这些规则建立决策模型、提供预测性支持的方...

2914
来自专栏AI研习社

20 道面试题助你拿下微软 AI offer

微软在业界的霸主地位人尽皆知。它引领了云计算的风潮:第一季度的财报显示,微软提供的Azure服务和Office365在线版本的收入分别飙升了90%和42%。

1414
来自专栏AI研习社

ArXiv 中最受欢迎的开源框架大起底,第一名当然是……

在深度学习研究领域最受关注的开源框架是什么?相信大家心中都有答案。 AI 研习社了解到,近日 Keras 作者 François Chollet 近日在 Twi...

3499
来自专栏用户3246163的专栏

[脑书笔记]《整体性学习》3-拓展观点技术和记忆随意信息技术

这篇脑书继续讲整体性学习的第二部分整体性学习的技术,在《整体性学习》1里面在谈到信息进入大脑的顺序是,获取,理解,拓展,纠错和应用。这篇脑书笔记主要针对这5个步...

541
来自专栏大数据

数据中心机柜系统成功部署的关键要素分析

前言。 随着数据中心变得越来越复杂,对于其信息机房面积(White Space,即设置机柜的高架地板区域)的管理日渐变得越来越重要。故而您企业将必须要对贵公司数...

18510
来自专栏新智元

【大脑新解】像计算机一样学习?

大多数神经科学家相信大脑通过对自身重新布线,即不断改变脑细胞或神经元之间的联接强度,进行学习。但是瑞典的德隆大学在去年发布的实验结果,暗示我们应该改变做法。他们...

27210
来自专栏ATYUN订阅号

成为Beatbox大佬:AI助力将声音转化为节奏

为了帮助崭露头角的音乐家为他们的歌曲创造最佳节奏,来自日本AI创业公司的开发人员开发了一种名为Neural Beatboxer的深度学习系统,可将日常的声音转换...

953
来自专栏数据派THU

第四范式程晓澄:机器学习如何优化推荐系统

本文经AI新媒体量子位(公众号ID:qbitai )授权转载,转载请联系出处 本文长度为9532字,建议阅读10分钟 本文为你介绍推荐系统的诞生土壤和早起演进、...

2305

扫码关注云+社区