唇形同步如何工作
了解 Convai 如何在音频旁传递面部动画数据、支持的唇形同步模式,以及 AnimGraph 节点如何应用它。
当你的 Convai 角色开口说话时,会同时到达两样东西:语音音频和一串匹配的面部动画数据。插件会让它们同步播放,因此角色的嘴、下颌和脸颊会随着每个词同步移动。本页将说明该管线如何工作、六种口型同步模式,以及 Face Sync AnimGraph 节点如何应用这些数据。
预计算数据管线
Convai 会同时生成音频和按帧索引的混合形状数据序列。每一帧在特定时间点都会为每条面部曲线携带一个浮点值。该序列会在音频之前或与音频同时到达,因此在角色开始说话时,面部就已经准备好进行动画。
该 Convai 面部同步 组件会缓冲传入的帧,并在每个引擎 Tick 中公开当前帧。 Convai 面部同步 AnimGraph 节点通过该缓冲区读取数据,依赖于 Convai 聊天机器人 同一 Actor 上的组件,然后在将结果曲线值写入动画姿势之前,应用重映射和 alpha 缩放。
之所以预计算数据而不是在运行时推断,是为了避免在客户端中增加机器学习推理步骤。Convai 已经拥有文本转语音合成上下文,因此它可以在没有本地 viseme 模型额外延迟的情况下生成准确的混合形状时间。
当项目级 口型同步模式 为 Auto时,插件会读取每个角色的 Convai 面部同步 组件的 LipSyncMode 在运行时以选择匹配的格式。将项目级模式设置为 关闭 会为整个项目禁用面部动画。
口型同步模式
该 EC_LipSyncMode 枚举既出现在项目设置中,也出现在 UConvaiFaceSyncComponent。 关闭, VisemeBased, BS_MHA,以及 BS_ARKit 在连接设置期间选择格式。当项目级值为 Auto时,插件会读取所附加组件的 LipSyncMode 值,因此每个角色都可以使用与其绑定架构匹配的格式。
关闭
关闭
—
禁用面部动画。不会向 Convai 请求任何面部数据。
Auto
Auto
按角色绑定架构
读取每个角色的 Convai 面部同步 组件 LipSyncMode 在运行时以选择格式。当项目中的不同角色使用不同绑定架构时使用。
VisemeBased
基于 Viseme
带 OVR viseme 曲线的自定义绑定架构
15 个音素曲线: sil, PP, FF, TH, DD, kk, CH, SS, nn, RR, aa, E, ih, oh, ou
BS_MHA
MetaHuman Blendshapes
MetaHuman 和 CC5 角色
MetaHuman CTRL 曲线名称。默认模式。
BS_ARKit
ARKit Blendshapes
CC4 角色
61 个 ARKit 混合形状曲线名称(52 个标准 Apple ARKit + 9 个头部/眼睛旋转)。
BS_CC4_Extended
CC4 Extended Blendshapes
带扩展混合形状的 CC4 角色
CC4 扩展曲线名称。
选择模式
该模式必须与烘焙到角色骨骼网格中的混合形状格式相匹配:
MetaHuman Blendshapes — 用于 MetaHuman 角色以及配置了与 MetaHuman 兼容曲线的 CC5 角色。
ARKit Blendshapes — 用于导出标准 ARKit 混合形状集的 CC4 角色。
CC4 Extended Blendshapes — 用于在 Character Creator 4 中启用扩展混合形状选项导出的 CC4 角色。
基于 Viseme — 用于自定义绑定架构,你已手动创建了以表格上方列出的 15 个音素目标命名的曲线。
Auto — 当不同角色使用不同绑定架构时,作为项目级设置使用。插件会读取每个角色的
Convai 面部同步组件模式,在运行时。关闭 — 用于在项目范围内完全禁用面部动画。
如果模式与绑定架构不匹配,AnimGraph 节点会接收到来自 Convai 的数据,但找不到可写入的匹配曲线名称。面部不会播放动画,并且不会记录错误。请务必确认所选模式与角色骨骼网格上的曲线名称一致。
AnimGraph 集成
该 FAnimNode_ConvaiFaceSync 节点放置在动画蓝图的 AnimGraph 中,位于姿势源和输出之间。它会解析 UConvaiChatbotComponent 所属 Actor 上的,读取通过该聊天机器人口型同步组件提供的混合形状帧,应用上半脸和下半脸 alpha、可选平滑以及可选的 starvation blending,然后输出修改后的姿势。
该节点会自动发现 UConvaiChatbotComponent 所属 Actor 上的,如果 ConvaiChatbotComponent 引脚未设置。如果该 Actor 拥有多个 chatbot 组件,请显式连接该引脚以避免歧义。
对于 MetaHuman 设置,请按照中所述分配随附的 Convai 动画类 设置 MetaHuman 角色。对于自定义 Animation Blueprint,请参阅 Face Sync AnimGraph 节点参考.
缓冲耗尽混合
当动画缓冲区耗尽数据时——例如在两轮说话之间或第一帧到达之前——该节点会平滑地将面部淡回中性,而不是将其冻结在最后一个姿势上。
在一轮语音结束与下一轮帧到达之间,缓冲区为空。该节点使用 StarvationBlendInDuration 是位于 StarvationBlendOutDuration 使曲线平滑淡入淡出,而不是将面部立即切回中性再切回。淡出时长为 0.8 秒,例如,可让嘴巴在语音结束后自然收拢,而不是瞬间闭合。
上半脸与下半脸分离
语音数据有时会让眉毛和眼睑以在屏幕上显得不自然的方式移动。该节点允许你单独减少上半脸运动,同时保留完整的唇部动画。
该节点使用将混合形状分为上半脸(眉毛、眼睛、眼睑)和下半脸(下颌、嘴唇、脸颊)组的 UpperFaceBlendshapeNames 数组。每个组都会应用单独的 alpha。这使你可以减少语音带来的眼睛/眉毛运动——这通常是噪声——同时保持完整的唇部幅度。
相关概念
Face Sync 组件参考Face Sync AnimGraph 节点参考最后更新于
这有帮助吗?