【9001】互动叙事之初-Chris Crawford的理论
有幸拜读了下Chris Crawford的互动叙事理论,说实话后半部分只适合程序员去看看。个人是感觉Chris Crawford是从技术角度去讨论,可能有问题,但依然有比较多的观点值得玩味。我删除比较多的博主认为帮助不大的观点留下一部分最有用并附以个人观点
互动叙事是什么?
交互是什么?
交互性就是发生在两个或多个活跃主体之间的循环过程,各方在此过程中倾听(接受输入)、思考(处理输入)、发言(输出结果),形成的某种形式的对话
这个定义排斥了对交互性的一个误区,正常会认为对文学作品、电影的思考也是交互,Chris认为这只是一种反应(reaction),而且介于主体的不同,在作品方面缺少倾听、思考环节,在参与者方面缺少发言环节。
第二人称视角洞察力/自我克制,即站在观众角度思考如何有艺术性表达,而非传统地凸显作者性的艺术。这点也展示了Chris的一个倾向——以人为本,如果观众在某一情节表现出愤怒那么情节也应该如此。交互另外一个作用就是为了让观众体现出不同的个性,不同选择具备了不同内容
决定交互性的因素
1.速度,反应速度越快交互越强
2.深度,触及人性本质的程度,Chris对于深度界定过于模糊,博主认为应当解释为一种领悟感(Apperication)即如何启发玩家、触动玩家、带来反思
3.选择,关于选择内容太多详细见下
选择理论(个人私货)
首先需要澄清的是这个选择只局限于游戏层面,游戏之外博主不作引申
依据Chris交互性定义引出的一个简单定义:选择就是游戏与玩家的一次交互中,玩家在多个可执行的发言中的一个发言
选择的基本特征:
1.受到游戏倾听的约束。依据交互定义,游戏的交互过程实际上是“游戏发言→玩家倾听→玩家思考→玩家发言→游戏倾听→游戏思考→...”,从这样的流程来看玩家发言的结果必然受到游戏倾听的约束。比如游戏中玩家只能走不能跑,游戏不接受跑的“发言”,电子游戏有其特点一般是直接杜绝了游戏倾听范围外的玩家发言。一种可能性的批判是游戏作弊可以让玩家发言不受限制,但有力的反驳来自于Bernard Suits的理论,定义中是玩家而非游戏的参与者,Suits界定了目标、规则遵守关系之间的四种参与者,游戏作弊的参与者显然不能当作是玩家。
2.游戏倾听可接受多个可执行的发言。选择之所以是选择最明显的基本特征是玩家可以有不同的玩家发言,如果发言仅仅是像galgame那样点击翻页可以说是一种交互但绝不是选择。
3.多个可执行的发言必须不同且发言可以改变一场游戏的状态。这点说明选择绝不是形式上不同就可以称为是选择的,鼠标点击可以完成、键盘Space也可以完成的两个一样的“选择”大多数人恐怕也不会认同这是不同的“选择”
由此可以发现选择的核心在于玩家发言,但由游戏倾听、游戏思考决定,基于这样的关系有四种交互形式
选择的类型 | 简单选择 | 伪选择 | 强制选择 | 混合选择 |
---|---|---|---|---|
游戏倾听:游戏发言 | 1:1 | 1:n | n:1 | 前三种的混合 |
随机性:伪选择的特征是游戏发言的不确定性,这种随机性也可能体现在简单选择中
欺诈性:强制选择的特征是游戏倾听后收敛于同一游戏发言,这种欺诈性也可能体现在简单选择中
仅仅是靠游戏倾听与游戏发言的比例不足以描述简单选择
修正定义:
1.简单选择是指游戏倾听:游戏发言为1:1且不具备随机性、欺诈性的选择
2.伪选择是指游戏倾听:游戏发言为1:n且不具备欺诈性但具备随机性的选择
3.强制选择是指游戏倾听:游戏发言为n:1且不具备随机性但具备欺诈性的选择
4.混合选择是简单选择、伪选择、强制选择以外的选择
形式化选择理论框架(个人私货)
基于上述选择理论进行形式化描述以提供完整框架,此内容需要读者有一定的集论基础
倾听、思考、发言的过程分别记作\(A,B,C\),玩家记作\(P\),游戏记作\(G\)
\(GA\)为可接受玩家发言的集合
\(GC\)为可能的游戏发言的集合
选择本质上是一个关系\(S:GA→GC\)
随机性:\(∃x∈GA∃y_1,y_2∈GC(<x,y_1>,<x,y_2>∈S~∧~y_1≠y_2)\)
欺诈性: \(∃x_1,x_2∈GA∃y∈GC(<x_1,y>,<x_2,y>∈S~∧~x_1≠x_2)\)
简单选择即具有双射性质的关系\(S\)
伪选择即具有随机性且不具有欺诈性的关系\(S\)
强制选择即具有欺诈性且不具有随机性的关系\(S\)
这样的形式化有什么意义?
之前所述的定性分析已经足以解决问题,但形式化后在游戏制作方可以提供一定的算法以及分析思路
比如开发设定好了\(S_i:GA→GC\),游戏中所有的选择关系的集合即是一条故事叙事线的关系
当玩家选择了\(GA\)的某个元素\(x\)后即做某个选择后,不管输出\(y\)是被随机化的还是有欺诈性的情况,所形成的有序对\(<x,y>\)可以被锚定
它可以为玩家提供分析告知玩家做过哪些选择没做过哪些选择以及作为统计数据之一
算法设计:
[1]建立GA、GC、S表
[2]GA驱动,GA为玩家所有可能的选择的集合,驱动玩家从GA中挑选选择
[3]搜寻GC元素,可能存在GA的一个元素对应GC的多个的情况,需要一定算法进行确定
[4]锚定,当确定好GC元素时即确定了一个选择的有序对\(<x,y>∈S\)
一个应用案例:
博主现在想做一个非常特殊的叙事,故事中的人物A有属性好感度
当玩家对某个选择\(S_i\)做出选择时,假定\(GA=\{路过,交谈\},GC=\{和玩家交谈,漠视\},S_i=GA×GC\)
而从GA到GC的变化是随机的,会根据好感度的不同有不同概率随机到不同事件,比如好感度高时即使玩家选择路过,人物A会有较高概率和玩家交谈,那么关于算法第三步要确定的算法可以实现这样的随机性
当然这个例子可能过于简单了,更复杂的可能会考虑到其他影响因素,甚至情节完全可以改成一个角色的生死虽然和玩家的选择有关但更多和人物属性以及之前的选择有关,从而造就一种更复杂的叙事体验
理论缺陷:
关于这个理论博主认为可能有三方面的缺陷
1.它基于Chris的交互性定义,但这种定义能否确定为终极定义还有待考量
2.它假定了一种很符合自然的交互过程,但为什么一定是玩家与游戏之间有序的交替行为,而不可以是玩家先做几次发言再有游戏倾听
3.博主隐含地假定了\(GA=PC\)的情况,玩家发言一定按照游戏倾听受到约束,博主用了Suits的理论来解决,但这种解决方案不一定被接受
交互性的价值在哪?
虽然不是很想用存在即合理一笔带过,但以博主的水平确实无法完整说明交互性的价值,只好以书中观点来说明。
1.计算机更适合表述交互性,这点博主想用历史角度阐述,从早期计算机只有命令行的文字交互,到GUI的出现有图形的交互,以及现在VR、AR更加逼真的交互,计算机只会朝着更加沉浸、拟真的交互发展
2.交互性颠覆了以往作者性主导的作品,在观众层面上也需要考量
互动叙事(interactive storytelling)的定义
互动叙事的载体是互动故事世界(Interactive Storyworld),它包含所有可与玩家交互的,当玩家遍历故事世界后就是一个故事。
交互与故事情节(plot)之间有着难以调和的矛盾,即故事情节是作者性的体现与交互性提倡的观众第一截然相反。这种矛盾在实际开发时也暴露得很充分,玩家想走的故事作者可能没有想到或者说玩家对作者的故事感到恼火,玩家明明不想让某个人物死掉,作者却硬塞刀子。
Chris提出了解决方法——关键不在于玩家实际体验到的事件(event)而在于界定玩家行为的过程(process)。只要宏观操控一个框架(故事世界)而不用细究具体事件。过程驱动的叙述(process-driven narrative)与交互没有矛盾。而过程驱动博主认为就是一个个选择驱动的,Chris认为是动词(verb)驱动了过程,但想来也是异曲同工
错误的方向:但Chris将交互与叙事上升到了故事与玩家的自由权的争夺,即玩家才具有叙事的自由权。但博主认为在这点上可能就是Chris错误的开始,可以有多种方式去驳斥,甚至是Chris自身的观点也可以用来驳斥。比如宏观的操控下玩家还能具备自由吗?这不正是韩炳哲所述的主动的操控。
简单的情节结构设计以及优化方法
分支树结构:比较容易理解的结构且被大多数游戏应用

