最近读完 Deformation Transfer for Triangle Meshes,我自然产生了一个更具体的问题:如果角色 A 已经有一套表情,能不能把它迁移到角色 B,做成 B 的 blendshapes?
进一步说,假如我有 B 的 neutral mesh,也有一张 B 微笑时的渲染图,却没有 B 的 smile mesh 或表情视频,这张图能不能反过来指导我们做出 B 的 smile blendshape?
答案是:可以,但它不是一次简单的“复制顶点”,也不是只靠一张图就能唯一恢复完整的三维表情。 比较可靠的做法,是先利用 deformation transfer、标准表情模型或神经网络得到一个合理的三维初始值,再用参考图对它进行个性化拟合。可微渲染在这里很有用,但它只是整个流程中的一环。
先说清楚:我们究竟在迁移什么 #
Blendshape 本质上是一组具有相同 topology 和 vertex order 的 mesh。以 neutral mesh 为基准,第 (i) 个表情可以写成一组顶点位移:
$$ \Delta V_i = V_i - V_0. $$
运行时将这些位移按权重线性组合:
$$ V(w)=V_0+\sum_i w_i\Delta V_i. $$
如果 A 和 B 来自同一个 template family,也就是它们由同一张模板网格生成,拥有相同的 topology、vertex order 和语义布局,那么迁移往往比较直接。MetaHuman 的标准头模、同一套角色生成器导出的不同人物,通常属于这种情况。A 的第 1234 个顶点是左嘴角,B 的第 1234 个顶点仍然是左嘴角;现成工具只需复制或适配 delta,再检查幅度和穿插。
但如果 A 和 B 是分别建模的两张脸,它们的顶点数量、布线甚至嘴眼结构都不同,顶点编号就没有共同含义。此时首先要解决的不是 smile,而是 correspondence:A 表面上的每个位置,在 B 上对应哪里。
所谓 high-quality dense correspondence,是指这种对应关系覆盖整张连续表面,而不只是鼻尖、眼角、嘴角等几十个 landmarks。Landmark 能把两张脸大致对齐,却不能告诉我们嘴角附近的每个三角形该如何传递拉伸、旋转和挤压。真正用于 deformation transfer 的 correspondence 通常来自 template fitting、non-rigid registration、UV correspondence 或表面映射。
三种难度完全不同的场景 #
讨论“blendshape 能不能迁移”时,最好先判断自己属于哪一种情况。
| 输入情况 | 自动化程度 | 主要问题 |
|---|---|---|
| A、B 具有相同 topology 和 vertex order | 很高 | 表情强度、局部穿插和角色风格 |
| A、B 属于同一 template family | 较高 | 拟合质量与极端表情修正 |
| A、B topology 不同 | 中等 | dense correspondence 与形变重建 |
| 只有 B neutral 和一张 B 表情图 | 有条件可做 | 单视图歧义、相机、光照和表情先验 |
这里的“同一 template family”并不要求两张脸长得相似,而是说它们共享同一个底层网格定义。例如先把一张标准头模 non-rigidly fit 到不同扫描数据,再始终保留模板的面连接和顶点编号,得到的所有人物仍属于同一 family。工业工具链偏爱这种资产,因为 correspondence 在建模阶段就已经解决了。
单张 smile 渲染图能告诉我们什么 #
现在考虑我的实际输入:
- A 的 neutral mesh 和一个或多个 blendshapes;
- B 的 neutral mesh;
- 一张 B 的 smile 渲染图;
- 没有 B 的 smile mesh,也没有表情视频。
我们可以寻找一个 B 的三维表情,使它从指定相机渲染出来以后尽量接近参考图。这属于 single-view inverse rendering,也可以更朴素地称为 image-guided blendshape fitting。
如果候选表情由若干 blendshape 控制,可以写成:
$$ V_B(w)=V_B^0+\sum_i w_i\Delta V_{B,i}. $$
将它送入 renderer 得到图像 (R(V_B(w),c,l,m)),其中 (c)、(l)、(m) 分别表示 camera、lighting 和 material。接下来调整 (w),使渲染结果接近参考图 (I^*):
$$ \mathcal L = \lambda_{lm}L_{landmark} +\lambda_{sil}L_{silhouette} +\lambda_{rgb}L_{photometric} +\lambda_{perc}L_{perceptual} +\lambda_{reg}L_{regularization}. $$
因为参考图本身就是渲染图,这件事可能比拟合真实照片更容易。若能拿到原始 camera、projection、lighting 和 material,便可以固定这些变量,把优化重点放在表情上,减少“为了补偿错误光照而扭曲几何”的情况。
但单张图仍然存在根本性的歧义:正面图无法准确告诉我们嘴角沿深度方向移动了多少,也看不到脸侧和被遮挡的嘴唇,更不能唯一确定牙齿、舌头和口腔内部。很多不同的三维形状都可能产生相似的二维投影。
因此,一张图更适合得到一个 image-matched smile candidate:它从目标视角看起来正确,但仍需从侧面检查,才能判断是不是合格的 production blendshape。
为什么不能直接优化所有顶点 #
一个看似直接的方法,是把 B 的每个顶点都设为可优化参数,然后最小化图像误差。这样自由度很高,却很容易得到错误答案:优化器只关心当前视角的像素,不在乎不可见区域是否塌陷,也不懂嘴唇应该接触、脸颊应该保持体积。
更稳妥的顺序是:
- 先优化 camera,使 neutral 或已知 landmarks 对齐。
- 只优化
mouthSmile_L/R、cheekRaise_L/R、jawOpen、lipPress等低维参数。 - 先使用 landmarks 和 silhouette,稳定后再加入 photometric 或 perceptual loss。
- 若现有表情空间无法匹配参考图,再允许嘴角、嘴唇和面颊产生小幅 residual deformation。
- 对 residual 加入 Laplacian、ARAP、deformation gradient、symmetry 和幅度约束。
- 检查侧面、四分之三视角,以及 smile 与 blink、jawOpen 等表情的组合。
- 为穿插、闭嘴和极端组合制作 corrective blendshapes。
换句话说,先让模型在“像一张脸”的空间中寻找答案,再给它少量局部修正能力。这比一开始就放开几万个顶点稳定得多。
一条可落地的工作流 #
第一步:准备 neutral 与组件 #
统一 A、B 的头部朝向、尺度和坐标系。Neutral 不只是“没有笑”,还应尽量统一 jaw、eyeball 和眼睑状态。牙齿、眼球、舌头通常应该作为刚体、骨骼或独立组件处理,而不是随面部表面一起做自由形变。
第二步:建立 correspondence 或生成表情先验 #
如果 topology 相同,可以直接传递或编辑 blendshape delta。如果 topology 不同,则有几条路:
- 将同一标准 template non-rigidly fit 到 A、B;
- 建立 dense surface correspondence,再使用经典 deformation transfer;
- 使用 topology-agnostic 的神经表情迁移方法;
- 先把标准 FACS/ARKit-like 表情空间迁移到 B。
Landmarks 主要用于初始化和约束 registration,不能单独替代 dense correspondence。
第三步:得到 B 的候选 smile #
把 A smile 的局部 deformation gradient 迁移到 B,或者用神经模型直接进行 expression retargeting。这个候选结果不必与参考图完全一致,它的重要作用是提供合理的三维结构:哪里应当抬起、哪里应当压缩、哪些区域应该基本不动。
第四步:用参考图做 personalization #
固定或估计 camera,通过 differentiable renderer 比较当前渲染与 B smile 图。先调 blendshape coefficients 和 jaw,再决定是否增加局部 residual:
$$ V_B(w,\delta V)=V_B^0+\sum_iw_i\Delta V_{B,i}+\delta V. $$
这里的 (\delta V) 应限制在有需要的 facial region,并受到强正则约束。它的职责是修正 B 特有的嘴角弧度、脸颊体积和唇形,而不是重新发明整张脸。
第五步:验证它是不是一个真正可用的 blendshape #
“参考图匹配得很好”不是验收终点。至少还需要检查:
- 从正面、侧面和四分之三视角看是否自然;
- 左右拆分后是否仍然平滑;
- 嘴唇是否穿插,闭嘴时能否保持 contact;
- 与 jawOpen、blink、funnel 等 shape 组合时是否崩坏;
- 同一个 coefficient 在 B 上是否过强或过弱;
- 是否破坏法线、UV、牙齿和眼球的位置关系。
同样的数值不一定代表同样的表情强度。不同人物的嘴宽、唇厚和面颊体积不同,最终通常还要重新校准控制曲线。
可以使用哪些开源工具 #
NFR:为不同 topology 的脸生成迁移初值 #
Neural Face Rigging(NFR) 是 SIGGRAPH 2023 的研究工作,目标正是为不同 connectivity 的 facial meshes 提供可解释的 FACS-like 控制并进行 expression retargeting; 项目页面展示了在不同拓扑和身份之间迁移动画的结果。
它很适合承担“为 B 生成合理候选表情”这一步,但不能仅凭一张 B smile 图自动保证角色相似度。更合理的组合是:NFR 负责三维先验,可微渲染负责针对 B 的参考图做 refinement。
需要注意,NFR 是 research code,对运行环境和输入 mesh 有要求,并不是开箱即用的 DCC 插件。真正接入制作流程前,仍需处理网格预处理、眼嘴组件和 corrective。
EMOCA / DECA:从单张图估计表情 #
EMOCA 可以从单张人脸图像重建带表情的三维脸,它建立在 DECA 与 FLAME 参数模型之上。它适合从 B smile 图中估计“笑了多少、是否张嘴”等低维 expression parameters,但输出位于 FLAME 空间,不会直接变成任意 topology 的 B blendshape。
因此还需要 FLAME 到 B 的 registration 或 deformation transfer。这条路线更适合比例接近真实人类的角色;面对高度卡通化的眼睛和嘴巴,人工 landmarks 加自定义表情基往往更可靠。此外,EMOCA 的代码和模型许可偏向非商业科研用途,使用前应单独确认资产和模型许可。
ICT-FaceKit:标准表情空间与模板 #
ICT-FaceKit 提供 common topology、facial landmarks、identity model 和一组表情 blendshapes,可作为标准表情空间或 registration template。它本身不会自动完成任意角色的高质量迁移,但很适合用来补齐 mouthSmile_L/R、cheekRaise 等可解释的基础控制。
PyTorch3D、nvdiffrast 与 redner:可微渲染层 #
- PyTorch3D 的接口比较完整,适合快速搭建实验;
- nvdiffrast 更底层,速度和控制能力很好,适合已有自定义渲染管线的项目;
- redner 能处理更完整的物理渲染与场景参数,但只拟合面部轮廓和表情时往往更重。
这些 renderer 只负责把图像误差的梯度传回几何、相机或材质参数。它们不会自动提供 correspondence、表情语义、嘴唇接触或合理的人脸先验。
到 2026 年,哪一种方案最好 #
“最好”取决于输入,而不是某一个模型在论文表格里的排名。
如果 A、B topology 相同,直接迁移 delta 并由艺术家修正,通常仍然是成本最低、结果最可控的方案。没必要为了使用 AI 而绕远路。
如果 topology 不同,但已有 A 的高质量表情,比较实际的路线是:
NFR 或经典 deformation transfer 生成 B 的候选表情,再利用 B 的渲染参考图进行 differentiable refinement,最后制作少量 corrective。
如果只有 B 的 neutral mesh 与写实人脸图像,可以用 EMOCA/DECA 提取 FLAME expression,再将标准参数空间 retarget 到 B。但它更像“表情捕捉 + 参数模型拟合”,不是直接解决任意角色的 blendshape 制作。
研究前沿已经开始尝试从任意 neutral facial mesh 自动生成整套 rig。NeurIPS 2025 的 RigAnyFace 面向 diverse topology 和 disconnected components,由 neutral mesh 生成 industry-standard FACS poses。它代表了方向正在从“迁移一个形变”走向“自动产生完整、可控的 facial rig”。不过论文也明确涉及大量专业 rig 数据和二维监督;截至本文写作时,它更适合被视为研究前沿,而不是已经成熟的一键开源制作工具。
所以,对于“B neutral + 一张 B smile 渲染图”这个具体问题,我目前更信任混合式流程,而不是端到端黑盒:
- 用已有 rig、deformation transfer 或 NFR 获得三维先验;
- 用 landmarks 和 silhouette 完成可靠对齐;
- 优化低维 expression coefficients;
- 再用 photometric/perceptual loss 修正角色特征;
- 只在必要区域开放受约束的 residual deformation;
- 由艺术家完成多视角检查和 corrective。
可微渲染不是答案,而是一种反馈机制 #
回到最初的问题:这一套流程是不是可微渲染?
准确地说,只有“渲染候选表情、与参考图比较、把误差传回参数”这一段属于 differentiable rendering。前面的 correspondence、deformation representation 和 retargeting,后面的 contact、corrective 与 control calibration,都有各自的问题和方法。
经典 deformation transfer 回答的是:A 的局部形变怎样合理地出现在 B 上?
可微渲染回答的是:当前的 B 从这个相机看,与参考图还差多少,应该怎样调整参数?
人脸先验和正则项回答的是:在看不见或无法确定的地方,怎样避免得到虽然匹配像素、三维结构却很荒谬的答案?
把这三者合在一起,才是一条完整的 image-guided blendshape transfer pipeline。
最后 #
Blendshape 迁移并不是已经彻底解决的问题。相同 topology 的资产之间,工具链确实已经很成熟;但面对不同 topology、角色风格、口腔结构和单视图参考时,correspondence、三维歧义以及制作质量仍然存在。
另一方面,也不必因为只有一张 smile 渲染图就认为无从下手。这张图无法替代真实的三维 ground truth,却能很好地完成 personalization:先把 A 的表情经验带到 B,再让参考图告诉优化器“这个人物应该怎样笑”。
我觉得这也是 deformation transfer 这条研究线到今天仍然有价值的地方。问题的重点已经不再只是把一张 mesh 变成另一张 mesh,而是怎样把可复用的几何先验、可解释的控制空间和二维观察结合起来,得到真正属于目标角色的表情系统。
参考资料 #
- Robert W. Sumner, Jovan Popović. Deformation Transfer for Triangle Meshes. SIGGRAPH / ACM Transactions on Graphics, 2004.
- Dafei Qin et al. Neural Face Rigging for Animating and Retargeting Facial Meshes in the Wild. SIGGRAPH, 2023.
- Radek Daněček, Michael J. Black, Timo Bolkart. EMOCA: Emotion Driven Monocular Face Capture and Animation. CVPR, 2022.
- ICT-FaceKit, USC Institute for Creative Technologies.
- Wenchao Ma et al. RigAnyFace: Scaling Neural Facial Mesh Auto-Rigging with Unlabeled Data. NeurIPS, 2025.