PCG(Procedural Content Generation)内容动态生成
提出者:Tanya X. Short & Tarn Adams.
Tanya X. Short是Kitfox Games的总监兼设计师,该工作室开发的比较出名的游戏有Moon Hunters, Shattered Planet, Dwarf Fortress, Boyfriend Dungeon等。而Tarn Adams则是Dwarf Fortress的开发者之一。他们在对PCG系统的研究上都有着自己独特的理解和想法。他们所著的这本书中包含了许多成功的应用了PCG系统的案例,也介绍了各种各样内容动态生成的算法。有着计算机背景的同学会更容易理解本书中的内容,没有的同学也可以从本书中学到游戏内容生成的各种思路。

首先简单介绍一下Keep Talking and Nobody Explodes这款游戏。这是一个双人合作类的拆炸弹游戏,其中一人扮演拆弹专家Expert,另一人则扮演拆弹手Defuser。Defuser需要做的是根据expert的指令,在规定时间内拆除炸弹。而expert需要做的是阅读《拆弹文档》,里面记录了一系列的规则,然后根据这些规则去推出炸弹上密码的答案。限制条件是Defuser是不能去查看文档的,而Expert同样也不可以去看炸弹,游戏的理想状态是两名玩家隔一个较远的距离游玩。两个人在游玩过程中需要一直交流来分享信息,而这也是游戏最有趣的一点(话虽如此,我偷偷单人既看文档也看炸弹上的谜题推了一些关卡,已经觉得很有趣了,要是两个人忙的满头大汗之后炸弹还是爆了,那估计节目效果也是满满的)。
至于这一章设计者分享的游戏运作逻辑,在我看来只能说讲的很笼统,只能说是大概提供了一个设计的方向。深层次的逻辑,随机性是如何解决的之类的没有讲的很细致。但即便如此,也能够看出该游戏设计的精妙。
炸弹分两面,根据关卡难度一面最多包含6个模块,每一个模块包含一个谜题。该游戏的一个亮点是谜题非常多样性且随机。最简单的谜题可能是剪特定颜色的线。比较复杂的谜题可能有走迷宫,解摩斯电码等。
最简单的关卡的炸弹仅包含3个模块,而最复杂的则是全部模块均被谜题填满,即包含11个谜题+1个固定的倒计时模块。想要了解谜题设计的可以参考以下链接:
拆弹手册 (版本 1-zh-CN)
B站也有很多这个游戏的投稿,搜索“继续说不会炸“就可以搜到很多。
先解释几个概念:
谜题:模块中包含的问题。如有的谜题需要玩家剪断特定颜色的线,有的需要玩家根据指示灯按下按钮。
模块:炸弹中组成部分。炸弹一面,包含最多6个模块,除去一个倒计时模块之外,其他模块需要玩家进行交互。
炸弹的属性:这里特指炸弹本身的属性,而非模块中的谜题。例如炸弹的序列号和电池数量。
Query: 解除谜题的条件 - 例如:如果最后一根线是黑线且序列号末位为奇数,则剪断第四根线。那么加粗部分则是query。
Solution: 解除谜题需要玩家进行的操作。上面的例子中,剪断第四根线则是solution。
比较通用的Procedural Generation (内容生成)
在使用pcg设计这个游戏时,首先要考虑的两点:随机性和游戏难度。随机性是为了确保该游戏能够给玩家带来丰富多样的谜题,通过随机引线的数量,颜色,或是按钮上面的符号,指示灯的颜色,炸弹上的序列号或电池数量等参数。而游戏由于包含很多个关卡,所以游戏的难度应当是逐渐递增的。所以设计师根据谜题的难度,主要是谜题被解出所需要消耗的时间和谜题的类型,来调整各个关卡所包含的谜题种类和数量。
Procedural Logic (生成逻辑)
这一种设计比较容易理解,且在多数游戏中都可以通用。因此,作者提出了另一个不太通用的设计方式:通过pcg来生成游戏规则。该游戏比较特殊,需要一位玩家去实际操作游戏中的炸弹,而另一位玩家则只能查看《拆弹手册》而不能接触到炸弹。因此,在制作过程中需要确保《拆弹手册》和电脑上的游戏规则是完全相同的,不然出现了玩家正确阅读手册反而引爆炸弹的尴尬现象。如果从程序的角度理解,游戏的制作遵循了data-driven method,即通过控制一套相同的数据,改变模版,来输出一套pdf格式的《拆弹手册》,同时也输出一款基于unity的游戏。

