Facial Animation
July 7, 2025About 3 min
Facial Animation
骨骼动画 vs 混合变形
面部动画主要两条路:骨骼驱动和混合变形(Blend Shapes / Morph Targets)。选哪条基本由「同屏角色数」和「表情精度要求」两个约束决定——大规模人群用骨骼,电影级主角用混合变形叠 GPU 计算。
骨骼动画靠骨骼的旋转、平移、缩放驱动面部网格,每帧只算矩阵变换,现代引擎的 GPU Skinning 对它优化得很成熟。它内存小(只存骨骼权重和关键帧,没有额外顶点偏移),也容易接 LOD——远处角色直接切到低骨骼数配置。代价在表现力:细微的肌肉挤压、皱纹这类效果很难做,除非堆一套极复杂的面部骨骼阵列,而那又要复杂的 Rig 绑定撑着。
混合变形存的是顶点相对原始位置的偏移量,精度高得多,眨眼、发音口型(Visemes)这些细腻表情都能雕出来,美术雕的表情也比骨骼控制自然。问题全在性能:每个 Morph Target 都要存受影响顶点的偏移向量,一个角色 500 个表情位内存就飙上去;默认走 CPU 混合多个 Morph Target 开销显著;移动端或老硬件上,同时激活的 Morph Target 数量还有上限。
GPU Morph Targets:把 CPU 负担挪走
UE5 里 Morph 的 CPU 开销可以基本消掉:项目设置 → 渲染 → 优化 → 勾上「Use GPU for computing morph targets」。开启后 Morph 计算交给顶点着色器,复杂面部动画就不再压 CPU。这也是混合变形能在主角身上大规模用的前提。
怎么选
| 场景 | 方案 | 原因 |
|---|---|---|
| 同屏大量 NPC / 群集 | 骨骼动画 | 内存低,角色被 Elimination 或远距离渲染时性能更稳 |
| 电影级主角(MetaHuman) | 混合变形 + GPU | 视觉上限最高,GPU 计算缓解性能压力 |
| 移动端 | 少量骨骼 | 移动 GPU 带宽有限,Morph 数据一多就发热掉帧 |
| 中等规模 / 竞技 | 混合 | 基础表情用骨骼,眼球、嘴部细节用少量 Morph |
ML Deformer
既要 Morph 的精度、又要骨骼的性能,可以看 UE5 的 ML Deformer:用机器学习把复杂变形(含 Morph 和物理模拟)训练压缩成低成本的线性模型,用较少的骨骼或计算量逼近复杂面部细节。
Tips
- 使用骨骼播放时,如果使用蒙太奇,需要把脸部的插槽设置与身体不同的插槽group,这样不会影响身体的蒙太奇。
- 使用混合变形播放,且头身分离组装成角色时,在使用copy pose或者leader pose时,以身体为主的话,需要指定头的mesh来播动画,copy pose并不能复制曲线,leader pose也不会传递曲线数据,也不允许子mesh有自己的动画。