小德

超级版主
  • 主题:17
  • 回复:42
  • 金钱:142
  • 积分:301
3D 模型动画的基本原理是让模型中各顶点的位置随时间变化。主要种类有 Morph 动画,关节动画和骨骼蒙皮动画 (Skinned Mesh) 。
从动画数据的角度来说,三者一般都采用关键帧技术,即只给出关键帧的数据,其他帧的数据使用插值得到。但由于这三种技术的不同,关键帧的数据是不一样的。
Morph (渐变,变形)动画是直接指定动画每一帧的顶点位置,其动画关键中存储的是 Mesh 所有顶点在关键帧对应时刻的位置。
关节动画的模型不是一个整体的 Mesh, 而是分成很多部分 (Mesh) ,通过一个父子层次结构将这些分散的 Mesh 组织在一起,父 Mesh 带动其下子 Mesh 的运动,各 Mesh 中的顶点坐标定义在自己的坐标系中,这样各个 Mesh 是作为一个整体参与运动的。动画帧中设置各子 Mesh 相对于其父 Mesh 的变换(主要是旋转,当然也可包括移动和缩放),通过子到父,一级级的变换累加(当然从技术上,如果是矩阵操作是累乘)得到该 Mesh 在整个动画模型所在的坐标空间中的变换(从本文的视角来说就是世界坐标系了,下同),从而确定每个 Mesh在世界坐标系中的位置和方向,然后以 Mesh 为单位渲染即可。关节动画的问题是,各部分 Mesh 中的顶点是固定在其 Mesh 坐标系中的,这样在两个 Mesh 结合处就可能产生裂缝。
第三类就是骨骼蒙皮动画即 Skinned Mesh 了,骨骼蒙皮动画的出现解决了关节动画的裂缝问题,而且效果非常酷,发明这个算法的人一定是个天才,因为 Skinned Mesh 的原理简单的难以置信,而效果却那么好。骨骼动画的基本原理可概括为:在骨骼控制下,通过顶点混合动态计算蒙皮网格的顶点,而骨骼的运动相对于其父骨骼,并由动画关键帧数据驱动。一个骨骼动画通常包括骨骼层次结构数据,网格 (Mesh) 数据,网格蒙皮数据 (skin info) 和骨骼的动画 ( 关键帧 ) 数据。