迷宫结构——伪分支树结构:分支树结构的另外情况是迷宫结构,迷宫结构下有强烈的目的,看似分支树结构,实际上只包含了成功、失败两种情况。常见的变种结构对话树结构以及博主玩过的一款galgame《关于我被小学女生绑架这件事》均是这样的结构

但分支树结构最明显的特征的节点数量庞大,导致了叙事成本骤增,然后有了一些技巧去改善如折返(foldback)
折返采用了合并节点以减少叙事成本,但折返同样有个缺陷甚至比分支树结构的缺陷更加严重,折返是一种强制选择,它具有欺诈性。为什么选择理论中要叫欺诈性而不是多对一是因为它可能破坏玩家体验,造成一种假象“不管选择什么早已注定”的骗局

折返方法的欺诈性关键点在于玩家感觉没有意义,如果它是有意义的,那么必然不会破坏玩家体验。然而要让折返具有意义也破坏了折返方法本身。由此需要着手解决这个问题需要从更宏观的角度解决。
在此之前剧情虽然是非线性的,但之间都有强烈的关联性,比如我写了某个角色死亡后,那么后续必然会受到约束最多写写回忆中的这个角色。如果没有这种关联性呢?看似很疯狂的想法确是这个方法的关键——图结构。
图结构提倡更开放的叙事,故事情节的独立性更强。依托于这种独立性,它的叙事成本更低,开发者可以编写一个个小故事情节而不必过度担心前后关联关系。这点也符合互动叙事的载体——故事世界,即要写的是世界而不是一个故事

