For the complete documentation index, see llms.txt. This page is also available as Markdown.

情绪输出绑定

EmotionSlotBinding 和两种绑定类型的参考——字段范围、权重计算、isMouthShape 路由以及预构建的槽位工厂。

输出绑定是 Emotion 管线的最后阶段。它们每帧接收来自累加器的平滑、突发修正后的分数,并将其写入角色的面部。可用两种绑定类型: BlendshapeEmotionBinding 用于直接网格变形,以及 AnimatorParameterEmotionBinding 用于 Mecanim 驱动的骨架。两者可以同时在同一个角色上运行。

这两种绑定类型都在 ConvaiEmotionProfile 资源—— BlendshapeEmotionBindingBlendshape Binding 部分和 AnimatorParameterEmotionBindingAnimator Binding 部分中配置。每个绑定都包含一个 EmotionSlotBinding 条目列表,其中每个槽位将一个规范情绪标签映射到一个或多个输出目标。

EmotionSlotBinding 字段

任一绑定类型中的每个槽位都使用相同的一组字段。

字段
类型
范围
默认值
说明

emotionLabel

string

规范分类标签

该槽位所响应的当前分类体系中的规范标签(例如 "joy", "anger")。必须与某个规范标签完全匹配——别名在此处不会解析。

blendshapeNames

string

以逗号或换行分隔

角色上要驱动的 blendshape 的名称 SkinnedMeshRenderer 。留空可跳过该槽位的 blendshape 输出。

animatorParameterName

string

Animator 浮点参数名

要写入的 Animator Controller 中某个浮点参数的名称。留空可跳过该槽位的 Animator 输出。

weightMultiplier

float

0 – 2

1

应用在平滑分数之上的每槽位乘数。使用大于 1 的值可放大细微情绪,小于 1 的值可抑制强烈情绪。

fullBlendshapeWeight

float

0 – 100

100

当平滑分数恰好为 1.0 时写入的 blendshape 值(Unity 的 0–100 网格单位)。

isMouthShape

bool

false

将该槽位通过 LipSync 合成器的嘴部层进行路由。参见 isMouthShape 与 LipSync 路由 下文。

Blendshape 绑定

BlendshapeEmotionBinding 每帧直接写入角色上的一个或多个 blendshape, SkinnedMeshRenderer 无需 Animator Controller。

权重计算:

finalBlendshapeWeight = score × weightMultiplier × fullBlendshapeWeight

其中 score 是范围 [0, 1] 内的平滑、突发修正后的值。

单个槽位中可以列出多个 blendshape 名称,用逗号或换行分隔。所有列出的形状都会获得相同的计算权重:

Brow_Raise_Inner_L, Brow_Raise_Inner_R
Eye_Wide_L, Eye_Wide_R

当某种情绪对左右成对形状进行对称驱动时,这很有用。

Animator 参数绑定

AnimatorParameterEmotionBinding 每帧将平滑后的情绪分数作为浮点参数写入 Animator Controller。当你的面部动画由 blend tree 或状态机驱动,而不是直接的 blendshape 控制时,这是正确的选择。

要求:

  • Animator Controller 必须将该参数定义为一个 Float 类型。

  • 参数名称 区分大小写。槽位中的名称必须与 Animator Controller 完全匹配。

  • Animator 组件必须位于 同一个 GameObject 作为 ConvaiEmotionController.

Animator 参数推荐命名约定为 Emotion_<Label> (例如 Emotion_Joy, Emotion_Anger)。该约定会在 RealisticEmotionSlots 从代码生成预设槽位列表时自动使用。

isMouthShape 与 LipSync 路由

isMouthShape 字段控制某个槽位的输出是否通过嘴部合成器层进行路由——也就是 LipSync 在语音期间写入音素形状所使用的同一层。

适用场景 isMouthShape = true:

形状类别

isMouthShape

嘴角、嘴唇拉伸、微笑、皱眉

true

张嘴、嘴唇压紧、酒窝

true

抬眉、压眉、眯眼

false

睁眼、眨眼

false

抬颊、鼓腮、鼻翼皱起

false

预构建槽位工厂

对于受支持的骨架, RealisticEmotionSlots.Build(RigConvention rig) 会生成一个完整的、受 FACS 启发的槽位列表,覆盖 Plutchik 的全部九种情绪。这消除了受支持角色类型的手动槽位编写工作。

支持的骨架约定:

RigConvention

说明

ReallusionCC4Extended

带扩展面部配置文件的 Reallusion CC4。最丰富的槽位集合——使用按侧的压缩、拉伸和上提形状。

ReallusionCC3

Reallusion CC3 基础配置文件。与 CC4 Extended 具有相同的语义覆盖范围,但使用基础配置文件中可用的形状。

ARKit

Apple 的 52-blendshape 约定。使用 camelCase 命名(例如 mouthSmileLeft, browInnerUp).

ReallusionCC4Extended, ReallusionCC3,以及 ARKit 由该工厂明确支持。对于任何其他骨架,请使用上面的字段表手动编写槽位。

RealisticEmotionSlots.Build() 旨在用于程序化配置文件创建和编辑器工具。对于基于 Inspector 的编写,请直接在配置文件资源中填写槽位条目。随附的 ConvaiSamplesShared_EmotionProfile 是使用 CC3 预设生成的,可作为自定义槽位配置的参考。

在代码中对某个配置文件调用该工厂的方式如下:

同时使用两种绑定

Blendshape 和 Animator 绑定可以在同一个角色上同时运行。常见模式是使用 blendshape 绑定进行直接面部变形,并使用 Animator 绑定通过 blend tree 驱动次要运动(头部倾斜、耸肩、身体前倾)。两种绑定每帧都读取同一张平滑分数表,因此它们保持同步。

将任一绑定的槽位列表留空即可禁用它——控制器会跳过任何没有填充槽位的绑定。

下一步

情绪配置文件情绪分类法

最后更新于

这有帮助吗?