最近入手一本神书——《人工智能与游戏》,它介绍了AI与游戏相辅相成的关系,并且梳理了整个游戏AI的知识脉络。它可以当成游戏AI目录书籍,薄薄的一本书引用了800多篇文献。
游戏中我们接触到的AI可能更多的是寻路算法(Navigation),而这个话题在这本书中属于玩游戏 -> AI可以怎样地玩游戏 -> 基于规划的方法 -> 传统的树搜索。不过介于市面上已经有很多关于寻路算法的书籍,如《游戏人工智能编程案例精粹》,所以它只是简单介绍了一下并没有展开说明。
接下来我通过这本书,了解到了一本在PCG(程序化内容生成)领域第一本教材书籍——《Procedural Content Generation in Games》。
本篇笔记主要目的是记录读书过程中的重点内容,方便以后查阅。本次内容来源于《PCG in Games》的第1章——PCG的介绍,辅助会参考《人工智能与游戏》的第4章——生成内容。
本人水平有限,如有错误的地方欢迎讨论和指正。
首先我们定义一下PCG:PCG是基于有限或间接的用户输入的游戏内容生成算法,换句话来说PCG可以自己创造内容,也可以和人类玩家或设计师共同创造。
第一个关键词“内容”,根据我们的定义内容主要包含:关卡、地图、游戏规则、纹理贴图、故事、物品、任务、音乐、武器、载具、角色等。而游戏引擎和NPC AI则不包含在其中。
另一个关键词“游戏”,游戏包含了主机游戏、电脑游戏、桌游、卡牌游戏、猜谜游戏等。
最后两个关键词“程序化”和“生成”,我们使用电脑程序和算法进行创造。
为了让我们讨论更加具体,我们来列举一下我们使用PCG想做的事情:
1. 为类《塞尔达传说游戏》生成一个关卡;
2. 在一个太空射击游戏中生成武器;
3. 生成一个完整的、可玩的、平衡的桌游;
4. 一个可以使用植物快速填满游戏世界的引擎中间件;
5. 在策略游戏中一个让玩家自定义地图生成的图形设计工具,并且对其平衡性和乐趣进行评估。
我们不考虑做以下事情:
1. 一个可以让用户自由添加、删除物件的地图编辑器;
2. 桌游的AI玩家;
3. 一个可以自动生成植被的引擎(这边我的理解是地形自带的功能,而非使用空间算法之类进行生成)。
使用PCG的原因
1. 人类即是昂贵的又是迟缓的,使用PCG可以节约成本;
2. 让美术和策划从无聊的重复中解放出来,专注于必要的细节;
3. PCG方法能够实现全新的游戏类型;
4. 通过测量及使用神经网络对玩家进行建模,可以创建自适应玩家的游戏;
5. 使设计师更能理解设计并具有创造力,通过更好的PCG方法可以更好地理解设计过程,其反过来也能产生更好的PCG算法。
那些使用PCG的游戏
早期的《Elite》、《Rogue》等游戏使用PCG是为了克服存储容量的限制。Roguelike游戏可以自动生成复杂的游戏过程,但它们往往缺乏视觉吸引力。
PCG很快在商业化的游戏中受到越来越多的关注:
1. 《暗黑破坏神》,PCG用于生成地图、道具和怪物;
2. 《孢子》,程序化动画,玩家创建的生物用填充整个星系;
3. 《文明4》,随机地图;
4. 《我的世界》,生成整个世界和内容;
5. 《洞穴探险》,2D平台roguelike游戏;
6. 《翼飞冲天》,2D手游,生成地形和纹理。
(除了最后一个游戏,我基本都玩过。我们可以看到这些游戏使用PCG主要目的是生成关卡和地形,这是在PCG领域最重要的一个方向,当然最近几年其他方向也开始慢慢的受到重视)
PCG的愿景
PCG技术应用于发行的游戏中已经有30多年,而近几年该技术在学术界的关注迎来激增,结果产生了很多新的方法,以及跟旧方法改进和组合,其中有些方法在真正用于游戏之前还需要进一步研究和开发。
我们需要一些愿景来指明方向:
1. 基于PCG内容生成器,根据规定的游戏引擎和规则,能够产生高质量、自恰的游戏内容;
2. 基于PCG游戏设计,PCG作为gameplay的一部分,如果你将PCG生成的内容移除,那么游戏中将不具有任何的可辨识的游戏内容;
3. 生成一个完整的游戏,但现阶段我们只能生成一些简单的游戏规则。
在开发生成器时我们定义一个更具体的愿景是非常值得的。
评估PCG方案
我们可以将PCG方法作为一种解决内容生成问题时的方案,针对不同的应用不同的方案有其所权衡点,比如速度和质量、多样的和可靠的。
几种评估PCG方案的属性:
1. 速度,主要依赖于是gameplay实时生成还是开发阶段进行生成;
2. 可靠性,生成内容可能需要满足某种条件;
3. 可控的,设计师或算法可以具体指定生成哪些内容;
4. 多样性的,从极端角度考虑生成的内容是固定的还是随机的;
5. 创造性和可信度,使内容看上去像是人类创造的。
PCG的分类标准
1. 动态生成和离线生成,动态生成可以生成无尽的变化,而离线生成更适用于生成复杂的环境和地图;
2. 必要内容和可选内容,必要内容必须保证其正确性;
3. 可控性,使用随机种子或一组参数,在《我的世界》中使用相同的种子将会生成完全相同的世界;
4. 体验无关的和体验驱动的,在学术界体验驱动的受到了越来越大的关注,但大部分商业游戏仍然以一种通用的、与体验无关的方式来处理PCG;
5. 随机的和确定的,随机性允许一个算法提供极大的差异,另一方面完全确定的PCG方法可以被视为某种形式的数据压缩;
6. 构造性的和先生成再测试,分型和元胞自动机生成关卡是构造性的,并且只生成一次,而基于搜索方法的则需要先生成再测试,需要迭代多次直到内容足够优秀;
7. 自主生成的和混合主导的,生成过程中是否需要人类设计师或玩家参与。
PCG的象征意义
Khaled提出使用PCG的四种象征意义:
1. 工具,仅作为辅助设计师的一种工具;
2. 材料,成为设计师新的一种材料,一个流行的商业例子是SpeedTree;
3. 设计师,成为游戏设计师本身,现在属于勘探阶段;
4. 领域专家,提供额外的知识,用来评价和提升设计。
本书大纲
第二章,基于搜索方法的PCG,其中来源于达尔文进化论的进化算法是用于寻找合适的游戏内容。
第三章,讨论了一个创建地牢的roguelike游戏,以及2D空间下的导航。一些方法来源于开发者社区,并广泛应用于如《暗黑破坏神》等游戏。其他的,如元胞自动机,起源于物理学。最后,我们也会讨论一下马里奥AI框架用于测试关卡生成算法。
第四章,将介绍来源于计算机图形学的算法研究,即简单分型算法和其他噪声算法,用于处理地形、景观、纹理和云。这些算法快速并且可靠,但缺乏可控性。因此提出其他两种生成景观的方法:基于搜索方法的和基于代理集合的。
第五章,语法,首先介绍了一个创建植物的例子。近年来许多3A游戏使用语法创建植被,当然语法也可以用于创建关卡,本章剩余的部分将介绍使用语法来生成《塞尔达传说》风格的动作冒险游戏的关卡和任务,以及如何进化语法生成《超级马里奥兄弟》的关卡。
第六章,创建游戏规则,从桌游到卡牌游戏和街机游戏,这些尝试有些是构造性的,但大多数都是基于搜索的,本章还将会讨论电子游戏描述语言,一种编码简单街机游戏规则的方法。
第七章,生成游戏叙事,几乎所有方法都来源于规划算法,规划算法是一种来源于控制机器人的经典AI方法,本章还会讨论游戏叙事如何与地图生成相结合。
第八章,ASP(Answer Set Programming),答案集编程,在一种名为AnsProlog语言中指定内容生成方法和条件,求解器将生成满足指定条件的所有内容,用于猜谜游戏的关卡。
第九章,回到第二章基于搜索方法PCG的主题,本章示范了几种游戏内容表达形式的选择,表达形式很重要,因为其定义了搜索空间的形式及搜索的方式,本章将演示如何明智的选择表达形式以生成满足评估的内容。比如花被表示为神经网络,关卡生成器被表示为代理集合。
第十章,介绍经验驱动的PCG,对玩家进行建模。
第十一章,谈及PCG与人类设计师进行合作。
第十二章,讨论如何评价PCG生成内容的质量。
《Procedural Content Generation in Games》
《人工智能与游戏》