一种减少实时插值计算量的动画生成方法
【专利摘要】本发明提出一种减少实时插值计算量的动画生成方法及其系统,其中所述方法包括以下步骤:计算动画帧密度;分配动画帧存储空间;计算关键帧之间的过渡帧;将关键帧和计算得出的过渡帧序列保存到分配的存储空间中;取出存储空间中的动画帧进行动画更新。根据本发明所提出的方法,系统首先确定动画序列帧密度,再预分配动画序列帧存储空间,然后通过关键帧预计算出过渡序列帧,最后将结果保存,以便复用,从而达到减少运行时实时插值计算的CPU开销的目的。
【专利说明】一种减少实时插值计算量的动画生成方法
【技术领域】
[0001]本发明涉及动画实时插值计算的方法,尤其是涉及一种减少实时插值计算量的动画生成方法。
【背景技术】
[0002]现有动画更新通常通过制作若干个动画关键帧,并在动画更新过程中,在关键帧与关键帧之间通过实时插值计算得到过渡帧序列,从而形成完整的动画,如图1所示。对于此方法,实时生成过渡帧序列往往要消耗大量CPU的计算。
【发明内容】
[0003]为了解决现有技术中实时动画实时插值计算存在CPU消耗过大的问题,本发明提供一种通过预先计算并存储过渡帧的方式实现减少动画实时插值计算量的方法。
[0004]本发明的技术方案为:
一种减少实时插值计算量的动画生成方法,涉及动画序列帧密度预计算,动画序列帧存储空间预分配,关键帧之间的过渡帧预计算等三个过程,具体包括以下步骤:
首先,对动画序列的帧密度进行预计算,这个密度是可配置的,如每秒25帧,这个25就是序列帧插值密度,对应的动画序列帧之间的间隔就是40毫秒。
[0005]接着,根据动画序列帧密度计算出动画总帧数,动画总帧数有两部分组成,一部分是原动画关键帧的帧数,另一部分是根据序列帧密度插值计算出的过渡序列帧的帧数。
[0006]再进一步,根据动画总帧数,分配所有动画序列帧所需的存储空间。
[0007]更进一步,通过关键巾贞计算出过渡中贞。
[0008]然后,将动画关键帧和过渡帧保存到之前分配的存储空间中。
[0009]最后,当动画更新时,根据时间计算得出当前动画帧是哪一帧,再去存储的动画帧序列中取得对应的动画帧。
[0010]根据本发明所提出的方法,系统首先确定动画序列的帧密度,再预分配动画序列帧存储空间,然后通过关键帧计算出过渡序列帧,最后将结果保存,以便复用,从而达到减少运行时实时插值计算的CPU开销的目的。
【专利附图】
【附图说明】
[0011]下文将通过优选实施例并结合【专利附图】
【附图说明】对本发明的目的、优点和特点进行非限制和解释和说明。这些实施例仅是应用本发明技术方案的典型范例,凡采取等同替换或等效变换而形成的技术方案,均落在本发明要求保护的范围之内。这些附图当中:
图1为常规的动画更新示意图;
图2为本发明中经过关键帧预插值计算的动画更新示意图;
图3为本发明中根据动画更新时间获取动画帧的示意图;
图4为本发明中动画更新的流程图。【具体实施方式】
[0012]本发明公开了一种减少软件(例如,游戏)更新动画时CPU实时插值计算量的动画生成方法,根据本方法系统在动画更新时可以减少CPU实时插值计算的运算开销,同时却能保证动画显示效果。
[0013]下面以一个关键帧为3帧,帧间隔为80毫秒的动画为例对本发明的方法进行详细说明。
[0014]如图2、3和4所示,在此实施例中,系统首先进行动画帧密度预计算,例如,系统采用每秒25帧的帧率进行动画播放,也就是动画帧之间的间隔为I秒/25=40毫秒。在人眼分辨率来说,常见的电影帧率,即每秒24帧的刷新显示已经足够,当然想要更细致也是可以的,例如每秒50帧,那么对应的帧间隔为I秒/50=20毫秒。此实施例采用每秒25帧,即插值密度 nInterpolate=25。
[0015]接着计算动画序列的总帧数nTotalFrame,根据上一步的插值密度,系统可以得到关键帧之间的过渡帧数目为:
(fOriginalFrameLenth / (1000 / nlnterpolate) -1) * (nQriginalTotalFrame -1)
=(80/(1000/25)-1) * (3-1)=2
这里的 f0riginalFrameLength=80ms, nOriginalTotalFrame =3。
[0016]这样可以得到nTotalFrame =3+2=5中贞。
[0017]再接着分配5帧动画帧所需要的存储空间,AnimationMemory [5],首先将动画关键中贞的第I帧存入AnimationMemory [I],第2帧存入AnimationMemory [3],第3帧存入AnimationMemory[5]。
[0018]接着计算关键帧之间的过渡帧序列,也就是本实施例的第2帧和第4帧。第2帧是由动画关键帧1,2帧插值计算得出,第4帧是由动画关键帧2,3帧插值计算得出,并将结果存入对应的 AnimationMemory [2], AnimationMemory [4]。
[0019]最后动画更新,按一定的规则,比如按时间顺序,直接获取AnimationMemory序列中的动画帧。如图3所示,设定fOffSetTime为动画当前帧相对动画开始的偏移时间,AnimationCurrentFrame为动画当前帧,这样:
当 0ms<=f0ffSet<20ms 时,AnimationCurrentFrame=AnimationMemory[I];
当 20ms<=f0ffSet<60ms 时,AnimationCurrentFrame=AnimationMemory[2];
当 60ms<=fOffSet<IOOms 时,AnimationCurrentFrame=AnimationMemory[3];
当 100ms<=fOffSet<140ms 时,AnimationCurrentFrame=AnimationMemory[4];
当 140ms<=fOffSet<160ms 时,AnimationCurrentFrame=AnimationMemory[5]。
[0020]系统依以上时序从存储位置依次取出关键帧和预先插值计算出的过渡帧,构成并播放所需的动画片段,具体过程如图4所示。
[0021]根据本发明所提出的方法,系统首先确定动画序列帧密度,再预分配动画序列帧存储空间,然后通过关键帧计算出过渡序列帧,最后将结果保存,以便复用,从而达到减少运行时实时插值计算的CPU开销的目的。
[0022]本发明除了上述实施方式之外,其等同技术方案也应当在其保护范围之内,在此不再--叙述。
【权利要求】
1.一种减少实时插值计算量的动画生成方法,其特征在于,包括以下步骤: 1)计算动画帧密度; 2)分配动画帧存储空间; 3)计算关键帧之间的过渡帧; 4)将关键帧和计算得出的过渡帧保存到步骤2)分配的存储空间中; 5)在后续动画更新时取出存储空间中的动画帧合成动画序列。
2.根据权利要求1所述的减少实时插值计算量的动画生成方法,其特征在于,采用每秒25帧的帧率播放动画。
3.根据权利要求2所述的减少实时插值计算量的动画生成方法,其特征在于,关键帧数量为3帧。
4.一种减少实时插值计算量的动画生成系统,其特征在于,包括: 处理器,计算动画帧密度,分配动画帧存储空间,计算关键帧之间的过渡帧,保存关键帧和计算得出的过渡帧,取出并播放存储的动画帧; 存储器,提供存储动画帧的存储空间; 显示装置,显示播放的动画。
5.根据权利要求4所述的减少实时插值计算量的动画生成系统,其特征在于,处理器采用每秒25帧的帧率播放动画。
6.根据权利要求5所述的减少实时插值计算量的动画生成系统,其特征在于,关键帧数量为3帧。
【文档编号】G06T13/00GK103500461SQ201310426929
【公开日】2014年1月8日 申请日期:2013年9月18日 优先权日:2013年9月18日
【发明者】梁波, 吴才忠, 刘畅, 谭贤亮, 李翔威 申请人:珠海金山网络游戏科技有限公司, 成都西山居互动娱乐科技有限公司