在开放世界中设计可信的AI(一)

设计目的

设计出“活生生“的AI NPC应该从情感和体验出发,比起单纯为战斗而设计的NPC,在大世界中的AI NPC应服务于以下需求:

  1. 提供个人化的反馈

    • 识别玩家的表达:玩家确认了自己的存在,加强世界的真实感
    • 认同玩家的表达:玩家感觉自己的选择被接受了,也会更认同一个接纳了自己的世界
  2. 打造可信的角色
    玩家以世界观和剧情为抓手,合理化NPC的生成行为。反过来,这些行为也提醒和印证前者。

  3. 补充叙事碎片
    在 scripted behavior 和写死的剧情之外填充叙事细节,避免大世界里空荡荡的鬼气。

  4. 允许多途径完成任务
    只要是人,就有多种与其周旋的方式。AI NPC 能集成多个路径到自身的行为反馈系统中,给玩家完成任务扩增可能性空间。

AI 组成模块

首先明确模块具体数据应从角色形象设计、角色背景故事设计而来,做到有据可考。
其次,需要提前划分这些模块是固定的还是发展的。固定的模块不会改变其出厂设置,而发展的模块意味着在大世界中新的事件可能推动模块的变化。

信念:决定行动原则

外在信念
即角色的立场。立场可以有多个:

  • 隶属哪个社会/政治/宗教组织
  • 是什么社会阶层
  • 职业(社会职业和家庭角色)

NPC 应当做出符合信念的行动,例如遵循门派规矩、说符合职业的话、维护自己认同的团体。

内部信念
也可以称为人格。表现为该 NPC 的行事风格。
如暴力主义主张暴力解决冲突,和平主义相反;
风险厌恶的 NPC 应当优先选择被动、趋利避害的行为,反之则会在同一场合选择冒风险的行为。

愿望:决定行动目的

愿望可以着眼三个方面

  • 继承集体愿望(依据信念)
    这一集体指的是角色抱有信念的集体。例如继承医者的愿望:救人。

  • 承担剧情/玩法任务
    例如在一个短期的支线任务中,一个复仇者的愿望就是复仇对象得到惩罚。

  • 继承基本欲望

    • 生存欲望:趋暖、保存体力、避开生命危险
    • 社会欲望:趋美人、好钱财
    • 探索欲望:留意感兴趣的事物(依据信念和记忆)

知识:可以 access 的数据和交互选项

对于一部分重要 NPC,知识模块可能根据情景变动。大多时候,知识权限应当是不变的,或者分阶段解锁。

感知:视听,以及其他“作弊”读取的信息

通常AI视觉、听觉能提供绝大部分局部感知所需要的信息。

全局感知则包括大世界的状态变化:

  • 社会:所属团体的状态数据,相关联角色的状态数据,以及玩家的数据(这一点在后文 Barking 中展开)
  • 环境:天气、天色

记忆:经过筛选后的感知信息,预备表达的信息

记忆模块对于表达非常重要,直接决定了 AI 行为能展现的信息量。

记忆原则可能依赖于信念模块(更高概率记住对自己有利的信息。)

表达:唯一一个玩家能直观感知到的模块

从表达方式,可以分为

  • 自然语言表达:通常是基于写定的语料库或生成的较长的完整语句,也包括剧情中的台词。
  • 行为语言表达:包括 barking
  • 间接表达:物件、任务、事件

从表达内容,可以分为

  • 信念表达
  • 愿望表达
  • 感知表达
  • 记忆表达

那么如何表达?一个可信的 NPC 不会初次见面就报菜名一样把自己的数据抖给玩家看。我们需要研究更自然、自主的表达策略。

AI 的行为表达

表达模块的目的是通过行动呈现一个能及时获取信息(感知模块)、理解(信念 & 知识模块)信息、回忆信息(记忆模块)的角色。

Barking:认识、认出,然后喊出来

《奥秘》设计了一套基于程序生成的对话系统,类似的设计还有《中土之影》;并非程序生成但通过巨量文本达到类似效果的有《神界原罪》。这样的系统需要专用的数值,例如一个物件的恐怖指数。部分数值可以从实用数值直接挪用。

以《奥秘》为例,我们简单分为情景生成记忆生成。[1]

情景生成对话中,发言优先级如此递减:

  • NPC认出玩家物品:如认出随从并根据种族偏好和个人性格发言
  • 认出玩家状态:如是否施法变形
  • 认出玩家属性:如外貌和职业
  • 认出世界状态(白天/黑夜)

识别环境不仅增加NPC的行为可信度、传递关键游戏信息,还让玩家感觉到自身的「存在确认」,同时有辅助叙事的作用,例如用个人行为反应社会阶层和风尚。

记忆生成依赖 NPC 所记住的历史互动记录:

  • NPC是否曾经和角色互动过
  • 好感度系统

值得一提的是,由于这类好感度/声誉系统通常由许多对玩家并不透明的数值同时调控,这种不透明性容易造成玩家的困惑和不公平感。因此,当玩家做了直接影响好感度的事,最好通过 barking 或其他非实时的手段(比如NPC来信或公告板)告诉玩家。

Positioning: 在正确的时机站在正确的位置

Positioning 不仅是找到一个合适的位置,也包含移动(moving)的过程,同时,躲避(dodging)也是站位的一种。恰当的 positioning 既是让 AI 不显呆的手段,也能承担角色塑造和叙事功能。

但是,AI 应该何时移动?按移动时机,可以简单地分为条件反射移动主动移动。

对于条件反射的情况,主要是:

  • 不靠近危险源头,或远离被提前标记为不能靠近的区域
  • 躲避无法应对的突发危险
  • 站在跟随对象后方
  • 站得靠近熟识/亲近的对象

对于主动移动,又分为短线和长线。

短线:

  • 衔接行动

    例如,NPC 遇到可以应对的突发危险,移动到解决方案(物件或角色)附近。
    这里可以引入其他行为接口,例如用提前写定的行为或利用游戏内的生成式系统解决危险(例如水扑灭火),也可以是走进玩家呼救。

  • 准备演出站位

    站位对于演出至关重要。因此,需要人工设置能辅助 AI 站位的参考锚点,保证在需要时达到正常演出效果(如一次多方向夹击)和信息清晰度(如战斗状态下的敌人AI调整自身位置以始终呆在玩家屏幕内。)

长线:

  • 出行表:以一天为单位安排出行(每个目的地都应该有意义)

    例如一个包子铺老板,5点到店铺做包子,7点客人来了开张卖包子,下午6点关店去邻居家串门,晚上呆在家里。

这些 Positioning 策略配合 Barking 使用能增强玩家眼中 AI 行为的意图性。

Ambiance:自然的待机状态 [3]

  • 肢体语言:
    • 整理自己、自言自语
    • 视线看向变化源头或玩家

Mood:从情绪(emotion)到心情(mood)[4]

情绪是短线状态,心情是长线状态。

情绪生产源头来自对事件的判断,大致分为:

  • 对事件后果的判断
    • 所有事件:喜悦 / 不喜
  • 对角色行为的判断
    • 自己的行为:自豪 → 满足 / 惭愧 → 后悔
    • 其他角色(包括玩家)的行为:欣赏 → 感谢 / 责备 → 气愤
  • 对物件的判断
    • 熟悉物件:喜欢 / 厌恶
    • 不熟悉的物件:喜欢 / 厌恶