> For the complete documentation index, see [llms.txt](https://docs.convai.com/api-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.convai.com/api-docs/zh/cha-jian-yu-ji-cheng/convai-unreal-engine-plugin/features/lip-sync/how-lip-sync-works.md).

# 口型同步的工作方式

当你的 Convai 角色开口说话时，会同时到达两样东西：语音音频和一串匹配的面部动画数据。插件会让它们同步播放，因此角色的嘴、下颌和脸颊会随着每个词同步移动。本页将说明该管线如何工作、六种口型同步模式，以及 Face Sync AnimGraph 节点如何应用这些数据。

### 预计算数据管线

Convai 会同时生成音频和按帧索引的混合形状数据序列。每一帧在特定时间点都会为每条面部曲线携带一个浮点值。该序列会在音频之前或与音频同时到达，因此在角色开始说话时，面部就已经准备好进行动画。

该 `Convai 面部同步` 组件会缓冲传入的帧，并在每个引擎 Tick 中公开当前帧。 `Convai 面部同步` AnimGraph 节点通过该缓冲区读取数据，依赖于 `Convai 聊天机器人` 同一 Actor 上的组件，然后在将结果曲线值写入动画姿势之前，应用重映射和 alpha 缩放。

之所以预计算数据而不是在运行时推断，是为了避免在客户端中增加机器学习推理步骤。Convai 已经拥有文本转语音合成上下文，因此它可以在没有本地 viseme 模型额外延迟的情况下生成准确的混合形状时间。

```mermaid
graph TD
    A["Convai"] -- "音频 + 面部动画帧" --> B["Convai Face Sync 组件"]
    B -- "每个 Tick 的当前帧" --> C["Convai Face Sync 节点 (AnimGraph)"]
    C -- "曲线权重" --> D["角色面部网格"]
```

当项目级 **口型同步模式** 为 `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 面部同步` 组件模式，在运行时。
* **关闭** — 用于在项目范围内完全禁用面部动画。

{% hint style="warning" %}
如果模式与绑定架构不匹配，AnimGraph 节点会接收到来自 Convai 的数据，但找不到可写入的匹配曲线名称。面部不会播放动画，并且不会记录错误。请务必确认所选模式与角色骨骼网格上的曲线名称一致。
{% endhint %}

### AnimGraph 集成

该 `FAnimNode_ConvaiFaceSync` 节点放置在动画蓝图的 AnimGraph 中，位于姿势源和输出之间。它会解析 `UConvaiChatbotComponent` 所属 Actor 上的，读取通过该聊天机器人口型同步组件提供的混合形状帧，应用上半脸和下半脸 alpha、可选平滑以及可选的 starvation blending，然后输出修改后的姿势。

该节点会自动发现 `UConvaiChatbotComponent` 所属 Actor 上的，如果 `ConvaiChatbotComponent` 引脚未设置。如果该 Actor 拥有多个 chatbot 组件，请显式连接该引脚以避免歧义。

对于 MetaHuman 设置，请按照中所述分配随附的 Convai 动画类 [设置 MetaHuman 角色](/api-docs/zh/cha-jian-yu-ji-cheng/convai-unreal-engine-plugin/getting-started/set-up-a-metahuman-character.md)。对于自定义 Animation Blueprint，请参阅 [Face Sync AnimGraph 节点参考](/api-docs/zh/cha-jian-yu-ji-cheng/convai-unreal-engine-plugin/features/lip-sync/face-sync-animgraph-node-reference.md).

#### 缓冲耗尽混合

当动画缓冲区耗尽数据时——例如在两轮说话之间或第一帧到达之前——该节点会平滑地将面部淡回中性，而不是将其冻结在最后一个姿势上。

在一轮语音结束与下一轮帧到达之间，缓冲区为空。该节点使用 `StarvationBlendInDuration` 是位于 `StarvationBlendOutDuration` 使曲线平滑淡入淡出，而不是将面部立即切回中性再切回。淡出时长为 `0.8` 秒，例如，可让嘴巴在语音结束后自然收拢，而不是瞬间闭合。

#### 上半脸与下半脸分离

语音数据有时会让眉毛和眼睑以在屏幕上显得不自然的方式移动。该节点允许你单独减少上半脸运动，同时保留完整的唇部动画。

该节点使用将混合形状分为上半脸（眉毛、眼睛、眼睑）和下半脸（下颌、嘴唇、脸颊）组的 `UpperFaceBlendshapeNames` 数组。每个组都会应用单独的 alpha。这使你可以减少语音带来的眼睛/眉毛运动——这通常是噪声——同时保持完整的唇部幅度。

### 相关概念

{% content-ref url="/pages/8b7003d8fdf40c7b56b0fd2a54376bfc5105903c" %}
[面部同步组件参考](/api-docs/zh/cha-jian-yu-ji-cheng/convai-unreal-engine-plugin/features/lip-sync/face-sync-component-reference.md)
{% endcontent-ref %}

{% content-ref url="/pages/ed19695d8a46eb28447110735f1f0dfe84079492" %}
[Face Sync AnimGraph 节点参考](/api-docs/zh/cha-jian-yu-ji-cheng/convai-unreal-engine-plugin/features/lip-sync/face-sync-animgraph-node-reference.md)
{% endcontent-ref %}


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.convai.com/api-docs/zh/cha-jian-yu-ji-cheng/convai-unreal-engine-plugin/features/lip-sync/how-lip-sync-works.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