《拆弹手册》和游戏中的生成逻辑由相同数据生成
紧接着,设计师分享了游戏中几个谜题的设计方式,其中一个例如摩斯电码:
该游戏中单词与无线电频率的对照表
游戏中摩斯电码是通过短量或长亮的指示灯显示的。值得注意的是《拆弹手册》中特意强调了每个字母的间隔和每个单词之间的间隔,通过指示灯不亮的长度来反映,让玩家们更容易理解。4到5个字母的单词是最合适的难度,既不会让玩家觉得过于难于记忆,也能够享受到解谜成功的乐趣。设计师有谈到,原本可以通过分析单词之间的相似度来调整游戏难度,但由于拆弹手和专家本就存在的交流障碍,并没有选择继续增加单词的差异性。
另一个例子,通过Venn图,作者表明在设计谜题过程中要考虑可能产生的谜题数量。我很喜欢这个图,可以帮助玩家理清思路,也方便设计师设计逻辑。该图总共包含4种参数,而每种参数都有yes or no两种答案,则总共存在16种排列组合的可能性。这还是仅仅对于一条导线来说,通常这个谜题会包含4到5条这样的线,这样谜题的复杂度和随机性都可以得到保证。这样复杂的图再结合游戏中炸弹“滴滴”声音的催促,玩家会感到紧张,但同时又要仔细查看图片和注释,这样游戏的氛围感也上来了。

venn图:通过4种不同的判定方式决定是否该剪断对应的线
除此以外,不得不谈一谈游戏中的rule-based system,通过公示来确定问题与答案。例如挑一根电线剪断的谜题,如果单纯通过列举,什么第一根线是红色,第二根线是黑色,第三第四第五->剪断第一根线,这样的话排列组合的方式则有几千种,那一本规则书怕是没有个三四十页是写不下来的。为了解决这一问题,设计师提出通过以下公式控制谜题与解决方法的生成关系:

query and/or query = solution
所以至此,谜题的解题规则便已基本确定:query + query -> solution
以下两个图是谜题的判定条件和解决办法的伪代码。text used in manual指的是《拆弹手册》中记录的信息,function used in game指的源代码中函数的名称。

谜题的判定条件伪代码

