Unity 默认的骨骼动画实现,是在 CPU 中采样 Animation Clip 里的曲线数据,这里因为曲线保存的并非直接的骨骼变换矩阵,而是某个 bone 相对父节点的 local Position、local Rotation、local Scale、所以要递归地计算每个 bone 的变换矩阵。
之后的蒙皮计算也是在 CPU 中进行的,但是这个过程是多线程的。
优点:
骨骼变换是在 Unity 动画系统管理下的完成的,可以方便地支持 blend Tree 与 ik 之类的特性。 蒙皮过程都是在 CPU 完成的,所以交付给 GPU 的 Mesh 和普通的 Mesh 没有什么区别,可以统一接口、简化开发。
缺点:大部分蒙皮网格的顶点数目与骨骼数目都不少,而骨骼变换和蒙皮计算的开销和这两者线性相关。多线程可以减轻一定负担,但是对于核心数少的平台,比如移动端,给 CPU 带来的负载还是太大了。