腾讯科技(深圳)有限公司 (中国广东省深圳市福田区振兴路赛格科技园2栋东4楼, Guangdong 4, 518044, CN)
| 权利要求书 1、 一种动画制作方法, 其特征在于, 包括: 确定动画单元的关键帧; 所述动画单元在播放过程中出现非线性变 化时所在的帧为所述动画单元的关键帧; 设置所述动画单元的关键帧数据; 所述关键帧数据中记录该动画单 元在所述关键帧的参数。 2、 如权利要求 1所述的动画制作方法, 其特征在于, 所述动画单元 在所述动画单元播放过程中, 根据该动画单元的关键帧数据实时计 算所述过渡帧数据; 动画单元的过渡帧数据中记录该动画单元在所述过 渡帧的参数。 3、 如权利要求 1或 2所述的动画制作方法, 其特征在于, 所述动画 单元包括图元和\或骨骼; 所述关键帧的参数包括: 所述动画单元在所述关键帧的水平位置参 数、 垂直位置参数、 旋转角度参数、 缩放比例参数; 所述过渡帧的参数包括: 所述动画单元在所述过渡帧的水平位置参 数、 垂直位置参数、 旋转角度参数、 缩放比例参数。 4、 一种动画播放方法, 其特征在于, 包括: 在当前帧遍历每个动画单元; 获取所述动画单元在所述当前帧的关键帧数据; 若所述动画单元在 所述当前帧不存在关键帧数据, 则根据所述动画单元在关键帧的关键帧 数据, 获取所述动画单元在所述当前帧的过渡帧数据; 所述动画单元在 播放过程中出现非线性变化时所在的帧为所述动画单元的关键帧; 所述 关键帧数据中记录该动画单元在所述关键帧的参数; 所述动画单元的过 渡帧数据中记录该动画单元在所述过渡帧的参数; 在当前帧根据所述每个动画单元的关键帧数据或过渡帧数据, 更新 所述每个动画单元。 5、 如权利要求 4所述的动画播放方法, 其特征在于, 所述关键帧的 参数在动画制作过程中进行设置; 所述关键帧的参数包括: 所述动画单元在所述关键帧的水平位置参 数、 垂直位置参数、 旋转角度参数、 缩放比例参数; 所述过渡帧的参数包括: 所述动画单元在所述过渡帧的水平位置参 数、 垂直位置参数、 旋转角度参数、 缩放比例参数。 6、 如权利要求 5所述的动画播放方法, 其特征在于, 所述动画单元 包括图元和 \或骨骼; 所述在当前帧遍历每个动画单元包括: 当所述动画单元为图元时, 反向遍历图元的队列; 当所述动画单元为骨骼时,依次遍历骨骼的队列。 7、 如权利要求 6所述的动画播放方法, 其特征在于, 当动画单元为 骨骼和与所述骨骼绑定的图元时, 当在当前帧更新所述骨骼后, 保存所 述骨骼的关键帧数据或过渡帧数据; 当在当前帧更新与所述骨骼绑定的图元后, 再根据所述骨骼的关键 帧数据或过渡帧数据, 更新与所述骨骼绑定的图元。 8、 如权利要求 4至 7中任一项所述的动画播放方法, 其特征在于, 所述在当前帧遍历动画的所有动画单元之后, 还包括计算在当前帧的包 围盒。 9、 如权利要求 8所述的动画播放方法, 其特征在于, 所述计算在当 前帧的包围盒包括: 预置包围盒的左上角顶点和右下角顶点的初始化坐标, 其中所述左 上角顶点具有最小 X轴坐标和最小 Y轴坐标,所述左上角顶点的初始化 坐标为 (正无穷大, 正无穷大), 所述右下角坐标具有最大 X轴坐标和 最大 Y轴坐标,所述右下角顶点的初始化坐标为(负无穷大,负无穷大); 在当前帧遍历所述每个动画单元后, 获取所述每个动画单元的顶点 数据; 以所述当前帧中各动画单元中最小 X轴坐标、最小 Y轴坐标作为所 述左上角顶点的坐标; 以当前最大 X轴坐标、最大 Y轴坐标作为所述右 下角顶点的坐标; 根据所述左上角顶点的坐标和所述右下角顶点的坐标, 生成所述动 画在当前帧的包围盒。 10、 一种动画制作装置, 其特征在于, 所述装置包括: 动画单元创建模块, 用于创建动画单元; 动画数据设置模块, 用于设置动画单元的关键帧数据; 动画单元在 播放过程中出现非线性变化时所在的帧为所述动画单元的关键帧; 所述 关键帧数据中记录所述动画单元在所述关键帧的参数。 11、 如权利要求 10所述的动画制作装置, 其特征在于, 所述动画单 动画单元的过渡帧数据中记录该动画单元在所述过渡帧的参数; 所 述过渡帧数据在所述动画单元播放过程中, 根据该动画单元的关键帧数 据实时计算得出。 12、 如权利要求 11所述的动画制作装置, 其特征在于, 所述动画单 元包括图元和 /或骨骼; 所述关键帧的参数包括: 所述动画单元在所述关键帧的水平位置参 数、 垂直位置参数、 旋转角度参数、 缩放比例参数; 所述过渡帧的参数包括: 所述动画单元在所述过渡帧的水平位置参 数、 垂直位置参数、 旋转角度参数、 缩放比例参数。 13、 一种动画播放装置, 其特征在于, 所述装置包括: 动画播放模块, 用于在当前帧遍历每个动画单元, 根据所述每个动 画单元在所述当前帧的关键帧数据或过渡帧数据, 更新所述每个动画单 元; 所述动画单元在播放过程中出现非线性变化时所在的帧为所述动画 单元的关键帧; 所述关键帧数据中记录该动画单元在所述关键帧的参 数; 过渡帧获取模块, 用于当所述动画单元在所述当前帧不存在关键帧 数据时, 根据所述动画单元在关键帧的关键帧数据, 计算所述动画单元 在所述当前帧的过渡帧数据, 并将所述过渡帧数据发送给所述动画播放 模块; 所述动画单元的过渡帧数据中记录该动画单元在所述过渡帧的参 数。 14、 如权利要求 13所述的动画播放装置, 其特征在于, 所述动画播 放模块包括: 动画遍历单元, 用于在所述动画单元为图元时, 在所述当前帧反向 遍历图元的队列; 在所述动画单元为骨骼时, 在所述当前帧依次遍历骨 骼的队列; 帧数据获取单元, 用于获取在所述当前帧所述每个动画单元的关键 帧数据; 当所述动画单元在所述当前帧不存在关键帧数据时, 获取所述 过渡帧获取模块计算的所述动画单元在所述当前帧的过渡帧数据; 动画播放单元, 用于根据所述动画单元在当前帧的关键帧数据或过 渡帧数据更新所述动画单元。 15、 如权利要求 14所述的动画播放装置, 其特征在于, 所述动画播 放模块还包括: 临时存储单元, 用于当所述动画单元为骨骼和与所述骨骼绑定的图 元时, 在所述动画播放单元更新所述骨 后, 保存所述骨骼的关键帧数 据或过渡帧数据; 所述动画播放单元还用于在更新与所述骨骼绑定的图元后, 再根据 所述临时存储单元中存储的所述骨骼的关键帧数据或过渡帧数据再次 更新与所述骨骼绑定的图元。 16、 如权利要求 13至 15中任一项所述的动画播放装置, 其特征在 于, 所述动画播放装置还包括: 包围盒计算模块, 用于在动画播放模块更新所述每个动画单元后, 根据所述每个动画单元的关键帧数据或过渡帧数据, 计算在当前帧的包 围盒。 17、 如权利要求 16所述的动画播放装置, 其特征在于, 所述包围盒 计算模块包括: 坐标初始化单元, 用于预置包围盒的左上角顶点和右下角顶点的初 始化坐标,其中所述左上角顶点具有最小 X轴坐标和最小 Y轴坐标,所 述左上角顶点的初始化坐标为 (为正无穷大, 正无穷大), 所述右下角 坐标具有最大 X轴坐标和最大 Y轴坐标,所述右下角顶点的初始化坐标 为 (负无穷大, 负无穷大); 顶点数据获取单元, 用于在所述动画播放模块在所述当前帧更新所 述每个动画单元时, 获取所述每个动画单元的顶点数据; 顶点计算单元, 用于将所述当前帧中各动画单元中最小 X轴坐标、 最小 Y轴坐标作为所述左上角顶点的坐标; 以当前最大 X轴坐标、最大 Y轴坐标作为所述右下角顶点的坐标; 包围盒生成单元, 用于^^据所述左上角顶点的坐标和所述右下角顶 点的坐标, 生成所述动画在当前帧的包围盒。 |
技术领域
本发明涉及电脑动画技术领域, 尤其涉及一种动画制作方法、 装置 和动画播放方法、 装置。 发明背景
随着动画产业的快速发展, 动画制作的产量迅猛上升, 并且出现了 大量的动画制作工具。 在普遍使用的 2D动画技术中, 虽然动画制作工 具和动画播放工具的种类繁多, 但都采用了基本相同的动画制作和动画 播放的原理。 具体地, 在制作动画时, 将一个或多个编辑好的动画图片 编入一个文件, 并设置好每个动画图片之间的播放时间间隔; 在播放动 画时, 以每个动画图片作为单独的一帧进行播放, 从而达到 2D动画的 效果。
发明人在实施本发明的过程中发现, 现有的动画制作技术存在明显 的缺点:
首先, 现有的动画制作工具在制作动画时, 每一帧对应一个完整的 动画图片, 当多个帧的动画图片中包括相同背景时, 在编辑每一帧的动 画图片时, 都必须重复设置该背景的信息, 造成该背景信息的浪费; 其 次, 现有的动画制作工具不支持对动画包围盒的计 算, 不利于动画的后 期合成制作。 发明内容
本发明实施例提供一种动画制作方法、装置和 动画播放方法、装置, 可以提高对动画图片的利用率, 减少动画制作过程中的工作量, 同时支 持对动画包围盒的计算, 便于动画的后期制作。
为达到上述技术效果, 本发明实施例提供的动画制作方法包括: 确定动画单元的关键帧; 所述动画单元在播放过程中出现非线性变 化时所在的帧为所述动画单元的关键帧;
设置所述动画单元的关键帧数据; 所述关键帧数据中记录该动画单 元在所述关键帧的参数。
本发明实施例提供的动画播放方法包括:
在当前帧遍历每个动画单元;
获取所述动画单元在所述当前帧的关键帧数据 ; 若所述动画单元在 所述当前帧不存在关键帧数据, 则根据所述动画单元在关键帧的关键帧 数据, 获取所述动画单元在所述当前帧的过渡帧数据 ; 所述动画单元在 关键帧数据中记录该动画单元在所述关键帧的 参数; 所述动画单元的过 渡帧数据中记录该动画单元在所述过渡帧的参 数;
在当前帧根据所述每个动画单元的关键帧数据 或过渡帧数据, 更新 所述每个动画单元。
本发明实施例提供的动画制作装置包括:
动画单元创建模块, 用于创建动画单元;
动画数据设置模块, 用于设置动画单元的关键帧数据; 动画单元在 播放过程中出现非线性变化时所在的帧为所述 动画单元的关键帧; 所述 关键帧数据中记录所述动画单元在所述关键帧 的参数。
本发明实施例提供的动画播放装置包括:
动画播放模块, 用于在当前帧遍历每个动画单元, 根据所述每个动 画单元在所述当前帧的关键帧数据或过渡帧数 据, 更新所述每个动画单 元; 所述动画单元在播放过程中出现非线性变化时 所在的帧为所述动画 单元的关键帧; 所述关键帧数据中记录该动画单元在所述关键 帧的参 数;
过渡帧获取模块, 用于当所述动画单元在所述当前帧不存在关键 帧 数据时, 根据所述动画单元在关键帧的关键帧数据, 计算所述动画单元 在所述当前帧的过渡帧数据, 并将所述过渡帧数据发送给所述动画播放 模块; 所述动画单元的过渡帧数据中记录该动画单元 在所述过渡帧的参 数。
根据本发明实施例提供的动画制作方法、 装置和动画播放方法、 装 置, 一个动画分为多个动画单元, 在制作每一帧动画图片时, 用户只需 要针对出现非线性变化的动画单元进行关键帧 数据的设置, 在播放动画 过程中, 根据关键帧数据自动生成过渡帧数据, 并根据关键帧数据或过 渡帧数据播放每一帧动画图片。 这样一来, 既减少动画制作过程中的工 作量, 又使动画帧之间衔接更加流畅、 动作更加自然。 同时, 本发明实 施例提供的动画制作方法、 装置和动画播放方法、 装置支持对动画当前 帧的包围盒计算, 便于动画的后期合成制作。 附图简要说明
为了更清楚地说明本发明实施例或现有技术中 的技术方案, 下面将 对实施例或现有技术描述中所需要使用的附图 作简单地介绍, 显而易见 地, 下面描述中的附图仅仅是本发明的一些实施例 , 对于本领域普通技 术人员来讲, 在不付出创造性劳动性的前提下, 还可以根据这些附图获 得其他的附图。
图 1为本发明实施例提供的动画制作方法实施例 程示意图; 图 2为本发明实施例提供的动画播放方法实施例 程示意图; 图 3为本发明实施例提供的动画制作及播放方法 一实施例流程示 意图;
图 4为本发明实施例提供的动画制作及播放方法 二实施例流程示 意图;
图 5为本发明实施例提供的动画制作及播放方法 元变换示意图; 图 6为本发明实施例提供的动画制作及播放方法 画播放示意图; 图 7为本发明实施例提供的动画包围盒计算流程 意图;
图 8为本发明实施例提供的动画制作装置实施例 构示意图; 图 9为本发明实施例提供的动画播放装置第一实 例结构示意图; 图 10 为本发明实施例提供的动画制作装置及播放装 置施例结构示 意图;
图 11为本发明实施例提供的动画播放装置动画播 示意图; 图 12为本发明实施例提供的动画播放装置第二实 例结构示意图。 实施本发明的方式
本发明实施例提供一种动画制作方法、装置和 动画播放方法、装置, 可以提高动画图片的利用率, 减小动画制作过程中的工作量。 在本发明 各实施例中, 动画单元可以是图元、 或骨骼、 或两者的结合。 其中, 图 元是可编辑的最小图形单位, 是用于操作和组织画面的最基本的元素。 一幅画面由一个或多个图元组成。 图元是一组简单的、 通用的几何图形 或字符。 骨骼在动画中一般通过改变其朝向和位置来生 成动画, 动画中 通常由若干互相连接的骨骼构成骨架。 在应用本发明实施例时, 由于对 骨 的操作更为便捷, 可以将图元和骨骼绑定, 通过依次更新骨骼和与 该骨骼绑定的图元, 筒化动画制作过程。
参见图 1 , 为本发明实施例提供的动画制作方法实施例流 程示意图。 如图 1所示, 该方法包括以下步骤。 在步骤 100, 创建动画单元, 并确定动画单元的关键帧。 在播放过 程中, 动画单元发生非线性变化时所在的帧为该动画 单元的关键帧。 另 外, 在播放过程中, 动画单元进行线性变化时所在的帧为该动画单 元的 过渡帧。
在本发明实施例中, 动画单元进行线性变化指该动画单元进行匀速 的变化, 如动画单元运动的距离, 旋转的角度等随时间均匀变化。
在步骤 101 , 设置该动画单元的关键帧数据; 关键帧数据中记录该 动画单元在关键帧的参数。 同样的, 动画单元的过渡帧数据中记录该动 画单元在过渡帧的参数。 需要注意的是: 过渡帧数据并非在动画制作过 程中设置, 而是在动画播放过程中, 根据该动画单元的关键帧数据实时 计算得出。
更为具体的, 关键帧的参数包括动画单元在该关键帧的水平 位置参 数、 垂直位置参数、 旋转角度参数、 缩放比例等参数。 同样地, 过渡帧 的参数包括动画单元在该过渡帧的水平位置参 数、 垂直位置参数、 旋转 角度参数、 缩放比例等参数。
根据本发明实施例提供的动画制作方法, 将一个动画分为多个动画 单元, 在制作每一帧动画图片时, 用户只需要针对出现非线性变化的动 画单元进行关键帧数据的设置, 在播放动画过程中, 根据关键帧数据自 动生成过渡帧数据, 使动画帧之间衔接流畅、 自然, 减少动画制作过程 中的工作量。
参见图 2, 为本发明实施例提供的动画播放方法实施例流 程示意图。 如图 2所示, 该方法包括如下步骤。
在步骤 200, 在当前帧遍历所有动画单元。 更为具体的, 当动画单 元为图元时, 反向遍历图元的队列, 当动画单元为骨骼时, 依次遍历骨 骼的队列。 在步骤 201 , 判断在当前帧是否存在各动画单元的关键帧数 据, 若 判断在当前帧存在该动画单元的关键帧数据, 则执行步骤 202; 若判断 在当前帧不存在该动画单元的关键帧数据, 则执行步骤 203。
在步骤 202, 获取该动画单元在当前帧的关键帧数据。
在步骤 203, 根据该动画单元在关键帧的关键帧数据, 计算该动画 单元在当前帧的过渡帧数据。 具体的, 根据该动画单元在关键帧的关键 帧数据, 计算该动画单元在当前帧的过渡帧数据的计算 方式包括: 根据 当前帧与关键帧之间间隔的帧数, 以及关键帧数据之间的线性插值、 或 关键帧数据的平均值、 或其它包含关键帧数据的数学函数计算该动画 单 元在当前帧的过渡帧数据。 如果在当前帧的后续帧中没有该动画单元的 关键帧, 则该动画单元的过渡帧为该动画单元上一个关 键帧。
在步骤 204, 根据各动画单元的关键帧数据或过渡帧数据更 新各动 画单元。 具体地, 根据各动画单元的关键帧数据或过渡帧数据确 定每个 动画单元的变化, 进而更新各动画单元, 从而播放当前帧。
根据本发明实施例提供的动画播放方法, 在播放过程中可以实时的 根据动画单元的关键帧数据计算过渡帧数据, 使动画帧之间衔接更加流 畅、 动作更加自然。 相应地, 在动画制作过程中, 只需要针对出现非线 性变化的动画单元进行关键帧数据的设置, 减少动画制作的工作量。
为了更好的理解本发明实施例提供的动画制作 方法、动画播放方法, 下面将二者结合在一起进行描述。
参见图 3 , 为本发明实施例提供的动画制作及播放方法第 一实施例 流程示意图。在本实施例中,将详细的描述动 画制作及播放方法的流程。 如图 3所示, 该方法包括以下步骤。
在步骤 300, 创建动画单元, 并设置动画单元的关键帧数据。 在本 发明实施例中, 动画单元可以是图元或骨骼。 更为具体的, 一个动画由 一个或多个动画单元组成; 在每一帧图片中, 用户只需要针对出现非线 形变化的动画单元进行关键帧数据的设置。 关键帧数据中记录该动画单 元的在该关键帧的参数, 具体包括: 该动画单元的水平位置参数、 垂直 位置参数、 旋转角度参数、 缩放比例等参数。 本步骤只在制作动画的流 程中执行, 播放动画的流程不需要执行本步骤。
本实施例以图元为例, 对动画单元的关键帧设置进行说明。 现假设 需要完成一个包含 60 帧的动画: 一指针绕表盘一周。 在本例中, 动画 由 2个图元组成: 表盘图元, 以下简称为 h图元、 指针图元, 以下筒称 为 i图元。预置好指针与表盘的初始位置后, 生成 h图元和 i图元在第 1 帧的关键帧数据。 由于在动画播放过程中, 只有指针存在变化, 表盘是 不动的, 所以在设置各图元其后的关键帧数据时, 只需设置 i图元的关 键帧数据即可。 由于无需为 h图元设置其它关键帧数据, 因此动画的制 作的针对性更强, 效率得到提高。
因为在动画的播放过程中, 指针匀速的绕表盘一周,故 i图元的第 1 帧和第 60帧为其关键帧。 在制作该动画时, 首先设置好各图元的位置, 该动画的第 1帧如图 5a所示, 相应地, 生成 i图元在第一帧的关键帧数 据, 设置表盘的中心为 i图元的中心, i图元在第一帧的角度为 0度, i 图元在第 60帧的旋转角度为 360度, 如图 5b所示。
需要说明的是, 当动画单元为图元时, 该图元的变换可以包括: 以 任一点为中心对进行旋转、 平移、 缩放、 斜切 (shearing ) 变换的等。 当动画单元为骨骼时, 该图元的变换可以包括: 以骨骼的起始点为中心 对骨骼进行旋转、 平移、 缩放变换等信息。
在步骤 301 , 开始播放动画, 在每一帧都遍历所有动画单元, 判断 在当前帧是否存在各个动画单元的关键帧数据 ; 若在当前帧存在该动画 单元的关键帧数据, 则执行步骤 302; 若在当前帧不存在该动画单元的 关键帧数据, 则执行步骤 303。
优选的, 当动画单元为骨骼时, 依次遍历骨骼队列; 当动画单元为 图元时, 反向遍历图元队列。 因为当动画单元为图元时, 各图元之间可 能存在遮挡关系, 而在动画制作过程中, 最底层被遮挡的图元一般排在 图元的队列末端, 所以反向遍历图元队列可以保证动画具有正确 的层次 关系。
在步骤 302, 获取该动画单元在当前帧的关键帧数据。
在步骤 303 , 根据该动画单元在关键帧的关键帧数据, 计算该动画 单元在当前帧的过渡帧数据。
更为具体的, 根据该动画单元在关键帧的关键帧数据, 计算该动画 单元在当前帧的过渡帧数据的计算方式包括: 根据当前帧与关键帧之间 间隔的帧数, 以及关键帧数据之间的线性插值、或关键帧数 据的平均值、 或其它包含关键帧数据的数学函数计算该动画 单元在当前帧的过渡帧 数据。 在实施例中, 以通过计算关键帧数据的线性插值获取当前帧 的过 渡帧数据为例, 但不能以此限定本发明的保护范围。
更进一步的, 因为动画单元的关键帧与关键帧之间都是线性 变化的 关系, 所以对于在当前帧没有关键帧数据的动画单元 , 只要获取其前后 关键帧的关键帧数据, 及中间间隔的帧数, 就可以通过计算线性插值, 得出该动画单元在当前帧的过渡帧数据。
在本实施例的举例中,指针匀速的绕表盘一周 , i图元在第 1帧和第 60帧具有关键帧数据。 根据 i图元在第 1帧和第 60帧的关键帧数据, 以及间隔的帧数,可以通过计算关键帧数据的 线性插值,得出在第 2帧, i图元的过渡帧数据是相对 i图元在第 1帧的位置, 旋转角度为 6度; i 图元在第 3帧的过渡帧数据是相对 i图元在第 1帧的位置, 其旋转角度 为 12度; 其余各帧以此类推。 另外, 由于 h图元的关键帧只有第一帧, 在后续帧中没有 h图元的 关键帧, 因此, h图元在当前帧的过渡帧为 h图元的第一帧, 即上一个 关键帧。
在步骤 304, 根据各动画单元的关键帧数据或过渡帧数据更 新各动 画单元并显示各动画单元。 对所有动画单元的更新完成后, 形成动画在 当前帧的完整图片。 在动画的每一帧都执行步骤 301至步骤 304, 直至 动画播放结束。
在本实施例的举例中, 指针匀速的绕表盘一周的完整动画如图 6所 示。
实施本发明实施例提供的动画制作及播放方法 , 只需要设置该动画 在第一帧的图片, 当该动画存在后续变化时, 只需要为出现非线性变化 的帧设置关键帧数据。 在播放该动画的过程中, 自动生成过渡帧数据, 使动画的帧之间衔接更加流畅。 同时, 本发明实施例提供的动画制作方 法可以将一个动画分为多个并行的动画单元, 在每一帧中, 只需要针对 出现非线性变化的动画单元进行关键帧数据的 设置, 无需为其它的动画 单元设置关键帧数据,增强动画制作的针对性 ,减少动画制作的工作量。
参见图 4, 为本发明实施例提供的动画制作及播放方法第 二实施例 流程示意图, 在本发明实施例中, 动画由骨骼和与该骨骼绑定的图元共 同组成, 播放该动画的流程如图 4所示。
在步骤 400, 完成骨骼和图元的关键帧数据设置后, 开始播放动画。 在步骤 401 , 在每一帧首先遍历所有骨骼, 判断在当前帧是否存在 各骨骼的关键帧数据; 若当前帧存在该骨骼的关键帧数据, 则执行步驟 402; 若当前帧不存在该骨骼的关键帧数据, 则执行步骤 403。
在步骤 402, 获取在当前帧各骨骼的关键帧数据。
在步骤 403 , 根据骨骼在关键帧的关键帧数据计算线性插值 , 得出 该骨骼在当前帧的过渡帧数据。 当然, 本实施例中也可以通过其它的数 学函数计算骨骼在当前帧的过渡帧数据, 本发明以计算线性插值的方式 获取过渡帧数据为例。
在步骤 404, 根据各骨骼的关键帧数据或过渡帧数据更新各 骨骼。 在本发明实施例中, 骨骼可以包括父骨骼和子骨骼。 一个父骨骼可以连 接多个子骨骼, 形成骨架。 父骨骼的变化将带动与之连接的子骨骼的变 化, 因此子骨骼根据父骨骼的变换进行相应的变换 。
在步骤 405 , 保存各骨骼在当前帧的关键帧数据或过渡帧数 据。 在步骤 406, 在当前帧遍历所有图元, 判断在当前帧是否存在各图 元的关键帧数据; 若当前帧存在该图元的关键帧数据, 则执行步骤 407; 若当前帧不存在该图元的关键帧数据, 则执行步骤 408。
在步骤 407, 获取该图元在当前帧的关键帧数据。
在步骤 408, 根据该图元在其它关键帧的关键帧数据计算线 性插值, 得出该图元在当前帧的过渡帧数据。
在步骤 4 09, 根据各图元的关键帧数据或过渡帧数据更新各 图元。 在步骤 410, 获取保存的各骨骼在当前帧的关键帧数据或过 渡帧数 据。
在步骤 411 , 根据与各图元绑定的骨骼在当前帧的关键帧数 据或过 渡帧数据, 再次更新各图元。
实施本发明实施例提供的动画制作及播放方法 ,将图元与骨骼绑定, 且骨骼的变化将带动图元的变化,使动画的制 作更加方便,针对性更强, 易于实现动画过程中的各种复杂的变换, 且效果更加流畅自然。 同时, 本发明实施例提供的动画制作及播放方法提高 了对动画单元及关键帧 数据的利用率, 进一步减少动画制作过程中的工作量。
参见图 7, 为本发明实施例提供的动画包围盒计算流程示 意图。 动 画的包围盒是检测动画的边界、 碰撞等问题的关键, 精确的碰撞检测对 提高动画的真实性、 增强虚拟环境的沉浸感起着至关重要的作用。 本发 明实施例提供的动画播放方法在完成遍历更新 动画单元后, 还支持对该 动画当前帧的包围盒计算。 其流程如图 7所示。
在步骤 700, 预置该动画包围盒四个顶点的初始化坐标。 更为具体 的,预置包围盒四个顶点的最小 X轴坐标和最小 Y轴为正无穷大、最大 X轴坐标和最大 Y轴坐标为负无穷大。
更进一步的, 在动画制作中, 一般定义图片的左上角为 X轴和 Y轴 坐标的起始坐标。 在本发明实施例中, 预置包围盒左上角的坐标为 ( +
00 , + 00 ), 右上角的坐标为( - 00 , + 00 ), 左下角的坐标为( + 00 , - 00 ) , 右下角的坐标为 ( -∞, -∞)。 通过上述设置, 在后续步骤中遍历动画 单元时, 动画单元的左上角坐标必然小于预置的包围盒 左上角坐标, 从 而利于完成对包围盒顶点坐标的初次更新替换 , 包围盒其它三个顶点的 坐标预置方式同理。
另外, 由于 2D动画的包围盒是四边形的, 只要确定该包围盒的左 上角坐标和右下角坐标, 就可以确定该包围盒。 因此, 在本步骤中, 可 以只预设包围盒左上角的坐标为 ( + 00 , +∞), 右下角的坐标为 ( - GO ,
— O )。
在步骤 701 , 遍历当前帧的所有动画单元, 根据各动画单元在当前 帧的关键帧数据或过渡帧数据, 更新各动画单元。
在更新各动画单元后, 获取每个动画单元的顶点数据。
在步骤 702 , 在各动画单元完成更新后, 以当前帧中各动画单元中 的最小 X轴坐标、 最小 Y轴坐标作为包围盒的最小 X轴坐标、 最小 Y 轴坐标; 以当前帧中各动画单元中的最大 X轴坐标、最大 Y轴坐标作为 包围盒的最大 X轴坐标、 最大 Y轴坐标。 更为具体的, 在各动画单元完成更新后, 将当前包围盒的左上角顶 点和右下角顶点的 X轴坐标和 Y轴坐标分别与各动画单元在当前帧的左 上角顶点和右下角顶点的 X轴坐标和 Y轴坐标进行比较。
如果当前包围盒的左上角顶点的 X轴坐标大于某个动画单元在当前 帧的左上角顶点的 X轴坐标,则用该动画单元在当前帧的左上角 点的 X轴坐标替换当前包围盒的左上角顶点的 X轴坐标, 类似地, 如果当前 包围盒的左上角顶点的 Y 轴坐标大于某个动画单元在当前帧的左上角 顶点的 Y轴坐标,则用该动画单元在当前帧的左上角 点的 Y轴坐标替 换当前包围盒的左上角顶点的 Y轴坐标。
如果当前包围盒的右下角顶点的 X轴坐标小于某个动画单元在当前 帧的右下角顶点的 X轴坐标,则用该动画单元在当前帧的右下角 点的 X轴坐标替换当前包围盒的右下角顶点的 X轴坐标, 类似地, 如果当前 包围盒的右下角顶点的 Y 轴坐标小于某个动画单元在当前帧的右下角 顶点的 Y轴坐标,则用该动画单元在当前帧的右下角 点的 Y轴坐标替 换当前包围盒的右下角顶点的 Y轴坐标。
当与所有动画单元比较后, 包围盒的四个顶点坐标分别为: 左上角 的坐标(最小 X轴坐标, 最小 Y轴坐标), 右上角的坐标(最大 X轴坐 标, 最小 Y轴坐标), 左下角的坐标(最小 X轴坐标, 最大 Y轴坐标), 右下角的坐标 (最大 X轴坐标, 最大 Y轴坐标)。
在步骤 703 , 根据步骤 702 中最终确定的包围盒四个顶点坐标, 生 成该动画在当前帧的包围盒。
实施本发明实施例提供的动画包围盒计算方法 , 可以实时的计算得 出的动画在当前帧的包围盒, 从而使包围盒的面积尽可能小, 其边界与 动画尽可能接近, 使碰撞检测更加精确, 提高动画的真实性、 增强虚拟 环境的沉浸感, 便于动画的后期制作。 参见图 8 , 为本发明实施例提供的动画制作装置实施例结 构示意图, 如图 8所示, 该装置包括:
动画单元创建模块 1 , 用于创建动画单元; 该动画单元包括图元和 / 或骨骼;
动画数据设置模块 2, 用于设置动画单元的关键帧数据; 在播放过 程中, 动画单元发生非线性变化时所在的帧为该动画 单元的关键帧; 关 键帧数据中记录动画单元在关键帧的参数。
更为具体的, 在播放过程中, 动画单元进行线性变化时所在的帧为 该动画单元的过渡帧; 动画单元的过渡帧数据中记录该动画单元在过 渡 帧的参数。 关键帧的参数包括动画单元在该关键帧的水平 位置参数、 垂 直位置参数、 旋转角度参数、 缩放比例参数。 同样地, 过渡帧的参数包 括动画单元在该过渡帧的水平位置参数、垂直 位置参数、旋转角度参数、 缩放比例等参数。
过渡帧数据不在动画数据设置模块 2中设置, 而是在动画播放过程 中, 根据该动画单元的关键帧数据实时计算得出。
本发明实施例提供的动画制作装置, 将一个动画分为多个并行的动 画单元, 在制作每一帧动画图片时, 只需要针对出现非线性变化的动画 单元进行关键帧数据的设置, 减少动画制作的工作量。
参见图 9, 为本发明实施例提供的动画播放装置第一实施 例结构示 意图, 如图 9所示, 该装置包括:
动画播放模块 3 , 用于播放动画。 动画播放模块 3在每一帧均遍历 所有动画单元, 根据各动画单元在当前帧的关键帧数据或过渡 帧数据, 更新所有动画单元。
过渡帧获取模块 4 , 用于当动画单元在当前帧不存在关键帧数据时 , 根据该动画单元在关键帧的关键帧数据, 计算该动画单元在当前帧的过 渡帧数据, 并通过动画播放模块 3进行播放。 更为具体的, 过渡帧获取 模块 4计算过渡帧数据的计算方式包括: 根据当前帧与关键帧之间间隔 的帧数, 以及关键帧数据之间的线性插值、 或关键帧数据的平均值、 或 其它包含关键帧数据的数学函数计算该动画单 元在当前帧的过渡帧数 据。 如果在当前帧的后续帧中没有该动画单元的关 键帧, 则该动画单元 的过渡帧为该动画单元上一个关键帧。 在以下实施例中, 以计算关键帧 数据的线性插值的方式获取当前帧的过渡帧数 据为例, 但不能以此限定 本发明的保护范围。
本发明实施例提供的动画播放装置, 可以根据动画单元的关键帧数 据实时的计算出过渡帧数据, 并根据关键帧数据和过渡帧数据进行播 放, 使动画帧之间的衔接更加流畅, 动画更加自然。 同时, 本播放装置 的应用将大大较少动画制作过程中的工作量。
为了更好的理解本发明实施例提供的动画制作 装置、动画播放装置, 下面将二者结合在一起进行描述, 但二者的功能实现是互不影响的, 不 能一次限定本发明的保护范围。
参见图 10, 为本发明实施例提供的动画制作装置及播放装 置实施例 结构示意图。 与上一实施例相比, 在本实施例中, 将更为详细的描述装 置各模块的功能和结构。 本实施例提供的装置如图 10所示。
动画制作装置的动画单元创建模块 1, 用于创建动画单元。 在本发 明实施例中, 一个动画可以包括多个动画单元。 更为具体的, 动画单元 创建模块 1创建的动画单元包括图元和骨骼两种, 在本实施例中, 现假 设需要完成一个包含四帧的动画, 内容为一个小人双手匀速的由平举活 动到斜向上举。在本例中, 动画单元创建模块 1创建的小人由 A、 B、 C、 D、 E、 F六个图元, 以及与小人的双手 B、 C图元绑定的骨 组成, 骨 骼在动画播放过程中是不可见的, 如图 11中的 11a所示。 动画制作装置的动画数据设置模块 2, 用于设置动画单元的关键帧 数据。 在动画的第 1帧, 用户设置好各图元和骨骼的位置后, 动画数据 设置模块 2 自动创建各图元和骨骼的关键帧数据, 保存各图元和骨骼的 初始位置。 在该动画其后的每一帧的图片中, 用户只需要针对出现非线 性变化的动画单元进行关键帧数据的设置, 该关键帧数据中记录动画单 元的参数, 具体包括: 动画单元的水平位置参数、 垂直位置参数、 旋转 角度参数、 缩放比例等参数。
在本实施例的举例中, 由于在小人活动的过程中, 只是双手运动, 即只有与 ^ C图元绑定的两块骨 存在变化, B、 C图元随骨骼变化。 故在设置关键帧数据时, 只需设置与 B、 C图元绑定的两块骨骼的关键 帧数据即可。 因为小人双手运动为线性过程, 故通过动画数据设置模块 2设置与 B、 C图元绑定的两块骨骼在第 1帧和第 4帧的关键帧数据即 可。 在第 1帧, 与 B、 C图元绑定的两块骨骼为 0度; 在第 4帧, 与 B、 C图元绑定的两块骨骼相对于在第 1帧的位置, 绕其与小人身体的结合 点, 分别顺时针和逆时针向上旋转 45度。
动画播放装置的动画播放模块 3 , 用于播放动画。 动画播放模块 3 在每一帧均遍历所有动画单元, 根据各动画单元在当前帧的关键帧数据 或过渡帧数据, 更新各动画单元。 更为具体的, 动画播放模块 3包括: 动画遍历单元 31 ,用于在动画单元为图元时,反向遍历图元的 列; 在动画单元为骨骼时,依次遍历骨骼的队列。 因为当动画单元为图元时, 各图元之间可能存在遮挡关系, 而动画制作过程中, 最底层被遮挡的图 元一般排在图元的队列末端, 所以反向遍历图元的队列可以保证动画具 有正确的层次关系;
帧数据获取单元 32, 用于获取各动画单元在当前帧的关键帧数据, 当某一动画单元在当前帧不存在关键帧数据时 , 通过过渡帧获取模块 4 获取该动画单元在当前帧的过渡帧数据。
动画播放单元 33, 用于在当前帧根据各动画单元的关键帧数据或 过 渡帧数据, 更新各动画单元, 从而播放当前帧。
优选的, 动画播放模块 3还包括临时存储单元 34, 用于当动画由骨 骼和与该骨骼绑定的图元共同组成时, 在动画播放单元 33 根据骨骼的 关键帧数据或过渡帧数据更新骨 后, 保存该骨骼的关键帧数据或过渡 帧数据。 对于与该骨骼绑定的图元, 在动画播放单元 33 根据该图元的 关键帧数据或过渡帧数据更新该图元后, 再根据临时存储单元 34 中存 储的骨骼的关键帧数据或过渡帧数据再次更新 该图元。
在本发明实施例的举例中,动画播放单元 33首先根据骨骼的关键帧 数据或过渡帧数据, 更新该骨骼, 并在临时存储单元 34 中保存该骨骼 在当前帧的关键帧数据或过渡帧数据。 然后动画播放单元 33 遍历所有 图元, 虽然各图元没有变化, 但因为 B、 C图元与骨骼绑定, 动画播放 单元 33在临时存储单元 34中获取骨骼在当前帧的关键帧数据或过渡帧 数据, 并根据该关键帧数据或过渡帧数据, 更新 B、 C图元。 依次播放 每个帧, 组合在一起形成完整的动画效果。 在本实施例的举例中播放动 画时, 小人举起双手的 4帧完整动画如图 l la、 l ib, l lc、 l id所示。
过渡帧获取模块 4, 用于在当前帧不存在该动画单元的关键帧数据 时, 根据该动画单元的关键帧数据计算关键帧数据 的线性插值, 获取该 动画单元在当前帧的过渡帧数据, 并通过动画播放模块 3进行播放。
更为具体的, 因为动画单元的关键帧与关键帧之间都是线性 变化的 关系, 所以对于在当前帧没有关键帧数据的动画单元 , 过渡帧获取模块 4 只要获取其前后关键帧的关键帧数据, 及中间间隔的帧数, 就可以通 过计算线性插值, 得出该动画单元在当前帧的过渡帧数据。
假设在本实施例的举例中, 小人的双手由第 1帧的平举到第 4帧举 到斜上 45度, 过渡帧获取模块 4通过获取与 B、 C绑定的两块骨骼在第 1帧和第 4帧的关键帧数据, 及其间隔的帧数, 可以计算出两块骨骼在 第 2帧的过渡骨酪数据的角度参数为 15度; 在第 3帧的过渡骨 数据 的角度参数为 30度。
实施本发明实施例提供的动画制作装置及播放 装置, 只需要设置该 动画在第一帧的图片, 当该动画存在后续变化时, 动画播放装置装置可 以在播放过程中通过关键帧数据自动生成过渡 帧数据, 使动画帧与帧之 间的钎接流畅。 同时, 本发明实施例提供的动画制作装置可以将一个 动 画分为多个并行的动画单元, 且可以实现多种动画单元之间的绑定和联 动, 在每一帧中, 只需要针对出现非线性变化的动画单元进行关 键帧数 据的设置, 減少动画制作的工作量。
参见图 12, 为本发明实施例提供的动画播放装置第二实施 例结构示 意图, 如图所示, 本实施例提供的动画播放装置不仅包括: 动画播放模 块 3、 过渡帧获取模块 4, 还包括包围盒计算模块 5。 包围盒计算模块 5 用于在动画播放过程中, 动画播放模块 3完成对所有动画单元在当前帧 的遍历和更新之后, 根据各动画单元的关键帧数据和过渡数据, 计算该 动画在当前帧的包围盒。 动画的包围盒是检测动画的边界、 碰撞等问题 的关键, 精确的碰撞检测对提高动画的真实性、 增强虚拟环境的沉浸感 起着至关重要的作用。
本实施例提供的包围盒计算模块 5具体包括:
坐标初始化单元 51 , 用于预置包围盒四个顶点的初始化坐标; 预置 包围盒四个顶点的最小 X轴坐标和最小 Y轴为正无穷大,设置包围盒的 最大 X轴坐标和最大 Y轴坐标为负无穷大。
更进一步的, 在动画制作中, 一般定义图片的左上角为 X轴和 Y轴 坐标的起始坐标。 在本发明实施例中, 坐标初始化单元 51 预置包围盒 左上角的顶点坐标为 ( + 00 , + 00 ), 右上角的顶点坐标为 ( - 00, + 00 ) , 左下角的顶点坐标为 ( +∞, _∞), 右下角的顶点坐标为 ( _∞, -∞)。 通过上述设置, 顶点数据获取单元 52 在后续步驟中获取动画单元的顶 点坐标时, 动画单元的左上角顶点坐标必然小于包围盒预 置的左上角坐 标, 利于顶点计算单元 53 完成坐标的初次更新替换, 坐标初始化单元 51预置的包围盒其它三个顶点坐标的理由同上
坐标初始化单元 51可以只预设包围盒左上角的坐标为( + 00 , + 00 ) , 右下角的坐标为 ( -∞, -∞)。
顶点数据获取单元 52 , 用于在动画播放模块 3在当前帧对所有动画 单元进行遍历和更新的过程中, 获取各动画单元的顶点数据。
顶点计算单元 53 , 用于将顶点数据获取单元 52获取的所有动画单 元的顶点数据中,以最小 X轴坐标和最小 Y轴坐标作为包围盒的最小 X 轴坐标和最小 Y轴坐标; 以当前最大 X轴坐标和最大 Y轴坐标作为包 围盒的最大 X轴坐标和最大 Y轴坐标。
更为具体的,在更新各动画单元的过程中,顶 点计算单元 53将顶点 数据获取单元 52 获取的动画单元的顶点坐标与当前包围盒的顶 点坐标 进行比较,将当前帧中各动画单元中的最小 X轴坐标、最小 Y轴坐标作 为包围盒的最小 X轴坐标、最小 Y轴坐标;将当前帧中各动画单元中的 最大 X轴坐标、 最大 Y轴坐标作为包围盒的最大 X轴坐标、 最大 Y轴 坐标。 当各动画单元完成更新后, 顶点数据获取单元 52 获取了当前帧 所有动画单元的顶点坐标, 顶点计算单元 53 计算得出的包围盒四个顶 点坐标分别为: 左上角的坐标 (最小 X轴坐标, 最小 Y轴坐标), 右上 角的坐标(最大 X轴坐标, 最小 Y轴坐标), 左下角的坐标(最小 X轴 坐标,最大 Y轴坐标),右下角的坐标(最大 X轴坐标,最大 Y轴坐标)。
包围盒生成单元 54, 用于以顶点计算单元 53得出的包围盒四个顶 点坐标, 生成该动画在当前帧的包围盒。
本发明实施例提供的动画播放装置中包括包围 盒计算模块 5 , 从而 支持对动画包围盒的计算, 可以实时的计算得出动画在当前帧的包围 盒, 从而使动画包围盒面积尽可能小, 其边界与动画尽可能接近, 使碰 撞检测更加精确, 提高动画的真实性、 增强虚拟环境的沉浸感, 便于动 画的后期合成制作。
以上所揭露的仅为本发明一种较佳实施例而已 , 当然不能以此来限 定本发明之权利范围, 因此依本发明权利要求所作的等同变化, 仍属本 发明所涵盖的范围。
通过以上的实施方式的描述, 本领域的技术人员可以清楚地了解到 本发明可借助软件加必需的硬件平台的方式来 实现, 当然也可以全部通 过硬件来实施。 基于这样的理解, 本发明的技术方案对背景技术做出贡 献的全部或者部分可以以软件产品的形式体现 出来, 该计算机软件产品 可以存储在存储介质中, 如 ROM/RAM、 磁碟、 光盘等, 包括若干指令 用以使得一台计算机设备(可以是个人计算机 , 服务器, 或者网络设备 等 )执行本发明各个实施例或者实施例的某些部 所述的方法。
Next Patent: DISPLAY CELL, DISPLAY APPARATUS AND METHOD FOR MAKING SAME
