Appearance
BS 基本表情转特殊表情推导
面捕引擎不提供特殊表情(吐舌、嘟嘴、喜怒哀乐),用 52 个基础 BlendShape 加权推导——移动端记录数据 → PC 端回放调试 → 可视化工具定参。
输入52 个基础 BS
场景覆盖80%+
约束不换引擎
背景
移动端 Z-star 小电视要驱动特殊表情(喜怒哀乐)。但移动端因美颜需求用的是商汤面捕引擎,商汤 SDK 输出的 52 个 BS 里没有特殊表情通道——只有眨眼、张嘴、微笑这类基础表情。
产品要更生动的虚拟形象,时间又紧,来不及换引擎。摆在面前的只有一条路:用现有的 52 个基础 BS 推导出特殊表情。这也是该方案后来整理成专利交底(BlendShape 基本表情转换特殊表情)的背景。
问题
- 信号缺失:吐舌、嘟嘴、鼓腮这些表情,引擎根本不输出,等价于要从有限信号里「猜」出没采样的维度。
- 没有 ground truth:推导公式对不对,没有引擎输出可以对照,只能对照真人画面人工判断。
- 调参困难:权重系数纯靠数值猜效率极低,需要能实时看到推导结果上脸的效果。
- 误触发风险:基础表情之间的组合有歧义(比如张嘴 + 微笑和吐舌在数值上很像),不处理会频繁误触发。
方案
核心思路:特殊表情不是独立信号,是基础表情的加权组合。
mermaid
flowchart LR
A["移动端埋点<br>记录 52 个基础 BS"] --> B["人工标注<br>画面中的特殊表情"]
A --> C["PC 端回放数据"]
B --> C
C --> D["调权重参数<br>拟合推导公式"]
D --> E["可视化调试工具<br>实时预览上脸效果"]
E -->|对照照片/视频帧| D三阶段实施
阶段 1:记录移动端数据。 在移动端埋点,记录商汤引擎输出的所有基础 BS 值,同时人工标注当前画面中实际出现的特殊表情。这一步攒下「输入 BS + 真实表情」的配对数据。
阶段 2:PC 端调试和测试。 把移动端数据导出到 PC,用调试工具回放。调节权重参数,找到最贴合标注结果的推导公式。
阶段 3:可视化调试工具。 写一个 Unity Editor 窗口:左侧是基础 BS 值滑动条(模拟商汤输出),右侧实时预览推导出的特殊表情效果,再对照真实照片或视频帧评估准确度。
关键实现
推导关系表
| 特殊表情 | 涉及的基础 BS | 推导方法 |
|---|---|---|
| 吐舌 | Mouth_A(张嘴)+ 阈值判断 | A > 0.7 时触发 |
| 嘟嘴 | Mouth_U + Mouth_O | U0.5 + O0.5 |
| 鼓腮 | Cheek(需推导) | 用眼角+嘴角位移间接推导 |
推导公式示例
csharp
// 吐舌推导:张嘴足够大 + 排除干扰表情
float TongueOut = 0;
if (A > 0.7f) {
TongueOut = Mathf.Clamp01((A - 0.7f) * 3.33f);
TongueOut *= Mathf.Lerp(1f, 0f, Mathf.Abs(I - E)); // I 和 E 同时大说明不是吐舌
}
// 嘟嘴推导
float Pout = Mathf.Clamp01(U * 0.7f + O * 0.3f);
// 鼓腮推导:嘴角收紧 + 上唇不动
float CheekPuff = Mathf.Clamp01(
Mathf.Max(0, (1f - O) * (1f - A) * 0.8f)
);吐舌那条里的 Abs(I - E) 项是个典型例子:光满足「嘴张得大」不够,微笑(I)和咧嘴(E)的组合会误触发,必须用一个抑制项把歧义场景排除掉。这类边界 case 全靠阶段 1 攒的标注数据暴露出来。
指标
| 指标 | 结果 |
|---|---|
| 场景覆盖 | 80%+ 的特殊表情场景 |
| 精度 | 不如原生引擎直出,但满足产品需求 |
| 引擎成本 | 零迁移,沿用商汤 SDK |
| 调参反馈循环 | 从「打包到手机看效果」缩短到 Editor 内秒级 |
与协议层的衔接
推导出的特殊表情不直接绑死在 Z-star 的驱动代码里,而是写进 CompatibleFaceData 的 Effect 层(喜怒哀乐,值区间 0~1)。模型侧只要在建模时做了对应的特殊表情通道,就能直接消费:每帧拿到面捕数据后,按模型的驱动类型取 Effect 层数据,赋到模型对应的 BlendShape 通道上即可。以后换引擎(比如 Mediapipe 解算器也能输出特殊表情),驱动代码一行不用改。推导算法是引擎相关的,协议是引擎无关的——这条边界划清楚,方案才不会随着引擎选型返工。
复盘
- 特殊表情是组合不是信号。想通这一点,问题就从「缺传感器」变成了「函数拟合」,可解得多。
- 可视化调试工具是关键路径。调公式时靠数值猜远不如实时看画面,这个 Editor 工具把单次调参的反馈循环从「打包到手机看效果」缩短到秒级。
- 数据先行。先埋点攒配对数据再调公式,顺序反了就是无头苍蝇。这套「记录 → 回放 → 可视化调参」的流程后来也复用到了其他面捕调优场景。
- 引擎是可以换的,协议不行。商汤的 BS 协议后来也作为扩展层接进了 CompatibleFaceData,推导公式跟着引擎走,协议层始终稳定。