书中内容到此,对于叙事,虽然还有更多方法,这里博主就不作引申了
游戏中五种故事类型
1.固化的故事,即毫无交互性,就是按照设定好的故事片段来呈现
2.多结局故事,提供了有限的交互性,但本身有限的内容不足以保证玩家的个体独立性
3.分支树结构,同第二点
4.开放式故事(open-ended story),玩家可以在庞大的游戏世界中探索,通过探索以进展故事。但本质上是将故事碎片化,玩家拼接故事地图来完成叙事。开放式故事的乐趣在于发展人物角色和探索游戏世界的丰富细节,而非玩家的自由度。
5.玩家驱动的故事,叙事完全由玩家主导,但这本身却很难算作故事或者说精彩的故事,它不能算作传统意义上的故事,典型的例子如《模拟人生》 《Facade》 。Chris认为这才是互动叙事,这样极端的观点博主对此表示怀疑,博主认为只要有一定的交互性第二类第三类第四类依然可以称为是互动叙事游戏
叙事成本问题以及Chris的激进观点
很显然非线性的叙事的成本远高于传统叙事,一般情况会是开发者控制非线性的范围或者砍掉一些以保证成本。而Chris的想法直指人工智能,即应当计算机自动生成剧本以节省成本。这样的想法太超前博主也很难接受,而现实是在b站上确实能找到一堆AI生成的剧本、绘画、声音、配音、音乐,以及AI生成的galgame。这样的窘境来得比预想得还要早,博主认为在未来的“那一天”到来之前可能需要先经历大思考以及社会上遇到的各种辩驳才能决定作者的观点是否可行。
人格模型
此内容不完全按照Chris,博主进行了一定的修改
人格模型的建立
人格怎样影响叙事?在游戏中让玩家做选择改变叙事轨迹再正常不过了,但是大部分都是基于人主观上的改变即人格而改变叙事。人格模型由人格属性组成,侧重情感的游戏可能需要比较多的人格属性,在游戏中比较常见的应用就是好感度、善恶度这类设计
人格模型应当具备的特征:
1.正交性,人格属性间不存在交集即不相关,否则容易混淆
2.完备性,可蕴含故事内的所有行为
3.最小性,在前面特征的前提下保证人格属性最少且正交
4.界定行为,人格属性是为了界定某一类行为,用于解释不同状态下的行为
5.通用性,人格属性必须能界定广泛的行为而非特定行为
人格属性的分类
第一人称属性,人物一般难以发生变化的属性,引用David Freeman的观点,这是关于“特质”的属性
第二人称属性,人物对其他人物感知到的表征属性
第三人称属性,人物对其他人物对另一其他人物感知到的表征属性
倾向(accordance)属性,这是关于“怪行”(quirk,同样来自于David Freeman的理论)的属性

