随着计算机图形学和硬件技术的发展,人们已经可以用计算机生成高质量的图像,计算机动画也得以快速发展,特别是近年来游戏中不断强化动画能力,并逐步提高到电影级真实的程度,力图营造更真实更自然的游戏体验。
关键帧动画是随时间变化而变换位置和旋转信息的一种高效的插值法。它要求作者在不同的形态中都创建一个相应的特征;每一个形态就叫做一个关键帧。每一个关键帧都能改变层次中节点的局部位置和局部方向。当它达到激活特征的时候,在两个关键帧之间的形态将被计算得到。
OGRE有定义关键帧类(KeyFrame),它组成动画最基本的元素。一个动画轨迹里有多个关键帧,每个关键帧具有自己的位置、缩放比例和旋转角,同时每个关键帧还保存有自己在整个动画轨迹里所处的时间点。在实际运行时,根据当前时间,通过对两个关键帧的插值可以得到当前帧(当前位置、缩放比例和旋转角)。随着时间的变化,插值得到的当前帧也是变化的,动画就产生了。由于关键帧包括位置信息、缩放比例信息和旋转信息,所以可以实现运动动画、缩放动画和旋转动画以及混合动画。
通过对关键帧画面本身的插值来得到中间画面的方法称为形状关键帧插值,对于基于形状关键帧插值的关键帧动画来说,动画中的角色都是由它的形状——即由多边形的顶点或样条曲线的控制点来定义的。角色的运动是由一系列的顶点或控制点对应于其它关键帧的各顶点或控制点,通过对两个关键帧中的每两个对应点间进行插值计算,即可得到中间画面的对应点。插值可以采用线性插值或样条插值。对于形状关建帧插值来说,其状态变量是“点”,而运动的规律由插值计算得到。在三文动画中,三文形状关建帧插值往往给出的是三文的数量和数据。在两个关键帧之间通过一个参数t从0变到1来改变三文物体的变换范围,并生成中间结果。
实际应用中,三文动画的线性插值一般很难得到理想的结果,如运动会出现不平滑,运动速度会不连续,同时在物体旋转时会产生畸变等等,这些都需要一定的措施进行校正。
参数关键帧是对动画中物体模型的参数进行插值计算,它的基本原理是:动画中的物体,摄影机、灯光等均是由参数表示的,我们需要在给定时间上,给定适当的一组“参数值”来生成一组关键帧,然后,计算机对此参数进行插值计算,中间画面的物体,灯光、摄影机的位置、形状等根据插值后的参数生成。
从原理上讲,关键帧插问题可归结为参数插值问题,传统的插值方法都可应用到关键帧方法中。一个好的关键帧插方法必须能够产生逼真的运动效果并能给用户提供方便有效的控制手段一个特定的运动从空间轨迹来看可能是正确的,但从运动学或动画设计来看可能是错误的或者不合适的。可通过调整插值函数来改变运动的加速度和速度。因为插值过程中存在如何把握插值过程中时间控制问题,Steketee等提出了用双插值的方法来控制运动参数。其中之一为位置样条,它是位置对关键帧的函数;另一条为运动样条,它是关键帧对时间的函数。他们还讨论运动中的局部控制,两个运动过渡点处的连续性问题。Kochanek等提出了一类适合于Keyframe 系统的三次插值样条,他们把关键帧处的切矢量分成入矢量和出矢量两部分,并引入三个参数:张量t、连续量c和偏移量b对样条进行控制。张量t 控制曲线在关键帧处的弯曲度,连续量b控制关键帧处是over-shooting 还是under shooting 。该方法允许在不调整关键帧的情况下调整物体的运动。
在关键帧动画中关键帧参数的插值一般是彼此独立的。若参数间有一定的内在关系,独立插值有可能产生不自然的运动。Brotman提出用经典力学得到的微分方程来描述物体的运动,并把关键帧看成是约束条件,然后施加外在控制来满足这些约束。通过使控制能量和运动轨迹的不光滑性最小,得到了光滑和自然的运动。该方法应用于关键帧参数有一定内在关系的(如位置、朝向、线速度、角速度)运动最优控制。
除了机械位置、形状变化插值外,若物体的颜色发生变化,例如关键帧1时,物体为蓝色,而在关键帧2时,物体转为橙红色,则应进行颜色参数的插值计算来生成中间画面,使物体的颜色由蓝色逐渐过渡到橙红色。
在关键帧动画中,计算机的主要作用是进行插值,为了使若干个关键帧间的动画连续流畅,经常采用样条关键帧插值法。这样得到动画中的运动具有二阶连续性,即C²连续性。同样是一组点Pⅰ和他们对应的样条曲线的tⅰ(t=0~1).对应于中间t的每一个新点V仅与t前后的曲线上的两个点(一个在前,一个在后)有关。需要补充的是这两个点处的切矢量点D2 和Di+1。其样条曲线插值公式为:
该式中的4*4矩阵是Hermite矩阵,点Pⅰ 处的切矢量Di定义为
若a=0.5,则得到Catmull-Rom样条,即
是Pⅰ+1、Pⅰ、Pⅰ-1之间两个弦的平均值。
由于线性插值引起的一阶导数的不连续,在动画中会出现画面跳跃。因此需要采用高的插值方法,以保证曲线和它的一阶导数的连续性,如三阶样条曲线插值。在使用关键帧插值的三文动画技术中,究竟使用那种插值算法比较合适,要根据运动的具体描述来确定。若要描述一个弹性较差的硬橡皮球的运动,就需要在动作时间上进行分配处理,以该球的“重”和“硬”的特性,这里多用参数关键帧插值。如要描述有弹性的皮球掉到地上,经弹跳几次后,慢慢地停下来的过程,必须作出多个关键帧。因为不仅要描述物体位置的改变,还有物体形状的改变,所以使用形状关键帧插值要准确。
无论是样条驱动动画还是关键帧插值方法,都会碰到这个问题:给定一条物体运动的轨迹,求物体在某一帧的位置。物体运动的轨迹一般由参数样条来表示。如果直接对参数空间进行等间隔采样,将会产生运动的不连续性。为了使物体沿一样条平滑运动,需要对样条进行弧长参数化。Guenter等提出用Gauss型数值记分方法取代Simpson方法计算弧长,用Newton-Raphson迭代代替二分法来确定给定弧长点在曲线上的位置,并采用查找法纪录参数点弧长值的方法来加速运算。
四元数插值法的唯一必要的支持就是区分单元四元数函数转变为真实值。这些方程来源于同一标准的微积分过程,但是必须注意乘法的顺序。这个方法是由Shoemake(1987)提出的。这个函数的导数出来的
其中log是之前有函数定义的。有幂次方也是它自己函数,
给定一个次序N单元四元数
上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] ... 下一页 >>