书本第十一章动画系统。
蒙皮动画
早期的3D动画多用刚性阶层式动画(rigid hierarchy animation),它给人物的不同部位建模,如手、小臂、上臂、躯干、盆骨、小腿、大腿等,并用层级关系约束它们,如躯干包含左右臂,上臂包含小臂,小臂包含手部等,当移动上臂时,小臂和手部会随之移动,使角色自然地移动。但其缺点在于角色的关节位置模型在移动时会产生瑕疵,尤其是对于非机械的生物来说。
还有一种技术叫做每顶点动画(per-vertex animation)和其变种变形目标动画(morph target animation),动画师在制作动画时控制模型的每一个顶点,达到精细的效果,常用在人物的面部表情。
而蒙皮动画,顾名思义,给骨骼蒙上一层皮,它结合了刚性阶层式动画的优点,模型由刚性的骨头(bones)构成,但其对外部隐藏,称为皮肤(skin)的圆滑三角形网格(?)会绑定于骨骼上,其顶点会追踪关节(joint)的移动。蒙皮上的顶点可按权重(weights)绑定至多个关节,因此当关节移动时,蒙皮可以自然拉伸。这就将需要控制的顶点数量大大压缩,角色同时也能像刚性动画一样使用骨骼移动。
骨骼(Skeleton)
骨骼由刚性的关节层级结构所构成,关节和骨头(bones)这两个词经常交替使用,因为关节才是动画师直接控制的物体,游戏引擎并不在意骨头,它只是关节中间的连接物。
层级结构中每个关节有且只有一个父关节(根关节除外),只要在每个关节上保存父关节的索引,就可以还原整个骨骼结构。
姿势(Pose)
把关节平移、旋转、缩放就能为骨骼摆出各种姿势,而一连串的姿势连续播放就产生了动画。
一个关节的姿势通常以4x4或4x3的矩阵表示,或表示为SQT数据结构(缩放scale、四元数旋转quaternion、矢量平移translation),骨骼的姿势是所有关节姿势的集合,通常简单地以SQT数组表示。