Avatar 骨骼映射:从任意骨架到标准人形的统一表示

发布时间:2026/10/24 4:15:37
Avatar 骨骼映射:从任意骨架到标准人形的统一表示

一、问题:同一套动画如何服务高矮胖瘦各种角色

你有一组动画资源:一段走、一段跑、一段待机。它们是为某一个具体角色录的。

现在你要把它们用在另一个角色上——身高差 30 厘米,肩膀更宽,胳膊更长,手臂比例还不一样。

直接把动画播过去会出什么问题?

  • 脚步会打滑:源角色的步幅是 70 厘米,目标角色的腿长 90 厘米,但动画里的位移还是 70 厘米;
  • 手臂会穿过身体:源角色的手臂相对躯干更短,映射过去之后手臂会「陷进」躯干里;
  • 膝盖会反向弯曲:源角色的大腿小腿比例是 1:1,目标角色是 1.2:1,同样 90° 的膝关节角,在两个角色身上呈现的弯曲方向完全不同;
  • 整体看起来像「一个高个子在用小骨架的衣服」,违和感极强。

问题的本质是:骨骼动画记录的是「关节角」,但角色的外观由「骨骼长度和比例」决定。前者可以搬运,后者不能。

所以引擎需要一个中间层:

源角色的骨架 ──► 标准人形 ──► 目标角色的骨架 (A) (中间表示) (B)

这个中间表示就是 Avatar。它不记录具体骨骼,而记录「这个角色在标准人形坐标系里是什么样子」。


二、Avatar 的本质:一个与具体骨架无