具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。
在本申请使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本申请。在本申请和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本申请可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本申请范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
补间,又称补间动画,是指建立在两个关键帧(一个起始关键帧,一个终止关键帧)之间的渐变动画。在生成多对象的复杂动画时,根据制作人员设置的补间,动画生成设备往往会分别为每个补间都创建一个对应的时间轴。用户设备在播放该动画时,基于每个时间轴,都会生成一个Canvas元素,而针对每个Canvas元素,用户设备都会绘制对应的整张画布,进而导致大量不必要的重绘工作,给用户设备带来较大的性能开销。
针对上述问题,本申请提供一种动画生成方法,可以有效降低设备在播放动画时的性能开销。
图1是本申请一示例性实施例示出的一种动画生成方法的流程示意图。
请参考图1,所述动画生成方法可以应用在动画生成设备中,所述动画生成设备可以包括智能手机、平板电脑、PDA(Personal Digital Assistant,掌上电脑)、PC机等智能终端设备。所述动画生成方法可以理解为所述动画设备中装载的具有动画生成功能的客户端软件执行的处理逻辑,包括有:
步骤101,在接收到动画生成指令后,获取补间的数量。
在本实施例中,在生成动画时,制作人员可以在客户端中插入选定的图片以作为关键帧,用户也可以通过客户端提供的绘图功能自行绘制关键帧,本申请对此不作特殊限制。其中,所述关键帧相当于二维动画中的原画,是指角色或者物体运动或变化中的关键动作所处的那一帧。
在本实施例中,制作人员可以基于客户端提供的关键帧时间轴进行关键帧的插入操作以及补间的设置。请参考图2所示的一种关键帧时间轴,该关键帧时间轴的刻度用于表示关键帧的帧序号,比如:刻度1表示帧序号为1的关键帧,刻度5表示帧序号为5的关键帧等。制作人员可以在所述关键帧时间轴中插入关键帧,比如:制作人员可以在刻度1处插入帧序号为1的关键帧,在刻度15处插入帧序号为15的关键帧等。在插入关键帧之后,用户可以选定用于补间的两个关键帧,可选的,用户可以使用鼠标在所述关键帧时间轴中选定一个帧序号,这个帧序号两侧的关键帧就是本次补间的起始关键帧和终止关键帧。基于所述起始关键帧和所述终止关键帧,客户端可以生成一个补间。
举例来说,请继续参考图2所示的关键帧时间轴,假设制作人员插入三个关键帧,其帧序号分别为1、10以及15。当制作人员选中帧序号5时,客户端可以确定本次补间起始关键帧是帧序号为1的关键帧,终止关键帧是帧序号为10的关键帧。
在本实施例中,基于客户端提供的关键帧时间轴,制作人员基于需要可以设置多个补间。举例来说,制作人员可以点击两次关键帧时间轴以设置两个补间,请参考表1所示的补间信息,其中一个补间的起始关键帧的帧序号为5,终止关键帧的帧序号为8,另一个补间的起始关键帧的帧序号为12,终止关键帧的帧序号为18。
|
起始关键帧的帧序号 |
终止关键帧的帧序号 |
补间1 |
5 |
8 |
补间2 |
12 |
18 |
表1
在本实施例中,所述动画生成指令通常由用户在设置好补间后触发,客户端可以在接收到所述动画生成指令后,获取补间的数量。
步骤102,当所述补间的数量大于等于2时,创建一个或多个时间轴,其中,每个时间轴对应一个或者多个补间,所述时间轴的数量小于所述补间的数量。
基于前述步骤101,在获取到所述补间的数量后,可以先判断所述补间的数量是否大于等于2,当所述补间的数量为1时,可以参照相关技术中的实现方案生成动画。当所述补间的数量大于等于2时,可以创建数量小于所述补间数量的时间轴,其中,每个时间轴对应一个或多个补间。
在本实施例中,创建的时间轴的数量可以由开发人员进行设置。在一个例子中,当所述补间的数量大于等于2时,可以仅创建一个时间轴,这个时间轴对应所有的补间。在另一个例子中,当所述补间的数量大于等于2时,可以创建数量为补间数量一半的时间轴。举例来说,假设所述补间的数量为8,则可以创建4个时间轴,每个时间轴对应两个补间。又假设,所述补间的数量为9,则也可以创建4个时间轴,其中3个时间轴对应两个补间,另一个时间轴对应3个补间,当然,也可以创建5个时间轴,其中4个时间轴对应两个补间,另外一个时间轴对应1个补间。其中,当创建多个时间轴时,可以随机确定各个时间轴对应的补间,也可以按照一定的规则确定各个时间轴对应的补间,比如:按照补间起始帧的帧序号从小到大的顺序依次将各补间分配时间轴等,本申请对此不作特殊限制。
步骤103,基于所述时间轴为对应的补间生成动画。
基于前述步骤102,在创建完毕时间轴后,针对每个时间轴,可以基于所述时间轴为对应的补间生成动画。
在本实施例中,生成的动画本质上来讲是一段Javascript代码,用户设备的浏览器可以运行该Javascript代码以生成供用户观看的动画。在本步骤中,由于创建的时间轴的数量小于制作人员设置的补间的数量,所以生成的Javascript代码中时间轴的数量也小于补间的数量。用户设备在运行该Javascript代码时,基于该Javascript代码中时间轴的数量创建画布并进行绘制,因此减少了大量不必要的重绘工作。
由以上描述可以看出,本申请在生成动画时,创建数量小于补间数量的时间轴,用户设备在播放该动画时,无需绘制与补间数量相同数量的画布,减少了大量不必要的重绘工作,进而减小了播放复杂动画时用户设备的性能开销。
在一个例子中,当某时间轴对应多个补间时,请参考图3,基于所述时间轴为对应的补间生成动画可以包括以下步骤:
步骤301,判断多个补间中是否存在M级冲突补间组,其中,M为自然数,初始值为缺省的计数初始值。如果存在,则可以执行步骤302。
在本实施例中,当某时间轴对应多个补间时,可以先获取各个补间的补间对象,基于每个补间对象统计对应的补间的数量,当某个补间对象对应的补间的数量大于等于2时,即在该时间轴对应的多个补间中,存在两个或两个以上补间的补间对象相同,则可以判断所述两个或两个以上补间中任一补间与其他补间的补间时间是否相互冲突,如果相互冲突,则可以确定该时间轴对应的多个补间中存在至少M级冲突补间组,该M级冲突补间组中包括所述任一补间与所述其他补间。
表2
举例来说,请参考表2的示例,假设M的初始值为1,时间轴A对应有5个补间,则在本步骤中,判断这5个补间中是否存在1级冲突补间组。具体地,可以先获取各个补间的补间对象,然后针对每个补间对象,可以统计对应补间的数量,比如:补间对象元件A对应有3个补间,补间对象元件B对应有2个补间。
在本实施例中,针对补间对象元件A对应的3个补间,判断这3个补间中任一补间与其他补间的补间时间是否相互冲突。可选的,针对补间1,可以判断补间1与补间2的补间时间是否相互冲突,判断补间1与补间4的补间时间是否相互冲突。其中,所述补间时间可以用该补间起始关键帧的帧序号与终止关键帧的帧序号组成的区间表示,比如:补间1的补间时间为[5,8],补间2的补间时间为[6,11]。在判断补间1与补间2的补间时间是否相互冲突时,可以判断补间1与补间2的补间时间是否有交集。[5,8]与[6,11]有交集,则可以确定补间1与补间2的补间时间相互冲突,进而可以确定补间对象元件A对应的补间中存在1级冲突补间组,该1级冲突补间组中包括补间1和补间2。为便于描述,可以将1级冲突补间组中的补间称为1级冲突补间。
在本实施例中,参照上述方案还可以确定继续判断补间1与补间4的补间时间不相互冲突,补间2与补间4的补间时间也不相互冲突。进而可以确定补间对象元件A对应的3个补间中,存在一个1级冲突补间组,该1级冲突补间组包括:1级冲突补间补间1以及1级冲突补间补间2。
此外,针对补间对象元件B对应的2个补间:补间3和补间5,可以确定补间3与补间5的补间时间不相互冲突,进而可以确定补间对象元件B对应的2个补间中不存在1级冲突补间组。
在本实施例中,没有包含在1级冲突补间组中的补间为非冲突补间,比如:补间3、补间4以及补间5为时间轴A对应的非冲突补间。
步骤302,将所述M级冲突补间组中补间终止时间最晚的M级冲突补间更新为M+1级冲突补间,并判断所述M+1级冲突补间中是否存在M+1级冲突补间组,直至M+K级冲突补间中不存在M+K级冲突补间组。
基于前述步骤301的判断结果,当该时间轴对应的多个补间中存在M级冲突补间组时,针对每个M级冲突补间组,可以将该冲突补间组中补间终止时间最晚的M级冲突补间更新为M+1级冲突补间。这是因为,通常而言,终止关键帧最晚的帧图像往往最能表明制作人员想要达成的效果,因此针对同一补间对象出现补间冲突组时,采用终止关键帧最晚的补间。具体地,可以将所述M级冲突补间组中补间终止关键帧的帧序号最大的M级冲突补间更新为M+1级冲突补间。
仍以表3所示的补间信息为例,针对1级冲突补间组,可以将该1级冲突补间组中补间终止关键帧的帧序号最大的1级冲突补间更新为2级冲突补间。具体地,补间1的终止关键帧的帧序号为8,补间2的终止关键帧的帧序号为11,则可以将补间2更新为2级冲突补间。由此,时间轴A对应有一个2级冲突补间:补间2,不存在2级冲突补间组,进而可以继续执行步骤303。
步骤303,基于所述时间轴为对应的非冲突补间以及所述M+K级补间生成动画。
在本实施例中,当M+K级冲突补间中不存在M+K级冲突补间组时,可以基于时间轴为对应的非冲突补间以及所述M+K级补间生成动画。仍以表3为例,在本步骤中,基于时间轴A,可以为补间2、补间3、补间4以及补间5生成动画。
由以上描述可以看出,采用本申请提供的技术方案,当某时间轴对应多个补间时,针对补间对象相同,且补间时间冲突的冲突补间,可以选择补间终止时间最晚的补间进行动画的生成,从而有效避免生成针对同一补间对象的冲突动画,提升用户的使用体验。
在本申请另一个例子中,基于表3所示的补间信息,假设时间轴A还对应有补间6,其补间对象为元件A,起始关键帧的帧序号为10,终止关键帧的帧序号为12,则其补间时间为[10,12]。在前述步骤301中,针对补间对象元件A对应的4个补间:补间1、补间2、补间4以及补间6,可以确定这4个补间中存在两个1级冲突补间组,1级冲突补间组1包括:补间1和补间2,1级冲突补间组2包括:补间2和补间6。
在前述步骤302中,可以将1级冲突补间组1中补间终止时间最晚的补间2更新为2级冲突补间,将1级冲突补间组2中补间终止时间最晚的补间6更新为2级冲突补间。然后,可以参照前述步骤301的实现方法判断补间2和补间6中是否仍存在冲突补间组(可以称为2级冲突补间组)。由于补间2的补间时间为[6,11],与补间6的补间时间[10,12]有交集,因而可以确定存在2级冲突补间组,该2级冲突补间组中包括:补间2和补间6。而补间6的补间终止时间最晚,进而可以将补间6更新为3级冲突补间。此时,补间对象元件A对应的4个补间中已不存在3级冲突补间组,可以继续进行动画的生成。在前述步骤303中,基于时间轴A,可以为补间3、补间4、补间5以及补间6生成动画,本申请在此不再一一赘述。
与前述动画生成方法的实施例相对应,本申请还提供了动画生成装置的实施例。
本申请动画生成装置的实施例可以应用在动画生成设备上。装置实施例可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,作为一个逻辑意义上的装置,是通过其所在动画生成设备的处理器将非易失性存储器中对应的计算机程序指令读取到内存中运行形成的。从硬件层面而言,如图4所示,为本申请动画生成装置所在动画生成设备的一种硬件结构图,除了图4所示的处理器、内存、网络接口、以及非易失性存储器之外,实施例中装置所在的动画生成设备通常根据该动画生成设备的实际功能,还可以包括其他硬件,对此不再赘述。
图5是本申请一示例性实施例示出的一种动画生成装置的结构框图。
请参考图5,所述动画生成装置400可以应用在前述图4所示的动画生成设备中,包括有:数量获取单元401、时间轴创建单元402以及动画生成单元403。所述动画生成单元403还可以包括:冲突判断子单元4031、更新子单元4032以及动画生成子单元4033。
其中,所述数量获取单元401,在接收到动画生成指令后,获取补间的数量;
所述时间轴创建单元402,当所述补间的数量大于等于2时,创建一个或多个时间轴,其中,每个时间轴对应一个或者多个补间,所述时间轴的数量小于所述补间的数量;
所述动画生成单元403,基于所述时间轴为对应的补间生成动画。
所述冲突判断子单元4031,当所述时间轴对应多个补间时,判断所述多个补间中是否存在M级冲突补间组,所述M级冲突补间组中的M级冲突补间的补间对象均相同,且补间时间相互冲突,其中M为自然数,初始值为缺省的计数初始值;
所述更新子单元4032,当存在所述M级冲突补间组时,将所述M级冲突补间组中补间结束时间最晚的M级冲突补间更新为M+1级冲突补间,并判断所述M+1级补间中是否存在M+1级冲突补间组,直至M+K级冲突补间中不存在M+K级冲突补间组,其中K为大于等于0的自然数;
所述动画生成子单元4033,基于所述时间轴为对应的非冲突补间以及所述M+K级补间生成动画。
可选的,所述冲突判断子单元4031,获取每个补间的补间对象,在存在两个或两个以上补间的补间对象相同时,判断所述两个或两个以上补间中任一补间与其他补间的补间时间是否相互冲突,如果所述任一补间与其他补间的补间时间相互冲突,则确定所述多个补间中存在至少一个M级冲突补间组,该M级冲突补间组中包括所述任一补间与所述其他补间。
可选的,所述冲突判断子单元4031,具体判断所述任一补间与所述其他补间的起始关键帧与终止关键帧组成的补间时间是否有交集,如果有交集,则确定所述任一补间与所述其他补间的补间时间相互冲突。
可选的,所述更新子单元4032,将所述M级冲突补间组中补间结束关键帧的帧序号最大的M级冲突补间更新为M+1级冲突补间。
上述装置中各个单元的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。
对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本申请方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
以上所述仅为本申请的较佳实施例而已,并不用以限制本申请,凡在本申请的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请保护的范围之内。