Unity Spine Skeleton Animation 2D骨骼动画 For Game 介绍
什么是骨骼动画
在早期的计算机硬件条件下,渲染操作会占用大量的 CPU 资源。为了避免在模型渲染过程中进一步加重 CPU 的负担,通常采用空间换时间的策略,帧动画模型便在这样的背景下诞生了。其中,比较著名的帧动画格式是 Quake2 所采用的 MD2。直至今日,帧动画仍然存在,不过它更多地用于描述体积较小、动作相对较少的物体。
随着 GPU 的出现,CPU 在渲染方面的压力不再像以前那样显著,一些新的技术手段也得以应用。相较于帧动画,骨骼动画更加灵活多变,但同时也需要更多的计算量。因此,骨骼动画通常应用于需要着重体现动作细节的模型中。
骨骼动画技术晚于帧动画技术出现。最初,骨骼动画仅应用于非实时渲染的建模领域,例如 3DMax 等建模软件,主要是为了方便美工进行建模工作。后来,随着 CPU 从繁重的渲染任务中解放出来,骨骼动画开始应用于实时渲染的游戏中。
骨骼动画原理
骨骼动画的基本概念来源
骨骼动画的灵感源自人体骨骼系统。例如,人体上肢的肌肉和皮肤会受到上肢骨骼的影响,而踝关节则会同时受到小腿骨骼和脚骨的影响。基于此,我们可以将骨骼动画拆分为两个核心概念:
- 骨骼(Skeleton):这是一种用于控制蒙皮的抽象概念,类似于人体骨骼对皮肤的控制作用。
- 蒙皮(SkinMesh):指的是被骨骼控制并最终显示在画面上的部分,就像人体的皮肤受到骨骼的影响一样。
蒙皮(SkinMesh)原理
在最终的渲染结果中,蒙皮会完整地呈现出来。蒙皮实际上是由顶点、法线和纹理坐标等元素组成,这些元素将被用于渲染。其中,顶点是最为关键的因素,因为顶点会直接受到骨骼的牵扯而运动,从而使整个模型呈现出骨骼所决定的形态。
骨骼(Skeleton)原理
骨骼是一个抽象的概念,在最终的渲染画面中是不可见的。它类似于人体骨骼,是由若干骨头(Bone)组成的树状集合体。每块骨头都与一定数量的蒙皮顶点相关联。当骨头运动时,与之关联的所有蒙皮顶点都会受到影响而产生相应的运动。
骨头与蒙皮顶点之间的关联需要考虑每块骨头对蒙皮顶点的影响程度,这种影响程度被称为权重(Weight)。尽管在大多数情况下,一个顶点可能只受到一块骨头的影响,但在关节处的顶点往往会受到多根骨头的共同影响。例如,踝关节处的顶点可能会分别受到小腿骨 50%和脚骨 50%的影响。
Unity3D 中的骨骼动画插件与 Spine
在 Unity3D 中,存在多种骨骼动画插件,如 Uni2D、SmoothMove、Puppet2D 等。为了方便美术人员进行动画编辑,我们的项目选择了 Spine 插件。
Spine 具有易于上手的特点,并且它提供了 mesh 功能。通常情况下,一张纹理只有 4 个顶点(左下、右下、左上、右上),但通过 Spine 的 mesh 功能,我们可以对图片进行处理,为其设置大量的顶点。之后,通过对这些顶点的设置,就能够实现图片的拉伸和形变效果,例如模拟乳摇等特殊效果。
此外,Spine 以 30 帧每秒作为标准,并且在最新版本中还提供了反向运动学(IK)功能,利用该功能可以将骨骼固定,从而实现特定的动作效果。