从游戏设计角度思考程序化生成叙事

2022/04/05 技术应用 PCG 共 2880 字,约 9 分钟

游戏设计师为什么需要程序化生成叙事

程序化生成叙事(Procedural Narrative Generation),在2017年的GDC演讲Best Practices for Procedural Narrative Generation中,它的定义是:

Any automatic process that creates a narrative over time, where that narrative is not determined before the process begins.

即,在叙事未提前决定的前提下,自动化地随时间创造叙事。

程序化生成并不是什么新鲜的概念。在自然场景、建筑等更容易拆分和找到规律的方面,程序化生成早就成为了降低成本、提升效率的法宝。3A游戏及各大制作电影中早就有它的影踪,像townscaper或者bad north这样的小品游戏也以它为重要技术点。通过程序生成,甚至可以创造出无限生成的城市,你将永远走不到城市尽头。(感兴趣的读者可以自搜WFC-波函数坍塌算法作为入门)

但实际上,在游戏中,玩家不大容易注意到一棵树或是一栋楼模型资源的复用,而更容易记得点击永远弹出同一段对话的NPC、无效的故事分支、千篇一律的支线或是探险情节。人力总有穷时,因此,游戏的故事似乎总是会终结,精心打磨的主线也永远有固定的路线。

有没有可能,通过技术,让NPC真正拥有自己的选择,让游戏的世界以丰富的、无人可以完全预知的方向演进,从而让玩家拥有无限的、每个人都各不相同的游戏体验呢?

这是游戏设计师期望用程序化生成叙事达到的目的。

现在的程序化生成叙事能做到什么

然而,现在的技术真的能做到生成逻辑通顺、情节跌宕的剧情故事吗,真的能让NPC拥有人格吗?

很遗憾,不能。现在的程序化生成叙事更多做的仍然是匹配和拼凑的工作。即使语言AI已经可以做到非常像人,但是,对人类特殊的语言习惯、人类语言的潜台词、语言间的逻辑联系,都很难正确理解,更不用说生成符合人类逻辑的崭新的故事剧情。给观众尝鲜的AI视频可以期待观众去众多句子中寻找一两句“细思极恐”的文字,但应该没有设计师会将这些自己都摸不着头脑的东西置入游戏。当下,文案设计师仍然需要制作大量的文字内容。

那么程序化生成叙事当下是否就完全没有用处呢?当然不是。

程序化生成将故事拆分为故事事件、角色、角色状态(生死、饥饱、位置等等)。通过构建角色和状态随着事件变化的逻辑,来构建程序模型。

在合适的设计下,当故事的整体设计能够一定程度容忍片段化的时候,程序能够在庞大的故事库中撷取不同的故事片段,将它们按照设计师预先确定好的规则排列并展现给玩家。因此,玩家实际上的确能够得到独特的、丰富的游戏体验。

设计师的目的也就达到了。

程序化生成叙事的两种方法

两种做法分别是以模拟为中心的方法(simulation-centric approach)和以情节为中心的方法(plot-centric approach)。

以模拟为中心的方法

这一方法的原理是,首先设计一大堆角色,角色的状态需要哪些参数可以由设计师根据需要自行决定(譬如太吾绘卷中的善恶和武学境界,模拟人生中的愿望、人物关系),然后规定角色或玩家之间会发生的事情与这些角色状态参数的关系。这就像是一个制定好了四大基本作用力的宇宙,把粒子丢进去。产生的一切一切都符合规则,都来自原初的粒子,但一切都像是新的东西。

比如规定每个角色每天的路线、地点之间的距离、可用的交通工具、交通工具价格、每个角色拥有的钱、角色性格。

在一定的规则下(譬如节俭的角色钱数小于X就会步行),角色们应该就会自动地行动起来了。

以模拟为中心的方法中,设计师最需要考虑的问题之一,就是如何设计参数、以及参数事件之间的关系。在实际的游戏设计中,参数和事件既要有合理的、符合玩家预期的相关度,又需要根据游戏需要控制复杂度。关联过于少,不够有趣;关联过多过于耦合,又会使事件混乱,玩家无从找到规律。就好像魂系关卡,不同区域之间虽然要有较高的连通度,但也需适可而止,使玩家有明确的路线。

以上随手举例另一未考虑的要素是,npc之间的相互作用,以及玩家如何对世界造成影响。要有多少个玩家?玩家之间又如何相互影响?这就是另一个更大的话题了。

以情节为中心的方法

这一方法基于模拟,也就是仍然需要角色、角色状态、事件,这三大要素,以及要素之间互相影响的规则、角色和玩家相互影响的规则。

差别在于,在这一方法中,程序有自己要实现的故事路径,而并非只是接收玩家的动作。也就是说,设计师有期望展示给玩家的情节,而不只是放任整个世界自行发展。正如这两个方法的名称所代表的,它们看重不同的东西——模拟和情节。

当玩家行动时,游戏中有物体的状态被改变。这时,程序会根据当前的状态判断,哪一接下来在规则下允许发生的事件,最有利于导向设计师期望的结果。最后创造该事件。

这一方法最大的难点在于,如何设计期望事件的路径。这也很容易理解,整个过程相当于玩家和程序在轮流做出反应,如果不在期望事件周围的路径上做出足够多的限制,玩家很可能就会使用规则允许的方式绕过去了。

在游戏中使用的例子

在太吾绘卷中,每个角色有一些基本属性,比如善恶、境界。NPC和玩家彼此之间都会有相互事件,导致状态的变化,进而进一步导致事件的发生。被玩家津津乐道的故事已经随处可见,就不再赘述。

模拟人生中,每个角色有多重属性和多个状态,包括生理和心理。时间、地点等各种外部参数也对角色造成影响,成功塑造了一个自演变的世界。同时,模拟人生也使用了固定的行为树来创造精心制作的故事(比如天文男孩)。

在漫野奇谭中,每个角色有自己的身份、性格、职业(比如贪婪的领袖战士)。每个故事单独撰写,同时规定发生条件,当到了故事发生的节点时,在故事库中搜索符合当前角色状态和前置事件的故事,当有多个故事都可能发生时,就需要用到事件概率的检定,根据其它条件判断最有可能发生的事情。而发生的故事又会给角色以新的状态,从而使前后发生的故事之间有一定的逻辑关联。

80days用有向图构建剧情,玩家所到的地点和角色本身的状态都会影响故事。它也额外使用了一些小技巧,比如玩家的目标是环游世界,因此会尝试不同的路线,自然会经历不同的故事。一定程度上掩盖了故事的重复性;比如不同地点之间的事件没有强相关,也少有先后顺序的要求。

九十六号公路使用拓扑型的故事结构,情节和情节之间没有时间先后的线性关系,不具有因果上的强关联性。实际上剧情很容易穷尽,玩家的选择影响也有限。算是以上这些里在程序生成叙事中做得最拉的了。

能减少文案设计师工作量吗

如果使用模拟人生和太吾绘卷的方法,少用真正的文字叙事,只保留NPC行为和状态,用固定文字描述NPC行为,由玩家根据事件关联自动脑补成故事线,那么的确一定程度减少了文案设计师工作量。

但如果使用漫野奇谭或80days的做法,程序化生成叙事则只是使事件的发生在保持逻辑的前提下,拥有了被玩家一定程度改变路径的能力,使玩家对故事造成影响,也使每一个玩家都有创造独特故事的可能——而在这一切的背后,还是文案设计师动辄几十万字的心血。

文档信息

Search

    Table of Contents