谜题的解决办法的伪代码
那么现在炸弹上谜题生成的基本规则有了,接下来就是考虑如何优化来规则满足以下两个属性:
-
Solvability. 谜题必须是可解的。同时每一个的难度需要进行调整,确保5分钟内解决完所有谜题是完全可行的
-
Difficulty. 一个炸弹上所有的谜题需难度不一或类型不一。有的特别考察玩家的记忆能力,有的则考察逻辑推理能力等。
Query的组合
query会需要玩家同时去考虑模块中谜题的信息,和炸弹的一些属性信息。前一类信息处于炸弹的正面或反面,而后一类信息处于炸弹的侧面。前者需要玩家点击模块放大查看,后者则需要玩家转动炸弹。不同的信息获取方式丰富了游戏多样性。而且由于玩家无法同时观察到这两类信息,也增加了玩家的记忆压力,使游戏难度提升。
Weighted Solution Approach
在最初的测试中,游戏中的所有规则以及解决方案都是随机的,但这也造成了相同谜题出现在同一个炸弹上的可能性增加,这会削减游戏的趣味性和多样性,因为设计师想要玩家尝试使用各种不同的思维方式拆解炸弹,而非“一招鲜,吃遍天“。因此设计师们想了一个方法,每当一个query被选中后,这个query的类似query的比重在后续谜题的生成中会降低,但同时出现的概率并没有削减到0。出现的概率少,则玩家在一个关卡遇到相同谜题时会有一种“哦!太巧了!直接剪黑线就过啦!”的心态,他们以为他们发现了捷径,但当结果错误时,他们又会继续质疑自己的记忆。这做为游戏中的一种惩罚,也是为了让拆弹手和专家之间相互交流,以确认正确的解决方式。
Avoiding the Impossible
query与solution需要存在限制确保问题是可解的。拿剪导线谜题举例,如果只是随机生成query与solution,那么很可能会出现极端的情况,例如如果有多于一条蓝线,同时没有蓝线,则剪掉最后一根蓝线。这对游戏体验的破坏是巨大的,因此加了条限制即相同颜色的线的query无法同时出现在同一个query里面,但这同时也移除了一些有效的query,例如:如果有多余1条的蓝线和少于5条的蓝线,则xxx。但设计师们觉得这些有效的query的移除对整体游戏的影响并不大,第一是仍存在大量的排列组合,第二是颜色的多样性也能确保游戏的多样性。
Putting it All Together
为了确保谜题的规则总是有效,且面对同一个谜题时,不会同时有多个规则可供玩家选择,游戏中对规则进行了限制:
-
如果有多条规则同时对一个谜题生效,则排在最前面的优先生效。
-
使用“否则”,来逐渐筛选适应的规则。
-
根据规则的描述准确程度对其进行分类。降低过于精准定位的规则的出现频率,例如“如果没有红线,则剪断第二根线”。提高较需要玩家思考的规则出现频率,例如“如果有不止一根红线且序列号末位为奇数,则剪断最后一根红线”。
总而言之,Keep Talking and Nobody Explodes是一款在pcg方面设计非常巧妙的游戏。不仅是每一关的谜题都是随机生成的,而且规则也是可以进行生成的。这给予了这款游戏后期,仅仅通过修改部分数据,来大改游戏的玩法的可能性。这不仅需要策划们的思维缜密,程序方面的代码也需要确保结构清晰易懂。阅读完本章后很配合制作这个游戏的Steel Crate Games。
——————————————————————————————————————————————————
要想了解本书中的内容,首先需要了解Procedural Content Generation(以下由PCG代替)是何物。PCG的翻译为程序化内容动态生成,主要的作用是让游戏中的内容可以动态生成,而无需每一个关卡,或每一个怪物的放置都用代码写死。这样玩家在体验相同的关卡时,可以拥有完全不同的体验。比较典型的例子如Spelunky中,每一次进入1-1都会在不同的地点出生,也会遇到不同类型的地形。在Hades的每一次逃脱中,你都会拿到不同的Boon祝福,但是进入过的房间在每一个区域内都能控制在刚刚好的程度,让游戏有丰富的重复可玩性(尝试各种各样的build,或通关路线),同时又确保了难度曲线的平滑。
以上这些例子都是要归功于游戏内的PCG系统,使用一套合理的规则将游戏内容有序地展现在玩家面前。
这一篇文章记录的是本书的第10章,Worlds, 主要讲了游戏中的World Generation大世界生成 (以下由WG代替)。
- 所以什么是游戏世界?
游戏世界的定义十分广泛,从小的角度来讲,一片由平原与山脉组成的版图可以称之为游戏世界,在此基础上加入的天气系统,地壳构造系统,也属于游戏世界的一部分。从更广的角度来讲,一个星球大战类型的游戏中的太阳系,银河系,各种星球,也可以被视为一个游戏世界。但是如何让他们在游戏中动态生成,且互相之间存在一个相辅相成的关系并不容易设计。
本章节基于此概念,首先介绍成功应用了WG的一些具体游戏。其次探究了这些游戏为什么要使用WG,造成了什么样的玩家体验。第三则是作者基于自己的开发经历,展望今后数据化的内容生成的大趋势。所以基本分为三个维度介绍了WG的使用,从前,现在与将来。
- WG的历史。
Akalabeth(1980),一款由一名高中生开发的RPG游戏,采用了seed number去决定生成哪一种类型的世界,被视为最早将PCG代入到世界生成的游戏之一。
Elite(1984), 该游戏最初设计时本打算包含万亿的星系系统,可惜后面只实现了一部分。
Civilization文明系列,这大概是大家最熟知的PCG游戏之一。最早的文明根据游戏中的陆地面积,温度,气候和时代等属性生成游戏世界。

