SE资深工程师:用策划友好型管线驱动情绪表达的NPC动画和行为
【GameLook专稿,未经授权不得转载】
GameLook报道/在很多游戏里,NPC角色都扮演者重要的作用,它们不仅仅是游戏世界的介绍者,也不是机械的物体,而是可以陪伴玩家、让玩家对游戏更有代入感的角色。设计得当的情况下,有感情的NPC可以给玩家带来很多不同的体验,根据玩家在游戏内的不同行为做出迥异的反馈,让每个用户、甚至每次体验都与众不同。
此前的GDC演讲中,SE公司AI工程师Gautier Boeda分享了一个对策划友好型的方法,谈到了该公司为游戏制作的情绪管线,通过对NPC情绪、心情和个性的控制,让虚拟角色以更灵活和更自然的方式与人类用户互动。
以下是Gamelook听译的完整内容:
Gautier Boeda:
我是Square Enix公司的AI工程师Gautier Boeda,今天要分享的话题是“用策划友好型管线驱动情绪表达的NPC动画和行为”。
首先要感谢团队里与我一起工作的所有人,感谢他们。
情绪模型的发展历史
截至目前,用户与角色之间的关系几乎都没有改变,通常是从玩家到角色这一个方向,我们SE内部讨论认为,玩家与角色之间深度沟通的演变可以带来完全不同的玩法风格。
在2019年我介绍过的的NPC角色AI管线基础上,我们已经有了相当的基础,这个管线可以让NPC角色更有意识、表现力和充满活力。
在那之后,我们开始了一个名为wonder的项目,我们的原则是“上帝不玩骰子”,意思是AI的行为设计不应该基于随机值,所有的决策都应该尽可能自然而且有意义,这样才会让人有代入感。这个管线可以让NPC具有情绪、心情和足够的个性,让他们为玩家体验增加趣味性。
这一次,我们的目标是对它进行打磨,今天在解释这个管线之外,我们会探索它打造任何体验的能力,并且根据游戏策划的需求来更好地服务玩家体验。
什么是情绪、心情和个性?
首先,什么是情绪、心情和个性呢?取决于你所看的论文,它们有很多很多的定义,本次分享中,我们以如下方式对它们进行定义:
情绪是一种会随着时间快速变化的短期感觉,比如喜悦、悲伤、害怕等等;心情是一种更长期的感觉,它也会随着时间变化,比如兴高采烈地、抑郁的、害怕的等等;个性定义角色形象,它要么是固定的、要么是变化非常缓慢的,例如好奇、害羞、懒惰等等。
为什么它们重要?
那么,为什么你想要自己的NPC角色有情绪、心情和个性呢?它会给游戏体验带来什么?
首先,我们来看创意原型wonder里的一个没有情绪、心情和个性的案例。
玩家们需要走到左边,给角色匹诺发号施令,他会以自己认为好的方式使用这本书,但这并不是玩家告诉他的方式,而且角色也对此不高兴。这个案例中,匹诺会不断地学习,随后他会做的更好,然后玩家以同样的方式走过去,只不过没有做表情动画,当然,整个过程也没有特别出色的地方。
现在我们加入情绪、心情和个性,然后做同样的指令,可以看到有了个性的匹诺已经明显有了不同,角色对这个互动更加开心。
然后我们快速改变角色的个性,可以看到很多不同的表情和行为,我们还可以改变情绪和心情,这些是比较短期但可以明显看到变化的东西,我们稍后会详细讲。
情绪管线
接下来我说一下什么是模型组成的情绪管线:
首先是情绪模型,它是基于OCC模型打造的,我们用它是为了简单和连贯,根据游戏内活动和特定条件,探索角色会产生不同的情绪。
对于wonder原型,我们没有使用整张图,而是用了OCC模型的一部分。
首先,我们需要判断这个事件对于角色形象到底是正面还是负面的,如果你被一个球打到,可能得到的是负面情绪,如果吃了一顿美味的饭菜可能会有正面的情绪。基于这些,我们可以产生一些后续动作,比如球打破了窗户、衣服因为天气而潮湿,然后是自己或者其他人的情绪,比如看到某些事情微笑还是皱眉。
接下来我们用游戏内活动来看,假设玩家用短棍成功击中了球,所以角色为玩家感到高兴,这是正向的感觉,由于这个角色的情绪,我们会把它传递给其他角色,让其他人羡慕玩家。
如果是玩家击球打破了窗户,它就会带来不同的结果,角色就会感到忧伤,通过这种方式,NPC情绪会影响玩家体验。
取决于不同情况,这个模型可以支持24种情绪,你可以根据需要使用。
情绪可以通过语音、面部表情、特殊动画或者具体的话语来表达。
不过,实际上我们使用最多的是这8个情绪,此外,你可以根据自己的游戏体验增加更多的情绪。比如要增加一个未知事物,你可以加入喜欢或不喜欢两种情绪,还可以根据不同角色的情绪进行后续的行为。
假设我们的玩家用球打破了窗户,这时我们用忧伤来表达对打破窗户的情绪,那么NPC对其他玩家就会愤怒。
最后,如果你的AI代理是根据他们身边发生的事情而打造,那么因果分支会给出非常好的反馈。
这里我们举个例子,AI代理在午夜听到了楼梯上的声音,他的情绪会是害怕,然后会派出一个人去打探到底发生了什么,结果发现一个东西掉到了楼梯上,那么这时候的情绪就会变得正向,这时候用喜悦来表达显然是不合适的,我们建议增加更多的情绪,比如解脱。
对于游戏而言,这其实是非常复杂的事情,在wonder当中,我们使用了比较简单的案例,很容易猜出未来可能会发生什么。比如有云的天气会变得更暗,或许会下雨,或者玩家拿着一个苹果走向NPC,那么他可能想要喂这个角色吃。所以我们的模型有很多的可能性供策划探索,我们的游戏策划也用它做了很多东西。
尽管有很多的可能性,但仍然有些东西是未知的,其中一个就是情绪参数的竞争,也就是一个事件中的活动该怎么进行。我们这里以吃食物、被物体击中以及物体可见性举例,我们对这些活动进行分类,决定事件密度、持续时间以及频率等等,然后确定这些活动对于角色到底是正面还是负面的事情。比如被物体击中是负面情绪,还需要考虑速度和物体重量。
我们在游戏里会同时给出喜欢和不喜欢两种情绪,这里我们的角色被栅栏电到了,因此对栅栏产生了痛苦的情绪,因此,我们这里给栅栏增加一个负面效果,也就是密集、持续一段记忆,然后在一定时间之后忘掉。
接下来我们看心情模型,也就是PAD模型,这是我们做的一个三维模型,P指的是高兴(Pleasure)、A指的是激发(Arousal)、D指的是支配性(Dominance),比如一个情绪有多么高兴、密集度,以及角色对情况的控制力和影响有多大。
这3D模型可以覆盖我们之前提到过的所有情绪,我们现在支持8种情绪,如图片左边所示。在模型中央是默认情绪,这就是PAD模型。
心情可以通过很多不同的方式表达,它可以表达决策,比如选择具体目标的心情,可以通过行动来表达;也可以通过很多种不同的配音来表达,就像我们在wonder项目里那样;还可以通过身体动画的变化来表达:
这里开头是身体动画里的一帧,实际上可以表达很多种心情。然后通过完整的动画,你可以看到具体变化的原因。
3D心情空间有一些优势和劣势,3D空间可以表达很多种心情,然而这会增加复杂性,让debug和平衡变得困难。另外,取决于表达方式的不同,团队需要做的资源开销可能会超出控制。
所以,我们可以将它简化为2D,然后分为这三种组合,分别以P、A、D轴作为主要指标,我们可以根据不同的心情决定PAD值,实际上大多数的心情都可以通过三者组合来表达。
这是PD模型,我们可以从三维降到二维,也可以反向拓展,对于一款游戏来说,除了情绪表达的多样性,还需要充分考虑平衡性,所以最终我们将所有的情绪放到的二维模型的边缘,这是我们的新模型。
这是此前那个动画的心情模型,可以看到刚开始角色并不是很开心,走到了右边之后才有所缓解,做到了一个动作之后他再次感到很开心。
可以看到,这个结构其实很简单,所有指标都在0到1之间,比如懒惰、好奇、诚实、服从等等。
虽然它很简单,但在你的游戏里其实可以有很多种表达方式,根据个性、心情和情绪做出不同的改变。
在实际的制作中,我们还需要选择在哪里表现这些情绪,以及它们对什么有影响。如果只是决策类的情绪,那么所有的个性都应该是可控的,因为大多数情况下它都只有设计成本;如果需要动画、说话以及需要资源的应用场景,那么它很可能会让成本快速超出控制,我们的wonder就是如此。
在wonder当中,我们有8种不同的个性,实际上是很多的,每一种个性都有基础行走动画、形象和反应,还有不同的说话方式,所以这是很大的资源量,比如每一个动画我们都要做33种变体,这个工作量实在是太大了,所以我们将它缩减到了四种个性准则,这样,我们就只需要做17种变体动画。
如何解决管线的问题?
我们可以从这个UI当中即时看到角色表情,因此能够快速找到动画表达中的问题,对于角色情绪表达非常有用。
同样,我们可以用心情模型,点击不同心情,然后看角色表达是否准确,并且根据个性进行调整,这样就就能够探索所有的可能。
对于角色情绪表达,我们做debug工具和平衡除了上面展示过的心情热度地图,还要考虑个性历史,比如每个指标的变化。情绪历史也很重要,比如发生的时间、来源、指标等等,最后是很重要的工具,就是整体信息情绪,它计算每个情绪的分值,可以从图片底部的表格看到,每个情绪都有发生、密度、持续时间、影响分数等等。
那么,我们是如何对情绪和心情做平衡的呢?
再来看这个表,你会发现心情始终都在某个区域之内,我们首先会检查最高分数的情绪,发现喜悦至少比其他情绪高两倍,那么它可能就太高了。对此,我们或许可以降低喜悦的程度,但有些时候是做不到的,因为它在游戏里是有意义的,所以我们可以选择降低这种情绪发生的密集度,有时候你还可以调整它的持续时间。
但是,如果这一切都与你的设计相符合,那么可能其他情绪的发生、持续时间或者密度需要调整。不过,你需要从尽可能多的玩家那里收集数据,这样才能做到准确,以上就是今天分享的所有内容。
如若转载,请注明出处:http://www.gamelook.com.cn/2023/02/510821