人格属性的数学模型
[1]状态的存在性
游戏中常设置一些特殊状态,它仅仅作为布尔类型出现,只有存在或不存在两种状态,比如特殊标记只有存在性之分
[2]引入程度变化
仅用存在性很难描述一个状态的具体情况,需要引入程度来区分,这里引入状态的负面情况。即一个人格属性的数值范围为\((-1,1)\),其中-1表示极度负面,0表示中性,1表示极度正面
[3]简单公式
几乎大部分游戏对于人格属性而言采用了非常简单的公式
\(S_{new}=S_{old}+Δ\)(\(S_{new}\)表示计算后的人格属性,\(S_{old}\)表示计算前的人格属性,\(Δ\)表示人格属性的变化量)
\(Δ>0\)表示促使状态达到正面
\(Δ=0\)表示状态毫无变化
\(Δ<0\)表示促使状态达到负面
公式缺陷:溢出问题,这样的公式固然会有溢出的担忧,一种比较简单的方法就是设定阙值,大多数也是这样做的
[4]Chris的公式
Chris为了解决溢出问题,采用了另外一种公式以保证永远不会溢出,其方法颇像比防公式的设计
\(S_{new}=S_{old}+Δ|Sign(Δ)-S_{old}|,Δ∈(-1,1)\)
(\(Sign(x)\)是计算机非常常用的函数,根据参数的正负返回1,-1,0)
如果要计算机实现,显然整数是要好于不精确的浮点数,因此建议扩大系数,比如limit设置为1000
公式缺陷:Chris的公式虽然解决了溢出问题,但博主实测下来,它的变化过于不确定,实际设计变化量时基本只能在\([-0.1,0.1]\)中,关于此公式的缺陷下一节中博主提出了一种解决方案,欢迎各位读者的批判
[5]调和操作
实际游戏环境可能会更加复杂,因为除了本身变化量外人格属性中的倾向属性也会影响。它想要表达\(Δ\)虽然影响,但有其他因素影响了\(Δ\)。比如《多娜多娜一起干坏事吧》中有一属性“优等生”的特征可以提高外貌属性,但是会降低心情变化的变化量。这里心情变化本身就是要影响心情的变化量,但是特征影响了变化量。
Chris在原有公式基础上引入了一个嵌套公式,原有公式只知道\(S_{old},S_{new},Δ\)
假设新的影响\(Δ\)的参数为\(σ\)
公式:\(\begin{matrix}S_{fix}=S_{new}*z+S_{old}*(1-z) \\ z=1-(\frac{1-σ}{2}),σ∈[-1,1]\end{matrix}\)
(\(S_{fix}\)表示修正后的结果)
关于此公式,它本质如下图所示,里面再嵌套一个人格属性的坐标尺
z即将σ转换为\([0,1]\)的数,然后以百分比的形式赋之于\(S_{old},S_{new}\)的范围内

缺陷:Chris的做法固然有效,然而\(S_{fix}\)只能在\(S_{old},S_{new}\)的范围内即只能缩小却无法放大;另外它的影响参数的转换博主认为是没有必要的
[6]调和操作.改良版
为了解决第二个问题,博主对公式简单做了变换
其中σ在原先公式上表述为能达到\(S_{new}\)的百分之多少,如下的公式\(σ\)可以直接被表述为总体上减少了百分之多少,更适合游戏中的表达,比如有一个特征会减少10%的效果那么\(σ=10\%\),若要在上一公式实现它\(σ=0.8\)不太符合正常认知
公式:\(S_{fix}=S_{new}*(1-σ)+S_{old}*σ,σ∈[0,1]\)
第一个问题比想象中要更难解决,它首先就会遇到溢出这样不可调和的矛盾。比如\(S_{new}=0.9\)要加成20%会非常荒谬变成\(1.08\)。如果要解决相当于要改变整体关于增长的认知,如何增长更加合适?
为此博主首先需要做大量定义
\(m=min\{S_{old},S_{new}\}\)
\(M=max\{S_{old},S_{new}\}\)
目前区域实质上被分成了\([-1,m)[m,M](M,1]\)
其中增量\(Δ=|m-M|\)
不管影响增量怎样变化,它总会有相对值,设\(L=|S_{fix}-S_{new}|\)
在缩小的情况下之所以合理本质上是有一系数\(k=\frac{L}{Δ}\)在博主新公式下恰好满足\(k=σ\)不仅可控还自然(各位读者可代入L和Δ不难证明)
Chris其实也并非没有给出解决方案,换算成博主的公式后它表述如下
\(\begin{matrix} S_{fix}=(1-σ)+S_{new}*σ,σ∈[0,1],S_{old}<S_{new} \\ S_{fix}=-(1-σ)+S_{new}*σ,σ∈[0,1],S_{old}>S_{new} \end{matrix}\)
但会发现系数\(k=\frac{(1-σ)(1-S_{new})}{Δ},S_{old}<S_{new}\)或者\(k=\frac{(1-σ)(-1-S_{new})}{Δ},S_{old}>S_{new}\)
其中系数分子右半部分即设定的增长空间,其长度定义为\(I\)
由此发现增长不自然的本质在于\(\frac{I}{Δ}\)两空间之比不可控