River Raid, 包含了无穷无尽的卷轴式地形生成。
其他典型的例子如 Alpha Centauri, Dwarf Fortress, Minecraft, Dark Days Ahead, No Man's Sky(无人深空)。
以上的游戏从世界生成的方式划分可以分两种:
-
生成一个几乎空白的游戏世界,给玩家探索改变这个世界的空间。
-
生成一个几乎把所有内容都给玩家准备好的世界。
这种分类可能仍然难以理解,书中举出了几个例子。符合分类一的典型例子有,《我的世界》和《文明》。在《文明》里面,每一个文明都是由一个主城开始发展,其他的大部分地图都是未探索。随着游戏的进行,玩家会开发更多的荒地,在原有的地图上建造属于自己的城市。我的世界也是类似的存在,玩家可以充分发挥自己的创造力来修建复杂的建筑物,核心是沙盒系统。反观分类二,玩家可以和世界中的大部分星球,建筑都进行交互,而这些星球或建筑的功能在地图生成之后都是固定的,玩家无法改变。例如Elite所生成的星球,在Ultima Ratio Regum的各种文明与社会。简单来讲,就是玩家对当前世界的支配权不同。
- 所以为什么要让系统去生成游戏世界,而非手动搭建?
究极原因,还是取决于游戏想提供给玩家什么样的体验
a) 探索欲。如果一个地图,没有PCG系统,那么玩家每次进入该地图所见到的都是完全一模一样的,固然会确保玩家第一次游戏时的新鲜感,但如果重复使用同样的地图,玩家摸索出了套路,很容易就变得厌倦。例如游戏Proteus,一个纯探索向的走路模拟器,它并没有应用PCG系统,当玩家把场景中所有的东西探索一遍之后,再游玩一次的体验或大打折扣,没有了惊喜,则重复游玩的动机被大大削弱。另一款游戏《亿万僵尸》,虽然没有将WG放入战役模式中,但由于其通关机制的限制(重复地在同一个地图中建殖民地杀僵尸,直到通关),不适用PCG的地图则是最优解。如果拿当前国内的手游举例,《万国觉醒》,则是应用了PCG的地图,部分资源点在地图上是随机刷新的,这就需要玩家规划资源采取的路线,或寻找不为人知的山洞,这增强了玩家进一步探索的欲望。
b) 程序生成的真实性与高效性。很多时候,手动将一个大世界的版图用各种资源一点一点拼成,需要大量的时间和精力,甚至最后无法确保资源之间的连贯性。而使用程序生成,可以根据自然界的习惯制定某些规则来让整个世界看的自然,同时节省大量的世界。例如使用L-system去生成高低不同,分叉数量不同的树木。

利用公式即随机数去生成不同样式的树木
值得注意的一点是,很多时候给玩家留下探索的余地,是激发他们探索欲的很重要的一点。极端的来讲就是,这个世界你总有一块是无法发现的。未知激发好奇心。
c) 游戏玩法的多样性。使用PCG生成的世界可以推动玩家尝试各种不同的玩法,而非一成不变的通关游戏。例如在《文明》里,玩家在开启游戏之前已经想好了预定的玩法,但是进入游戏之后发现资源点的分配布置,不支持他们进行原先的策略。这时候就需要玩家即时制定规则,这也是Real-time strategy game的由来。类似的系统有自走棋里面根据发牌官发的牌决定后期的阵容,Dwarf Fortress里面根据获得资源制造武器。好的系统应当鼓励玩家去尝试不同的build或策略,当然可以选择头铁硬玩,但是在几次失败之后,玩家应当能意识到需要根据系统来修改策略。
作者根据其制作的游戏《Ultima Ratio Regum》举例,讲述如何通过定性的方法(qualitative procedural generation)来生成复杂的游戏世界。
其实这里有一些疑惑不知道qualitative procedural generation该怎么翻译最好,所以我参考了之前用研学的定性研究,姑且当作者是从定性的角度定义游戏世界。
作者在自己的游戏中并没有专注于如何生成地图或环境,而是专注于一些存在于非物理的世界中的关系。例如社会文化、政治、宗教、机构、社会规范和美学等方面来定义一个游戏系统中各成分的关系。总的来说就是作者更注重社交层面对游戏世界的影响。
作者并不想用单纯的数值去衡量一个地方,而是给游戏的各个部分定性。例如特定宗教信仰可能会影响书籍封面的颜色;一座特别强大的房子可能会影响一个国家制造的所有武器和装甲的设计;特定地区的动植物可能会影响家族标志的设计;一场历史悠久但未被遗忘的战争,可能会影响来自一种文化的人对碰巧来自长期仇恨的敌人的玩家的反应;一座城市的地理位置可能会影响那里涌现的宗教信仰,这些宗教信仰可能与附近的海洋或山脉有关;等等。
那么所以,用这套系统的好处是什么呢?
-
第一是确保了排列组合的多样性。这样的组合会有大量的可能性,同时确保系统之间不会难以理解。
-
作者认为这是一种很不错的处理社交系统的办法。作者会基于游戏中所具有的文化知识,来对他们后续所遭遇的东西进行判断。例如玩家是一个仁慈的帝王,则他面对乡村中的盗贼,和一个好战的暴君所处的态度可能是完全不同的。代入感的增强以及对玩家心里的暗示,能使得游戏的发展充满更多可能性。
由于时间问题先写到这里可能有哪些解释不清楚的也希望大家可以毫不留情地评论。因为书看了一半才想起来写笔记,所以今后有时间会把之前地章节也补一补~玩游戏去喽xD
没有要显示的评论
没有要显示的评论