unity —— 动画

520 阅读2分钟

unity游戏模型动画主要有三类:

  • 序列帧动画
  • 关节动画(Skeletal Animation)
  • 骨骼/蒙皮动画 Skinned Mesh

序列帧动画:

原理 帧动画的每一帧都是角色特定姿势的一个快照,每一帧都是特定的图片,动画的流畅性取决于帧数的多少。通过快速播放一系列图片达到动画的效果,类似于gif。

缺点 需要更多的美术资源,文件占用大。

关节动画:

原理 角色模型是层次模型,把角色分成若干独立部分,一个部分对应一个网格模型,也就是将角色的一个Mesh分成很多部分Mesh,通过父子层级将分散的Mesh组织在一起,用父Mesh带动子Mesh运动。动画帧中设置各个子Mesh相对其父Mesh的变换(旋转、移动、缩放),一层层矩阵累乘,最终得到子Mesh在整个动画模型所在的坐标系的空间变换。

优点 只需要存储节点间的相对变换,文件占用小,角色更灵活,可以实现更多复杂的效果

缺点 不同部分的结合处往往会有明显接缝

骨骼蒙皮动画:

原理 内部骨骼,外部蒙皮。骨骼动画的仅有一个Mesh(皮肤),在Mesh中放置若干骨骼,骨骼的运动带动Mesh的运动。主要难点在于蒙皮,即将Mesh中的顶点绑定在骨骼上,每个定点可以被多个骨骼控制,通过权重来影响顶点的变化,这样也就不会产生裂缝。

过程

  1. 骨骼与标准姿势(T-pose)的绑定与蒙皮(binding, skinning)
  2. 动画师操作骨骼,制作关键帧
  3. 关键帧和插值计算的中间帧形成整个动画

应用 结合了上面两种动画形式,应用的最广泛。