TA工具箱首页 / TA 术语百科

BlendShape 混合变形

2026-08-27

什么是 BlendShape

BlendShape(混合变形,也称 Morph Target 变形目标)是一种基于顶点插值的动画技术。它通过在多个预先雕刻好的目标形状之间进行线性插值,实时改变网格的顶点位置,从而产生平滑的形变效果。BlendShape 特别适合表现面部表情、口型同步等细微的局部变形,与骨骼动画互补。

工作原理

BlendShape 需要一组基础形状(Base Shape)和多个目标形状(Target Shapes)。每个目标形状定义了相对于基础形状的顶点偏移量。最终顶点位置通过以下公式计算:

`V_final = V_base + Σ (wi * ΔVi)`

其中,ΔVi 是第 i 个目标形状的顶点偏移,wi 是该目标的混合权重。权重通常在 0 到 1 之间,但也可以超出此范围以获得夸张效果。所有目标共享相同的拓扑结构(顶点数和三角形连接关系)。

与骨骼动画的区别

  • **骨骼动画**:通过层级骨骼变换间接驱动顶点,适合肢体等大幅度的刚体运动。
  • **BlendShape**:直接操作顶点位置,适合精细的表面变形,如面部肌肉运动、皱纹等。

两者常结合使用:骨骼动画控制头部转动和身体动作,BlendShape 控制面部表情。

应用场景

面部动画

BlendShape 是游戏和电影中面部表情制作的标准技术。通常为角色创建数十个表情目标,如微笑、皱眉、眨眼、张嘴等,通过组合权重产生丰富表情。

口型同步

根据语音音素制作对应的口型 BlendShape,在角色说话时实时混合,实现自动口型动画。

物体变形

可用于非角色物体,如汽车碰撞变形、布料褶皱、肌肉膨胀等。

实现方式

在建模软件中创建

在 Maya、Blender、3ds Max 等软件中,通过复制基础网格并雕刻出目标形状,然后导出为 BlendShape 或 Morph Target。这些软件支持权重绘画和动画关键帧。

在游戏引擎中使用

Unity 和 Unreal 均支持 BlendShape(Unity 称 BlendShapes,Unreal 称 Morph Targets)。引擎在导入模型时可识别并存储 BlendShape 数据,在动画系统中可通过曲线控制权重。

GPU 上的计算

BlendShape 计算通常在顶点着色器中进行。顶点数据包含基础位置、多个目标偏移量和对应权重,着色器计算加权和。对于大量 BlendShape,可使用计算着色器或合并通道优化性能。

优点与局限

**优点**:

  • 能够表现非常精细的形变,不受骨骼结构限制。
  • 直观的美术工作流:直接雕刻目标形状即可。
  • 与骨骼动画兼容,可叠加使用。

**局限**:

  • 每个 BlendShape 都需要存储完整的顶点偏移数据,占用较多内存,尤其是高模。
  • 只能进行线性插值,对于非线性的复杂形变可能需要更多目标。
  • 难以处理拓扑变化(如嘴巴张合造成的拓扑改变),通常需要保持一致拓扑。

数据压缩与优化

由于 BlendShape 数据量较大,常用压缩技术:

  • 仅存储发生变化的顶点偏移,忽略静态顶点。
  • 使用更低精度的浮点数(如半精度)存储偏移。
  • 对于频繁组合的 BlendShape,可预先计算组合结果。

实践建议

  • 合理规划 BlendShape 数量,避免过多导致内存暴涨。
  • 使用对称镜像功能减少制作时间。
  • 在引擎中利用遮罩或局部 BlendShape 减少计算量。

常见问题

BlendShape 和 Morph Target 是同一个概念吗?

是的,BlendShape 在 Autodesk Maya 中称呼,Morph Target 在 Unreal Engine 等中称呼,两者原理相同,都是通过顶点插值实现形变。

BlendShape 可以使用在哪些部位?

常用于面部表情、口型同步、肌肉膨胀、物体变形等。任何需要精细顶点级变形的场合都可考虑使用。

BlendShape 数据和骨骼动画数据哪个更占内存?

通常 BlendShape 数据占内存更大,因为每个目标形状都需要存储完整的顶点偏移数组;骨骼动画只需存储少数骨骼的变换。因此需要合理控制 BlendShape 数量。

BlendShape 能跟骨骼动画同时使用吗?

可以。在蒙皮计算后,叠加 BlendShape 变形,或反之。通常先应用骨骼蒙皮,再应用 BlendShape 偏移,但顺序可根据需求调整。

如何创建 BlendShape?

在 DCC 软件(如 Maya、Blender)中,复制基础网格,雕刻出目标形状,然后使用 BlendShape 工具关联到基础网格上。导出到游戏引擎时保留 BlendShape 信息。