骨骼动画的渲染方法和系统的制作方法
【专利摘要】本发明公开了一种骨骼动画的渲染方法和系统,所述方法包括:获取待渲染的骨骼动画的动画帧,并判断是否缓存有所述动画帧的骨骼姿势矩阵数据;若是,则将缓存的骨骼姿势矩阵数据传送至GPU,渲染出与所述动画帧对应的骨骼动画;若否,则通过CPU计算出所述动画帧的骨骼姿势矩阵数据,并在满足缓存条件时,将计算出的骨骼姿势矩阵数据与所述动画帧对应缓存;将计算出的骨骼姿势矩阵数据传送至GPU,渲染出与所述动画帧对应的骨骼动画。实施本发明的方法和系统,可在缓存有待渲染的动画帧的骨骼姿势矩阵数据时,将缓存的骨骼姿势矩阵数据传送至GPU,渲染出与所述动画帧对应的骨骼动画,无需消耗CPU资源,可提高3D引擎的渲染性能。
【专利说明】骨骼动画的渲染方法和系统
【技术领域】
[0001]本发明涉及计算机图形【技术领域】,特别是涉及一种骨骼动画的渲染方法和系统。【背景技术】
[0002]目前一般的Flash3D引擎中,实现骨骼动画的时候,都是每帧使用CPU即时计算全局骨骼姿势矩阵数据,然后再提交给GPU,渲染出3D骨骼动画模型来。实际游戏运用中,玩家、怪物、NPC等各种角色,他们的每种动作都是需要反复播放。
[0003]但是骨骼动画需要反复播放时,则会因为每帧重复计算动画的全局骨骼姿势矩阵数据,CPU计算量大,造成性能大量消耗,会严重影响3D引擎的整体渲染能力。
【发明内容】
[0004]基于此,有必要针对上述实现骨骼动画的技术中CPU性能消耗量大、影响引擎渲染能力的问题,提供一种骨骼动画的渲染方法和系统。
[0005]一种骨骼动画的渲染方法,包括以下步骤:
[0006]获取待渲染的骨骼动画的动画帧,并判断是否缓存有所述动画帧的骨骼姿势矩阵数据;
[0007]若是,则将缓存的骨骼姿势矩阵数据传送至GPU,渲染出与所述动画帧对应的骨骼动画;
[0008]若否,则通过CPU计算出所述动画帧的骨骼姿势矩阵数据,并在满足缓存条件时,将计算出的骨骼姿势矩阵数据与所述动画帧对应缓存;
[0009]将计算出的骨骼姿势矩阵数据传送至GPU,渲染出与所述动画帧对应的骨骼动画。
[0010]一种骨骼动画的渲染系统,包括:
[0011]判断模块,用于获取待渲染的骨骼动画的动画帧,并判断是否缓存有所述动画帧的骨骼姿势矩阵数据;
[0012]第一渲染模块,用于在缓存有所述动画帧的骨骼姿势矩阵数据时,将缓存的骨骼姿势矩阵数据传送至GPU,渲染出与所述动画帧对应的骨骼动画;
[0013]缓存模块,用于在未缓存有所述动画帧的骨骼姿势矩阵数据时,通过CPU计算出所述动画帧的骨骼姿势矩阵数据,并在满足缓存条件时,将计算出的骨骼姿势矩阵数据与所述动画帧对应缓存;
[0014]第二渲染模块,用于将计算出的所述骨骼姿势矩阵数据传送至GPU,渲染出与所述动画帧对应的骨骼动画。
[0015]上述骨骼动画的渲染方法和系统,在缓存有待渲染的动画帧的骨骼姿势矩阵数据时,将缓存的骨骼姿势矩阵数据传送至GPU,渲染出与所述动画帧对应的骨骼动画,无需消耗CPU资源,可提高3D引擎的渲染性能,在为缓存有且满足缓存条件时,将计算出的骨骼姿势矩阵数据与所述动画帧对应缓存,可为下一次的渲染直接提供所需的骨骼姿势矩阵数据,使得不再持续消耗CPU资源,进一步提高3D引擎的渲染性能。【专利附图】
【附图说明】
[0016]图1是本发明骨骼动画的渲染方法第一实施方式的流程示意图;
[0017]图2是本发明骨骼动画的渲染方法第二实施方式的流程示意图;
[0018]图3是本发明骨骼动画的渲染系统第一实施方式的结构示意图。
【具体实施方式】
[0019]请参阅图1,图1是本发明骨骼动画的渲染方法第一实施方式的流程示意图。
[0020]本实施方式的所述骨骼动画的渲染方法包括以下步骤:
[0021]步骤101,获取待渲染的骨骼动画的动画帧,并判断是否缓存有所述动画帧的骨骼姿势矩阵数据。
[0022]步骤102,若是,则将缓存的骨骼姿势矩阵数据传送至GPU,渲染出与所述动画帧对应的骨骼动画。
[0023]步骤103,若否,则通过CPU计算出所述动画帧的骨骼姿势矩阵数据,并在满足缓存条件时,将计算出的骨骼姿势矩阵数据与所述动画帧对应缓存。
[0024]步骤104,将计算出的骨骼姿势矩阵数据传送至GPU,渲染出与所述动画帧对应的骨骼动画。
[0025]本实施方式所述的骨骼动画的渲染方法,在缓存有待渲染的动画帧的骨骼姿势矩阵数据时,将缓存的骨骼姿势矩阵数据传送至GPU,渲染出与所述动画帧对应的骨骼动画,无需消耗CPU资源,可提高3D引擎的渲染性能,在为缓存有且满足缓存条件时,将计算出的骨骼姿势矩阵数据与所述动画帧对应缓存,可为下一次的渲染直接提供所需的骨骼姿势矩阵数据,使得不再持续消耗CPU资源,进一步提高3D引擎的渲染性能。
[0026]其中,对于步骤101,所述动画帧为当前待渲染的动画画面,所述动画帧的骨骼姿势矩阵优选地,缓存在缓存池中。
[0027]在一个实施例中,所述获取待渲染的骨骼对象的动画帧的步骤包括以下步骤:
[0028]创建用于播放所述骨骼动画的骨骼动画对象。
[0029]加载播放所述骨骼动画所需要的动画资源。
[0030]将所述动画资源的数据结构转换为内存的数据结构。
[0031]启动所述骨骼动画的动画播放模式。
[0032]其中,所需要的动画资源优选地包括贴图、3D模型、骨骼、骨骼姿势数据。
[0033]优选地,加载的所述动画资源位二进制数据,在GPU中进行动画渲染时,需要将二进制的动画资源转换为与GPU内存匹配的数据结构,即3D引擎需要的数据格式。启动所述骨骼动画的动画播放模式优选地,为将所述动画资源添加到显示列表。
[0034]将所述动画资源添加到显示列表,即将动画资源添加到3D引擎,等待渲染。
[0035]在另一个实施例中,在所述获取待渲染的骨骼动画的动画巾贞的步骤之前,还包括以下步骤:
[0036]统计所述待渲染的骨骼动画的各个动画帧,在所述骨骼动画中的播放总次数。
[0037]通过CPU计算出播放总次数超高播放阈值的动画帧的骨骼姿势矩阵数据,并计算出的骨骼姿势矩阵数据与所述动画帧对应缓存。[0038]其中,所述播放总次数为所述动画帧在整个骨骼动画的播放过程中的重复播放次数。所述播放阈值优选地为2。
[0039]对于步骤102,优选地,所述骨骼姿势矩阵数据存储在缓存池内,所述骨骼姿势矩阵可以是前一次渲染所述动画帧时缓存的,也可以是在启动所述骨骼动画的动画播放模式之前缓存的。
[0040]进一步地,所述将缓存的骨骼姿势矩阵数据传送至GPU,渲染出与所述动画帧对应的骨骼动画的步骤还可以包括以下步骤:
[0041]执行所述骨骼动画的帧函数(骨骼动画的计算方法)。
[0042]对于步骤103,所述通过CPU计算出所述动画帧的骨骼姿势矩阵数据的步骤包括以下步骤:
[0043]转换所述动画帧对应的局部分层骨架,生成全局骨骼姿势。
[0044]通过骨骼数量、四元数、所述全局骨骼姿势进行数据运算,计算出所述动画帧的骨骼姿势矩阵数据。
[0045]其中,所述全局骨骼姿势是所述动画帧中骨骼对象的所有骨骼的骨骼姿势数据。四元数为3D中的一种数据结构,代表着一个四维空间,相对于复数为二维空间,能方便的表示3D旋转。
[0046]在另一个实施例中,所述在满足缓存条件时,将计算出的骨骼姿势矩阵数据与所述动画帧对应缓存的步骤还包括以下步骤:
[0047]判断所述动画帧在所述骨骼动画中的播放总次数是否超过播放阈值,若是,则将计算出的骨骼姿势矩阵数据与所述动画帧对应缓存。
[0048]本实施例所述的骨骼动画的渲染方法,在播放总次数是超过播放阈值时,将计算出的骨骼姿势矩阵数据与所述动画帧对应缓存,可为下一次的渲染直接提供所需的骨骼姿势矩阵数据,使得反复播放动画的3D模型不再持续消耗CPU资源,提高3D引擎的渲染性倉泛。
[0049]其中,所述播放总次数超过播放阈值是一个缓存条件,在其他实施方式中,还可以设置其他缓存条件,如CPU计算出骨骼姿势矩阵数据,即将计算出的骨骼姿势矩阵数据与所述动画帧对应缓存。
[0050]优选地,所述播放阈值为2,还可以是其他数值。
[0051]对于步骤104,所述将计算出的骨骼姿势矩阵数据传送至GPU,渲染出与所述动画帧对应的骨骼动画的步骤包括以下步骤:
[0052]将所述骨骼姿势矩阵数据传送至所述骨骼动画对象。
[0053]通过3D引擎的GPU对象把所述骨骼姿势矩阵数据传输到GPU。
[0054]将渲染所述骨骼动画所需的着色程序Shader传输到GPU。
[0055]将所述骨骼动画的3D模型的顶点数据、贴图、全局坐标矩阵数据传输到GPU。
[0056]根据模型顶点、贴图、骨骼、全局坐标矩阵数据与骨骼姿势矩阵数据,通过着色程序Shader在GPU内进行渲染运算,在屏幕上渲染出与所述动画帧对应的骨骼动画。
[0057]其中,着色程序Shader为着色程序,用于GPU的编程。
[0058]请参阅图2,图2是本发明骨骼动画的渲染方法第二实施方式的流程示意图。
[0059]本实施方式的骨骼动画的渲染方法与第一实施方式的区别在于:所述将缓存的骨骼姿势矩阵数据传送至GPU,渲染出与所述动画帧对应的骨骼动画的步骤包括以下步骤:
[0060]步骤201,将缓存池内缓存的所述骨骼姿势矩阵数据传送至所述骨骼动画的骨骼动画对象。
[0061]步骤202,所述骨骼动画对象接收所述骨骼姿势矩阵数据,并将所述骨骼姿势矩阵数据传送至GPU。
[0062]步骤203,向GPU输入全局坐标矩阵数据。
[0063]步骤204,根据所述骨骼姿势矩阵数据、所述全局坐标矩阵数据与缓存的模型顶点、贴图和骨骼,在所述GPU中通过着色程序Shader进行渲染运算,在显示屏幕上渲染出与所述动画帧对应的骨骼动画。
[0064]本实施方式所述的骨骼动画的渲染方法,在缓存有与所述骨骼动画对应的骨骼姿势数据时,无需再向所述GPU中传输模型顶点、贴图、骨骼,可直接使用缓存的模型顶点、贴图和骨骼,进行动画渲染,可进一步提高3D引擎的渲染性能。
[0065]优选地,所述模型顶点优选地为3D模型的顶点。
[0066]请参阅图3图3是本发明骨骼动画的渲染系统第一实施方式的结构示意图。
[0067]本实施方式的所述骨骼动画的渲染系统包括判断模块100、第一渲染模块200和第二渲染模块300,其中:
[0068]判断模块100,用于获取待渲染的骨骼动画的动画帧,并判断是否缓存有所述动画帧的骨骼姿势矩阵数据。
[0069]第一渲染模块200,用于在缓存有所述动画帧的骨骼姿势矩阵数据时,将缓存的骨骼姿势矩阵数据传送至GPU,渲染出与所述动画帧对应的骨骼动画。
[0070]缓存模块300,用于在未缓存有所述动画帧的骨骼姿势矩阵数据时,通过CPU计算出所述动画帧的骨骼姿势矩阵数据,并在满足缓存条件时,将计算出的骨骼姿势矩阵数据与所述动画帧对应缓存。
[0071]第二渲染模块400,用于将计算出的骨骼姿势矩阵数据传送至GPU,渲染出与所述动画帧对应的骨骼动画。
[0072]本实施方式所述的骨骼动画的渲染系统,在缓存有待渲染的动画帧的骨骼姿势矩阵数据时,将缓存的骨骼姿势矩阵数据传送至GPU,渲染出与所述动画帧对应的骨骼动画,无需消耗CPU资源,可提高3D引擎的渲染性能,在为缓存有且满足缓存条件时,将计算出的骨骼姿势矩阵数据与所述动画帧对应缓存,可为下一次的渲染直接提供所需的骨骼姿势矩阵数据,使得不再持续消耗CPU资源,进一步提高3D引擎的渲染性能。
[0073]其中,对于判断模块100,所述动画帧为当前待渲染的动画画面,所述动画帧的骨骼姿势矩阵优选地,缓存在缓存池中。
[0074]在一个实施例中,判断模块100还用于:
[0075]创建用于播放所述骨骼动画的骨骼动画对象。
[0076]加载播放所述骨骼动画所需要的动画资源。
[0077]将所述动画资源的数据结构转换为内存的数据结构。
[0078]启动所述骨骼动画的动画播放模式。
[0079]其中,所需要的动画资源优选地包括贴图、3D模型、骨骼、骨骼姿势数据。
[0080]优选地,加载的所述动画资源位二进制数据,在GPU中进行动画渲染时,需要将二进制的动画资源转换为与GPU内存匹配的数据结构,即3D引擎需要的数据格式。启动所述骨骼动画的动画播放模式优选地,为将所述动画资源添加到显示列表。
[0081]在另一个实施例中,还包括缓存模块,用于在获取待渲染的骨骼动画的动画帧之IIJ:
[0082]统计所述待渲染的骨骼动画的各个动画帧,在所述骨骼动画中的播放总次数。
[0083]通过CPU计算出播放总次数超高播放阈值的动画帧的骨骼姿势矩阵数据,并计算出的骨骼姿势矩阵数据与所述动画帧对应缓存。
[0084]其中,所述播放总次数为所述动画帧在整个骨骼动画的播放过程中的重复播放次数。所述播放阈值优选地为2。
[0085]对于第一渲染模块200,优选地,所述骨骼姿势矩阵数据存储在缓存池内,所述骨骼姿势矩阵可以是前一次渲染所述动画帧时缓存的,也可以是在启动所述骨骼动画的动画播放模式之前缓存的。
[0086]进一步地,所述将缓存的骨骼姿势矩阵数据传送至GPU,渲染出与所述动画帧对应的骨骼动画的步骤还可以包括以下步骤:
[0087]执行所述骨骼动画的帧函数。
[0088]对于缓存模块300,所述通过CPU计算出所述动画帧的骨骼姿势矩阵数据的步骤包括以下步骤:
[0089]转换所述动画帧对应的局部分层骨架,生成全局骨骼姿势。
[0090]通过骨骼数量、四元数、所述全局骨骼姿势进行数据运算,计算出所述动画帧的骨骼姿势矩阵数据。
[0091]其中,所述全局骨骼姿势是所述动画帧中骨骼对象的所有骨骼的骨骼姿势数据。
[0092]在另一个实施例中,所述缓存模块300还可用于:
[0093]判断所述动画帧在所述骨骼动画中的播放总次数是否超过播放阈值,若是,则将计算出的骨骼姿势矩阵数据与所述动画帧对应缓存。
[0094]本实施例所述的骨骼动画的渲染系统,在播放总次数是超过播放阈值时,将计算出的骨骼姿势矩阵数据与所述动画帧对应缓存,可为下一次的渲染直接提供所需的骨骼姿势矩阵数据,使得反复播放动画的3D模型不再持续消耗CPU资源,提高3D引擎的渲染性倉泛。
[0095]其中,所述播放总次数超过播放阈值是一个缓存条件,在其他实施方式中,还可以设置其他缓存条件,如CPU计算出骨骼姿势矩阵数据,即将计算出的骨骼姿势矩阵数据与所述动画帧对应缓存。
[0096]优选地,所述播放阈值为2,还可以是其他数值。
[0097]对于第二渲染模块400,所述将计算出的骨骼姿势矩阵数据传送至GPU,渲染出与所述动画帧对应的骨骼动画的步骤包括以下步骤:
[0098]将所述骨骼姿势矩阵数据传送至所述骨骼动画对象。
[0099]通过3D引擎的GPU对象把所述骨骼姿势矩阵数据传输到GPU。
[0100]将渲染所述骨骼动画所需的着色程序Shader传输到GPU。
[0101]将所述骨骼动画的3D模型的顶点数据、贴图、全局坐标矩阵数据传输到GPU。
[0102]根据模型顶点、贴图、骨骼、全局坐标矩阵数据与骨骼姿势矩阵数据,通过着色程序Shader在GPU内进行渲染运算,在屏幕上渲染出与所述动画帧对应的骨骼动画。
[0103]其中,着色程序Shader为着色程序,用于GPU的编程。
[0104]以下所述是本发明骨骼动画的渲染系统第二实施方式。
[0105]本实施方式的骨骼动画的渲染系统与第一实施方式的区别在于:第一渲染模200还可用于:
[0106]将缓存池内缓存的所述骨骼姿势矩阵数据传送至所述骨骼动画的骨骼动画对象。
[0107]所述骨骼动画对象接收所述骨骼姿势矩阵数据,并将所述骨骼姿势矩阵数据传送至 GPU。
[0108]向GPU输入全局坐标矩阵数据。
[0109]根据所述骨骼姿势矩阵数据、所述全局坐标矩阵数据与缓存的模型顶点、贴图和骨骼,在所述GPU中通过着色程序Shader进行渲染运算,在显示屏幕上渲染出与所述动画帧对应的骨骼动画。
[0110]本实施方式所述的骨骼动画的渲染系统,在缓存有与所述骨骼动画对应的骨骼姿势数据时,无需再向所述GPU中传输模型顶点、贴图、骨骼,可直接使用缓存的模型顶点、贴图和骨骼,进行动画渲染,可进一步提高3D引擎的渲染性能。
[0111]优选地,所述模型顶点优选地为3D模型的顶点。
[0112]以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。
【权利要求】
1.一种骨骼动画的渲染方法,其特征在于,包括以下步骤: 获取待渲染的骨骼动画的动画帧,并判断是否缓存有所述动画帧的骨骼姿势矩阵数据; 若是,则将缓存的骨骼姿势矩阵数据传送至GPU,渲染出与所述动画帧对应的骨骼动画; 若否,则通过CPU计算出所述动画帧的骨骼姿势矩阵数据,并在满足缓存条件时,将计算出的骨骼姿势矩阵数据与所述动画帧对应缓存; 将计算出的骨骼姿势矩阵数据传送至GPU,渲染出与所述动画帧对应的骨骼动画。
2.根据权利要求1所述的骨骼动画的渲染方法,其特征在于,所述获取待渲染的骨骼对象的动画帧的步骤包括以下步骤: 创建用于播放所述骨骼动画的骨骼动画对象; 加载播放所述骨骼动画所需要的动画资源; 将所述动画资源的数据结构转换为内存的数据结构; 启动所述骨骼动画的动画播放模式。
3.根据权利要求1所述的骨骼动画的渲染方法,其特征在于,所述通过CPU计算出所述动画帧的骨骼姿势矩阵数据的步骤包括以下步骤: 转换所述动画帧对应的局部分层骨架,生成全局骨骼姿势; 通过骨骼数量、四元数、所述全局骨骼姿势进行数据运算,计算出所述动画帧的骨骼姿势矩阵数据。
4.根据权利要求1所述的骨骼动画的渲染方法,其特征在于,所述将缓存的骨骼姿势矩阵数据传送至GPU,渲染出与所述动画帧对应的骨骼动画的步骤包括以下步骤: 将缓存池内缓存的所述骨骼姿势矩阵数据传送至所述骨骼动画的骨骼动画对象; 所述骨骼动画对象接收所述骨骼姿势矩阵数据,并将所述骨骼姿势矩阵数据传送至GPU ; 向GPU输入全局坐标矩阵数据; 根据所述骨骼姿势矩阵数据、所述全局坐标矩阵数据与缓存的模型顶点、贴图和骨骼,在所述GPU中通过着色程序Shader进行渲染运算,在显示屏幕上渲染出与所述动画帧对应的骨骼动画。
5.根据权利要求1至4中任意一项所述的骨骼动画的渲染方法,其特征在于,所述在满足缓存条件时,将计算出的骨骼姿势矩阵数据与所述动画帧对应缓存的步骤包括以下步骤: 判断所述动画帧在所述骨骼动画中的播放总次数是否超过播放阈值,若是,则将计算出的骨骼姿势矩阵数据与所述动画帧对应缓存。
6.一种骨骼动画的渲染系统,其特征在于,包括: 判断模块,用于获取待渲染的骨骼动画的动画帧,并判断是否缓存有所述动画帧的骨骼姿势矩阵数据; 第一渲染模块,用于在缓存有所述动画帧的骨骼姿势矩阵数据时,将缓存的骨骼姿势矩阵数据传送至GPU,渲染出与所述动画帧对应的骨骼动画; 缓存模块,用于在未缓存有所述动画帧的骨骼姿势矩阵数据时,通过CPU计算出所述动画帧的骨骼姿势矩阵数据,并在满足缓存条件时,将计算出的骨骼姿势矩阵数据与所述动画帧对应缓存; 第二渲染模块,用于将计算出的所述骨骼姿势矩阵数据传送至GPU,渲染出与所述动画帧对应的骨骼动画。
7.根据权利要求6所述的骨骼动画的渲染系统,其特征在于,所述判断模块还用于: 创建用于播放所述骨骼动画的骨骼动画对象; 加载播放所述骨骼动画所需要的动画资源; 将所述动画资源的数据结构转换为内存的数据结构; 启动所述骨骼动画的动画播放模式。
8.根据权利要求6所述的骨骼动画的渲染系统,其特征在于,所述第二渲染模块还用于: 转换所述动画帧对应的局部分层骨架,生成全局骨骼姿势; 通过骨骼数量、四元数、所述全局骨骼姿势进行数据运算,计算出所述动画帧的骨骼姿势矩阵数据。
9.根据权利要求6所述的骨骼动画的渲染系统,其特征在于,所述第一渲染模块还用于: 将缓存池内缓存的所述骨骼姿势矩阵数据传送至所述骨骼动画的骨骼动画对象; 所述骨骼动画对象接收所述骨骼姿`势矩阵数据,并将所述骨骼姿势矩阵数据传送至GPU ; 向GPU输入全局坐标矩阵数据; 根据所述骨骼姿势矩阵数据、所述全局坐标矩阵数据与缓存的模型顶点、贴图和骨骼,在所述GPU中通过着色程序Shader进行渲染运算,在显示屏幕上渲染出与所述动画帧对应的骨骼动画。
10.根据权利要求6至9中任意一项所述的骨骼动画的渲染系统,其特征在于,所述缓存模块还用于判断所述动画帧在所述骨骼动画中的播放总次数是否超过播放阈值,若是,则将计算出的骨骼姿势矩阵数据与所述动画帧对应缓存。
【文档编号】G06T13/40GK103617643SQ201310627192
【公开日】2014年3月5日 申请日期:2013年11月29日 优先权日:2013年11月29日
【发明者】陈苏俊 申请人:广州菲动软件科技有限公司