当\(S_{new}\)足够小时次要的影响甚至要远超于原本的影响,由此Chris的解决方案并不能完全解决。
拓展模型——变化控制模型(个人私货)
基于Chris公式的缺陷,博主采用另外一种方式提供更加精确控制变化的功能。由于博主数学水平有限无法从数学上进行更根本的解释,只能告知这和不动点理论有关。
设定不动点\(-1(p_0),p_1,p_2,...,p_{n-1},1(p_n)\)
变化公式:\(\begin{matrix}S_{new}=S_{old}+Δ|Sign(Δ)*p_2-S_{old}|,S_{old}∈(p_0,p_1) \\ S_{new}=S_{old}+Δ|Sign(Δ)*p_3-S_{old}|S_{old}∈(p_1,p_3) \\ ... \\ S_{new}=S_{old}+Δ|Sign(Δ)*p_n-S_{old}|,S_{old}∈(p_{n-1},p_n) \end{matrix}\)
调和操作公式:\(\begin{matrix} S_{fix}=S_{new}*i+S_{old}*σ,σ∈[0,1] \\ S_{fix}=p_{i}*i+S_{new}*σ,σ∈[0,1],S_{old}<S_{new} \\ S_{fix}=p_{j}*i+S_{new}*σ,σ∈[0,1],S_{old}>S_{new} \\ p_i:S_{new}∈[p_{i-2},p_{i-1}] \\ p_j:S_{new}∈[p_{j+1},p_{j+2}] \end{matrix}\)
原有公式缺陷的核心在于远离-1,1两点时变化过大,如果设定多个点便可解决这样的问题
简单映射(个人私货)
经过改良的Chris模型已经能解决问题,但是实际游戏中数据不可能只是[-1,1]内,需要进行映射
[1]扩大倍数
设要扩大的倍数为\(k\),一种比较简单的做法就是记录k,然后每次运算前后乘除k即可,但众所周知浮点数不精确,博主不建议这么做,建议直接修改公式。
变化公式:\(\begin{matrix} S_{new}=S_{old}+Δ\frac{|Sign(Δ)*p_2-S_{old}|}{k},S_{old}∈(p_0,p_1) \\ S_{new}=S_{old}+Δ\frac{|Sign(Δ)*p_3-S_{old}|}{k},S_{old}∈(p_1,p_2) \\ ... \\ S_{new}=S_{old}+Δ\frac{|Sign(Δ)*p_n-S_{old}|}{k},S_{old}∈(p_{n-1},p_n) \end{matrix}\)
调和操作公式:\(\begin{matrix} S_{fix}=S_{new}*i+S_{old}*σ,σ∈[0,1] \\ S_{fix}=p_{i}*i+S_{new}*σ,σ∈[0,1],S_{old}<S_{new} \\ S_{fix}=p_{j}*i+S_{new}*σ,σ∈[0,1],S_{old}>S_{new} \\ p_i:S_{new}∈[p_{i-2},p_{i-1}] \\ p_j:S_{new}∈[p_{j+1},p_{j+2}] \end{matrix}\)
[2]其他映射
调和操作公式不必修改,关键在于变化公式后绝对值内的所有量需要修改。如果会复合函数问题不大。实在难以修改建议还是先改成浮点数再还原。这里博主不再赘述(懒得写zzz)
应用案例
现有人格属性——好感度,范围于\([0,10000]\)(扩大5000倍且整体位移5000,关于如何映射博主这里不再赘述)
设立这些不动点:\(0,2500,5000,7500,10000\)
假设人物A初始好感度500,玩家每次完成某个互动\(Δ=1200\)
好感度 | 互动次数 | 变化量 |
---|---|---|
500 | 0 | - |
1580 | 1 | 1080 |
2401 | 2 | 821 |
3025 | 3 | 624 |
4099 | 4 | 1074 |
4915 | 5 | 816 |
5535 | 6 | 617 |
6607 | 7 | 1072 |
7421 | 8 | 814 |
8039 | 9 | 618 |
8510 | 10 | 471 |
参考资料
《游戏大师Chris-Crawford谈互动叙事》
《游戏情感设计》