CN109840931B - 骨骼动画的合批渲染方法、装置、系统及存储介质 - Google Patents
骨骼动画的合批渲染方法、装置、系统及存储介质 Download PDFInfo
- Publication number
- CN109840931B CN109840931B CN201910054507.8A CN201910054507A CN109840931B CN 109840931 B CN109840931 B CN 109840931B CN 201910054507 A CN201910054507 A CN 201910054507A CN 109840931 B CN109840931 B CN 109840931B
- Authority
- CN
- China
- Prior art keywords
- vertex
- pool
- data
- batch
- skeleton
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02P—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN THE PRODUCTION OR PROCESSING OF GOODS
- Y02P90/00—Enabling technologies with a potential contribution to greenhouse gas [GHG] emissions mitigation
- Y02P90/30—Computing systems specially adapted for manufacturing
Landscapes
- Image Generation (AREA)
Abstract
本发明提供一种骨骼动画的合批渲染方法、装置、系统及存储介质,包括:获取待渲染的同一批次部件的骨骼纹理和顶点数据,骨骼纹理为存储同一批次部件的骨骼矩阵的浮点纹理;从顶点数据中解析得到各顶点分别对应的部件序号,部件序号为同一批次部件中各部件的骨骼矩阵在骨骼纹理中的序号;根据部件序号从骨骼纹理中读取与所述各顶点所对应的骨骼矩阵;根据顶点数据和所述读取的骨骼矩阵,对同一批次部件进行合批渲染。从而实现对于多个带不同骨骼动画的模型进行动态合批,降低批次数量,减少了每一帧需要绘制的Draw Call数,解决了因Draw Call过多导致的卡顿的问题,提高了画面帧率,降低了CPU的占用时间、发热量和能耗。
Description
技术领域
本发明涉及图像处理技术领域,尤其涉及一种骨骼动画的合批渲染方法、装置、系统及存储介质。
背景技术
随着电子娱乐行业的发展,游戏、动画受到越来越多用户的喜爱。游戏或者动画的画面质量与渲染的效果,直接关乎用户体验。而越是精致的渲染效果,占用的空间越大,渲染的速度越低。在渲染实现过程中,Draw Call(绘制指令)是CPU(Central ProcessingUnit,中央处理器)向GPU(Graphics Processing Unit,图像处理器)提交的一次渲染指令,它的数量是影响游戏性能的重要指标,过多的Draw Call会导致CPU占用率过高,帧时长变长,从而导致游戏卡顿等问题。为了解决Draw Call过多的问题,一般会采用合批(Batch)的处理方法,即将多个Draw Call合并为一个Draw Call。
目前,常用的合批处理技术,包括:静态合批、动态合批、GPU Instancing(GPU实例化)技术。其中,静态合批,即游戏制作阶段时,离线处理游戏资源,将多个模型合并为一个模型,从而达到减少draw call的目的;动态合批,即游戏运行时,在线的动态合并模型,从而减少draw call。对于带有骨骼动画的模型,通常是通过CPU蒙皮,或者向GPU中以数组形式传递骨骼数据进行GPU蒙皮;GPU Instancing技术,即利用GPU的Instancing特点,用一个draw call同时绘制多个具有完全相同顶点数据的模型。从而达到减少Draw Call的目的。
但是,这些技术都存在各自的缺陷。静态合批只能合并相对静态模型,当模型之间有相对运动则无法进行静态合批。一般的动态合批,对于带骨骼动画的模型的合批支持不好,骨骼一旦数量过多,就无法进行合批。另外,动态合批中,如果在合批中的某个模型需要退出合批,可能对其他合批中的模型造成影响,导致合批失败或者需要重新合批等问题。GPU Instancing技术无法支持带有不同顶点数据的模型。
发明内容
本发明提供一种骨骼动画的合批渲染方法、装置、系统及存储介质,以实现对于多个带不同骨骼动画的模型进行动态合批,降低批次数量,减少因模型修改或删除导致的合批失效的问题,从而保持稳定帧率。
第一方面,本发明实施例提供一种骨骼动画的合批渲染方法,包括:
获取待渲染的同一批次部件的骨骼纹理和顶点数据,所述骨骼纹理为存储所述同一批次部件的骨骼矩阵的浮点纹理;
从所述顶点数据中解析得到各顶点分别对应的部件序号,所述部件序号为所述同一批次部件中各部件的骨骼矩阵在所述骨骼纹理中的序号;
根据所述部件序号从所述骨骼纹理中读取与所述各顶点所对应的骨骼矩阵;
根据所述顶点数据和所述读取的骨骼矩阵,对所述同一批次部件进行合批渲染。
在一种可能的设计中,所述同一批次部件在合批渲染时所使用的贴图为各部件所对应的贴图的合并贴图。
在一种可能的设计中,所述骨骼纹理为RGBA32F格式的浮点纹理,所述骨骼纹理的每一行用于存储同一部件的所有骨骼矩阵,所述同一部件中的每个骨骼对应一个骨骼矩阵,所述部件序号为所述部件在所述骨骼纹理中的行号。
在一种可能的设计中,所述同一批次部件的顶点数据存储于第一顶点池,所述第一顶点池为所述同一批次部件的顶点缓冲区合并得来,所述第一顶点池的容量为第一预设值;
所述同一批次部件的索引数据存储于第二顶点池,所述第二顶点池为所述同一批次部件的索引缓冲区合并得来,所述第二顶点池的容量为第二预设值。
在一种可能的设计中,还包括:
确定所述同一批次部件中需要隐藏的部件,将所述第二顶点池中所述需要隐藏的部件所对应的索引缓冲区置零,并更新所述第二顶点池的总剩余容量。
在一种可能的设计中,还包括:
确定有新增部件需要进行渲染时,判断所述第一顶点池和第二顶点池的末尾剩余容量是否分别足以容纳所述新增部件的顶点数据和索引数据;
若所述第一顶点池和第二顶点池的末尾剩余容量分别足以容纳所述新增部件的顶点数据和索引数据,则将所述新增部件的顶点数据和索引数据分别存储至所述第一顶点池和第二顶点池的末尾;
若所述第一顶点池的总剩余容量不能容纳所述新增部件的顶点数据或所述第二顶点池的总剩余容量不能容纳所述新增部件的索引数据,则将所述新增部件的顶点数据和索引数据分别存储于新建批次的顶点池中;
若所述第一顶点池和第二顶点池的总剩余容量分别足以容纳所述新增部件的顶点数据和索引数据,而所述第一顶点池的末尾剩余容量无法容纳所述新增部件的顶点数据,则对所述第一顶点池中顶点数据的位置和所述第二顶点池中索引数据的位置进行更新,使得所述第一顶点池和第二顶点池的总剩余容量分别位于所述第一顶点池和第二顶点的末尾,将所述新增部件的顶点数据和索引数据分别存储至所述第一顶点池和第二顶点池的末尾;
若所述第一顶点池的末尾剩余容量足以容纳所述新增部件的顶点数据,所述第二顶点池的末尾剩余容量不能容纳所述新增部件的索引数据,而所述第二顶点池的总剩余容量足以容纳所述新增部件的索引数据,则将所述新增部件的顶点数据存储至所述第一顶点池的末尾,且对所述第二顶点池中索引数据的位置进行更新,使得所述第二顶点池的总剩余容量位于所述第二顶点的末尾,将所述新增部件的索引数据存储至所述第二顶点池的末尾。
在一种可能的设计中,还包括:
若所述同一批次部件使用相同的着色器,但是输入所述着色器的参数不同,则对所述着色器中的参数进行合并处理后,用浮点纹理存储合并处理后的参数,得到参数纹理;
在使用着色器时,从所述参数纹理中获取所述同一批次部件中各部件所对应的着色器参数。
第二方面,本发明实施例提供一种骨骼动画的合批渲染装置,包括:
获取模块,用于获取待渲染的同一批次部件的骨骼纹理和顶点数据,所述骨骼纹理为存储所述同一批次部件的骨骼矩阵的浮点纹理;
解析模块,用于从所述顶点数据中解析得到各顶点分别对应的部件序号,所述部件序号为所述同一批次部件中各部件的骨骼矩阵在所述骨骼纹理中的序号;
读取模块,用于根据所述部件序号从所述骨骼纹理中读取与所述各顶点所对应的骨骼矩阵;
渲染模块,用于根据所述顶点数据和所述读取的骨骼矩阵,对所述同一批次部件进行合批渲染。
在一种可能的设计中,所述同一批次部件在合批渲染时所使用的贴图为各部件所对应的贴图的合并贴图。
在一种可能的设计中,所述骨骼纹理为RGBA32F格式的浮点纹理,所述骨骼纹理的每一行用于存储同一部件的所有骨骼矩阵,所述同一部件中的每个骨骼对应一个骨骼矩阵,所述部件序号为所述部件在所述骨骼纹理中的行号。
在一种可能的设计中,所述同一批次部件的顶点数据存储于第一顶点池,所述第一顶点池为所述同一批次部件的顶点缓冲区合并得来,所述第一顶点池的容量为第一预设值;
所述同一批次部件的索引数据存储于第二顶点池,所述第二顶点池为所述同一批次部件的索引缓冲区合并得来,所述第二顶点池的容量为第二预设值。
在一种可能的设计中,还包括:
确定模块,用于确定所述同一批次部件中需要隐藏的部件,将所述第二顶点池中所述需要隐藏的部件所对应的索引缓冲区置零,并更新所述第二顶点池的总剩余容量。
在一种可能的设计中,还包括:
顶点池更新模块,用于确定有新增部件需要进行渲染时,判断所述第一顶点池和第二顶点池的末尾剩余容量是否分别足以容纳所述新增部件的顶点数据和索引数据;
若所述第一顶点池和第二顶点池的末尾剩余容量分别足以容纳所述新增部件的顶点数据和索引数据,则将所述新增部件的顶点数据和索引数据分别存储至所述第一顶点池和第二顶点池的末尾;
若所述第一顶点池的总剩余容量不能容纳所述新增部件的顶点数据或所述第二顶点池的总剩余容量不能容纳所述新增部件的索引数据,则将所述新增部件的顶点数据和索引数据分别存储于新建批次的顶点池中;
若所述第一顶点池和第二顶点池的总剩余容量分别足以容纳所述新增部件的顶点数据和索引数据,而所述第一顶点池的末尾剩余容量无法容纳所述新增部件的顶点数据,则对所述第一顶点池中顶点数据的位置和所述第二顶点池中索引数据的位置进行更新,使得所述第一顶点池和第二顶点池的总剩余容量分别位于所述第一顶点池和第二顶点的末尾,将所述新增部件的顶点数据和索引数据分别存储至所述第一顶点池和第二顶点池的末尾;
若所述第一顶点池的末尾剩余容量足以容纳所述新增部件的顶点数据,所述第二顶点池的末尾剩余容量不能容纳所述新增部件的索引数据,而所述第二顶点池的总剩余容量足以容纳所述新增部件的索引数据,则将所述新增部件的顶点数据存储至所述第一顶点池的末尾,且对所述第二顶点池中索引数据的位置进行更新,使得所述第二顶点池的总剩余容量位于所述第二顶点的末尾,将所述新增部件的索引数据存储至所述第二顶点池的末尾。
在一种可能的设计中,所述获取模块,还用于:
若所述同一批次部件使用相同的着色器,但是输入所述着色器的参数不同,则对所述着色器中的参数进行合并处理后,用浮点纹理存储合并处理后的参数,得到参数纹理;
在使用着色器时,从所述参数纹理中获取所述同一批次部件中各部件所对应的着色器参数。
第三方面,本发明实施例提供一种骨骼动画的合批渲染系统,包括:存储器和处理器,存储器中存储有所述处理器的可执行指令;其中,所述处理器配置为经由执行所述可执行指令来执行第一方面中任一项所述的骨骼动画的合批渲染方法。
第四方面,本发明实施例提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现第一方面任一项所述的骨骼动画的合批渲染方法。
本发明提供的骨骼动画的合批渲染方法、装置、系统及存储介质,通过获取待渲染的同一批次部件的骨骼纹理和顶点数据,骨骼纹理为存储同一批次部件的骨骼矩阵的浮点纹理;从顶点数据中解析得到各顶点分别对应的部件序号,部件序号为同一批次部件中各部件的骨骼矩阵在骨骼纹理中的序号;根据部件序号从骨骼纹理中读取与所述各顶点所对应的骨骼矩阵;根据顶点数据和所述读取的骨骼矩阵,对同一批次部件进行合批渲染。从而实现对于多个带不同骨骼动画的模型进行动态合批,大幅度降低批次数量,减少了每一帧需要绘制的Draw Call数,解决了因Draw Call过多导致的卡顿的问题,提高了画面帧率,降低了CPU的占用时间、发热量和能耗。同时,减少了因合批中模型的修改或删除导致的合批失效的问题,从而保持稳定帧率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明一应用场景的原理示意图;
图2为本发明一实施例提供的骨骼动画的合批渲染方法的流程图;
图3为本发明另一实施例提供的骨骼动画的合批渲染方法的流程图;
图4为本发明另一实施例提供的骨骼动画的合批渲染方法的流程图;
图5为本发明另一实施例提供的骨骼动画的合批渲染方法的流程图;
图6-1至图6-3分别为不同顶点池中新增部件时的存储情况;
图7为本发明一实施例提供的骨骼动画的合批渲染装置的结构示意图;
图8为本发明一实施例提供的骨骼动画的合批渲染系统的结构示意图。
通过上述附图,已示出本公开明确的实施例,后文中将有更详细的描述。这些附图和文字描述并不是为了通过任何方式限制本公开构思的范围,而是通过参考特定实施例为本领域技术人员说明本公开的概念。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例例如能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
下面以具体地实施例对本发明的技术方案进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例不再赘述。
以下,对本申请中的部分用语进行解释说明,以便于本领域技术人员理解:
Mesh(网格模型):或简称模型,即计算机中一个待渲染的3D物体,通常是用多个三角面来表示的。
Draw Call(绘制指令):CPU向GPU提交的一次渲染指令,通常一个模型需要一个Draw Call来绘制。
Vertex(顶点):构成3D模型的基本数据结构,多个顶点可以构成3D模型,每个顶点内包括位置、纹理坐标等信息。
Vertex Buffer(顶点缓冲区):用于GPU渲染的顶点数据集合,包括顶点位置等属性。一般一个模型包含一个顶点缓冲区。
Index Buffer(顶点索引缓冲区):用于GPU渲染时构成三角面的顶点索引数据集合,每个索引对应顶点缓冲区的一个顶点,每3个索引可以构成一个三角面。一般一个模型包含一个顶点索引缓冲区。
骨骼动画:3D角色动画的一种实现方式,通过一系列骨骼的运动来驱动整个角色的动作。
骨骼蒙皮:一种根据骨骼位置计算顶点位置的方法,每个顶点都绑定在一根或多根骨骼上,相对骨骼位置固定。当骨骼运动时,需要根据骨骼的绝对位置、顶点相对骨骼位置、以及不同骨骼的权重,计算出顶点的绝对位置。从而实现骨骼运动驱动角色整体的动作。
OpenGL ES:一种图形学的接口集,用于移动端的图形渲染。
Shader(着色器):一段用于GPU中进行渲染的程序,包括vertex shader(顶点着色器)和fragment shader(像素着色器)等,分别对应渲染管线的不同阶段。
本发明的主要原理是将骨骼的位置数据存为浮点纹理,从而可以合并大量的骨骼数据,从而突破一般动态合批可合并骨骼数量的上限。然后,通过以顶点标记的方式记录每个模型所对应的骨骼,从而在GPU里找到模型对应的骨骼,最终实现跨角色的动态合批。另外,在更改某个合批中的模型时,只修改顶点池中其对应的索引数据,避免顶点池的其他索引缓存失效,从而避免导致合批失效。具体的,图1为本发明一应用场景的原理示意图,如图1所示,处理单元10采用浮点纹理来存储同一批次部件的骨骼矩阵,得到骨骼纹理;将骨骼纹理中的部件序号与合批部件顶点池中的顶点数据进行关联;获取与顶点数据关联的部件序号,并从骨骼纹理中查找到与部件序号对应的骨骼矩阵;根据骨骼矩阵,完成骨骼蒙皮以及渲染处理。处理单元10将渲染处理后的图片,发送给显卡单元20,由显卡单元20进行展示。
本发明提供的骨骼动画的动态合批方法,可以应用在OpenGL ES3.0或PC平台下,但是在OpenGL ES2.0下需要硬件支持GL_OES_floating_texture扩展和Vertex TextureFetch技术。经过测试,市面上Android平台只有4台机型不支持GL_OES_floating_texture扩展,IOS平台只有iPhone5不支持Vertex Texture Fetch技术,对于这些产品,统一回退到不合批的情况。由于半透明批次对渲染顺序有要求,无法进行合批,因此,本发明对半透明做不合批处理。
下面以具体地实施例对本发明的技术方案以及本申请的技术方案如何解决上述技术问题进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例中不再赘述。下面将结合附图,对本发明的实施例进行描述。
图2为本发明一实施例提供的骨骼动画的合批渲染方法的流程图,如图2所示,本实施例中的方法可以包括:
S202、获取待渲染的同一批次部件的骨骼纹理和顶点数据,骨骼纹理为存储同一批次部件的骨骼矩阵的浮点纹理。
本实施例中,同一批次部件在合批渲染时所使用的贴图为各部件所对应的贴图的合并贴图。首先将需要合批的模型所用的贴图进行合并,得到合并贴图。然后,从合并贴图中选取出属于同一批次的部件,并获取同一批次部件的骨骼矩阵。具体地,为了合批,首先需要合并贴图,即将需要合批的模型所用的贴图合并在一起,这一步的做法类似于静态合批,是在游戏制作阶段,离线完成的。相对于运行时动态合并贴图,这种方式的优势是避免了运行时的额外合并贴图操作导致的效率降低。
本实施例中,所述骨骼纹理为RGBA32F格式的浮点纹理,所述骨骼纹理的每一行用于存储同一部件的所有骨骼矩阵,所述同一部件中的每个骨骼对应一个骨骼矩阵,所述部件序号为所述部件在所述骨骼纹理中的行号。
具体地,采用一张RGBA32F格式的浮点纹理来存储同一批次部件的骨骼矩阵,得到骨骼纹理;其中,骨骼纹理的每一行用于存储一个部件的所有骨骼矩阵;部件中的每个骨骼对应一个骨骼矩阵,每个骨骼矩阵用3个像素进行表征;且将部件在骨骼纹理中的行号作为部件序号。
具体地,一般骨骼蒙皮包括CPU蒙皮和GPU蒙皮。CPU蒙皮即用CPU计算骨骼蒙皮,这种方法如果顶点数量较多,会导致CPU的计算量非常大,效率很低。而GPU蒙皮因为采用并行计算的方式,在顶点数量较多时也能比较高效完成,因此,本实施例采用了GPU蒙皮。在GPU蒙皮计算时,骨骼矩阵必须通过uniform类型(统一类型)的参数传入shader中。但是由于合并了材质贴图,合批后在同一批次的部件的骨骼动画很可能不一致,因此需要将在同一批次部件的骨骼矩阵进行合并。那么,就涉及到如何合并及合并后如何读取到相应的骨骼矩阵的问题。每个骨骼矩阵至少有12个float数据(浮点型数据类型)需要传入,一个部件最高40个骨骼,同一批次的部件数量难以估计。如果直接以float浮点形式,或者vec array分布式阵列形式传入着色器中,则着色器中uniform location(统一类型参数的位置)数量很可能不足,从而导致数据无法传入或传入错误。因此,本实施例采用一张RGBA32F格式的浮点纹理(floating texture,特点是每个像素的rgba值可以超出0到1的范围)来存储骨骼矩阵,这被称为骨骼纹理。那么每个骨骼矩阵的信息只需要3个像素就可以存储下来。如果一个部件占骨骼纹理的一行,那么纹理宽度只需要120个像素即可。
S204、从顶点数据中解析得到各顶点分别对应的部件序号。
本实施例中,部件序号为同一批次部件中各部件的骨骼矩阵在所述骨骼纹理中的序号。
本实施例中,将骨骼纹理中的部件序号标记到合批部件顶点池中的顶点数据中,以使得顶点着色器从顶点数据中读取出部件序号。
在一种可选的实施方式中,所述同一批次部件的顶点数据存储于第一顶点池,所述第一顶点池为所述同一批次部件的顶点缓冲区合并得来,所述第一顶点池的容量为第一预设值;所述同一批次部件的索引数据存储于第二顶点池,所述第二顶点池为所述同一批次部件的索引缓冲区合并得来,所述第二顶点池的容量为第二预设值。
具体地,由于传入着色器的信息只有uniform类型的参数和顶点数据,为了区分不同部件的顶点,正确获取待蒙皮顶点对应的骨骼矩阵,需要将骨骼纹理中的部件序号与合批部件顶点池中的顶点数据进行关联。本实施例,将顶点所在的部件在骨骼纹理中的行号,即部件序号(MeshIndex),标记在顶点数据中。本实施例,将顶点数据合并入顶点的骨骼权重数据(Blend Weight)里。其中,合并的计算公式如下:
BlendWeight+=MeshIndex*2
其中,MeshIndex表示顶点对应的部件序号,BlendWeight表示顶点的骨骼权重数据。
S206、根据部件序号从骨骼纹理中读取与各顶点所对应的骨骼矩阵。
本实施例中,根据解析公式获取与顶点数据关联的部件序号,然后从骨骼纹理中查找到与部件序号对应的骨骼矩阵。解析公式如下:
MeshIndex=floor(BlendWeight/2)
其中,MeshIndex表示顶点对应的部件序号,BlendWeight表示顶点的骨骼权重数据段。
S208、根据顶点数据和读取的骨骼矩阵,对同一批次部件进行合批渲染。
本实施例,在vertex shader根据获取的顶点数据、骨骼矩阵数据,完成蒙皮计算,然后发送给显卡单元,进行显示。
本实施例,通过获取待渲染的同一批次部件的骨骼纹理和顶点数据,骨骼纹理为存储同一批次部件的骨骼矩阵的浮点纹理;从顶点数据中解析得到各顶点分别对应的部件序号,部件序号为同一批次部件中各部件的骨骼矩阵在骨骼纹理中的序号;根据部件序号从骨骼纹理中读取与所述各顶点所对应的骨骼矩阵;根据顶点数据和所述读取的骨骼矩阵,对同一批次部件进行合批渲染。从而实现对于多个带不同骨骼动画的模型进行动态合批,大幅度降低批次数量,减少了每一帧需要绘制的Draw Call数,解决了因Draw Call过多导致的卡顿的问题,提高了画面帧率,降低了CPU的占用时间、发热量和能耗。同时,减少了因模型修改或删除导致的合批失效的问题,从而保持稳定帧率。
图3为本发明另一实施提供的骨骼动画的合批渲染方法的流程图,参见图3所示,本实施例中的方法可以包括:
S302、获取待渲染的同一批次部件的骨骼纹理和顶点数据,骨骼纹理为存储同一批次部件的骨骼矩阵的浮点纹理。
S304、从顶点数据中解析得到各顶点分别对应的部件序号。
其中,所述同一批次部件的顶点数据存储于第一顶点池,所述第一顶点池为所述同一批次部件的顶点缓冲区合并得来,所述第一顶点池的容量为第一预设值,所述同一批次部件的索引数据存储于第二顶点池,所述第二顶点池为所述同一批次部件的索引缓冲区合并得来,所述第二顶点池的容量为第二预设值;
需要说明的是,这里所述的索引数据是指顶点的索引数据。
S306、根据部件序号从骨骼纹理中读取与各顶点所对应的骨骼矩阵。
S308、根据顶点数据和读取的骨骼矩阵,对同一批次部件进行合批渲染。
S310、确定同一批次部件中需要隐藏的部件,将第二顶点池中需要隐藏的部件所对应的索引缓冲区置零,并更新第二顶点池的总剩余容量。
需要说明的是,本实施例不限定步骤S302、步骤S304、步骤S306、步骤S308与步骤S310之间的执行顺序。本领域技术人员可以根据需要改变步骤之间的执行顺序,其执行顺序的改变不影响技术方案的实施。
本实施例中,将同一批次部件的顶点缓冲区合并为一个顶点池,并对顶点池进行管理。其中,顶点池用于存储同一批次部件的顶点数据;其中,顶点池为预设的固定容量。
具体地,合批需要将不同部件的顶点缓冲器(或索引缓冲器)合并成一个,一般称之为顶点池。为了避免频繁更改顶点池大小,本实施例为一个合批的Draw Call设置了固定大小的顶点池(包括顶点缓冲器和索引缓冲器,分别为65536KB和32768KB大小),创建部件时就将其顶点数据和索引数据放到对应的顶点池中。后续将介绍如何管理顶点池,尤其在合批部件有增删时如何更新顶点池的问题。
具体地,一般合批方法中的顶点池,在删除或隐藏中间部分的部件时,可能导致缓冲区不连续。传统的处理方法是重新更新顶点池,或者干脆分为两个批次。为了减少更新、避免分批,本实施例在删除或隐藏部件时,不更新vertex buffer,而将相应的indexbuffer全部改为0,同时更新缓冲区的实际大小。这样索引为0的区域不参与渲染,因此不需要更新整个区域,也不需要分为两个批次。
本实施例中,步骤S302~步骤S308的具体实现过程和技术原理请参见图2所示的方法中步骤S202~步骤S208中的相关描述,此处不再赘述。
本实施例,通过获取待渲染的同一批次部件的骨骼纹理和顶点数据,骨骼纹理为存储同一批次部件的骨骼矩阵的浮点纹理;从顶点数据中解析得到各顶点分别对应的部件序号,部件序号为同一批次部件中各部件的骨骼矩阵在骨骼纹理中的序号;根据部件序号从骨骼纹理中读取与所述各顶点所对应的骨骼矩阵;根据顶点数据和所述读取的骨骼矩阵,对同一批次部件进行合批渲染。从而实现对于多个带不同骨骼动画的模型进行动态合批,大幅度降低批次数量,减少了每一帧需要绘制的Draw Call数,解决了因Draw Call过多导致的卡顿的问题,提高了画面帧率,降低了CPU的占用时间、发热量和能耗。同时,减少了因模型修改或删除导致的合批失效的问题,从而保持稳定帧率。
并且,本实施将需要合批的模型所用的贴图进行合并,得到合并贴图;将同一批次部件的顶点缓冲区合并为第一顶点池,将顶点的索引缓冲区合并为第二顶点池,并对顶点池进行管理,当同一批次中有需要隐藏的部件时,直接将第二顶点池中需要隐藏的部件对应的位置置零,因此置零的顶点不参与渲染,也不需要更新第一顶点池和分为两个批次渲染。因此本发明实施例提升了渲染处理的质量和效率,解决了因Draw Call过多导致的卡顿的问题,提高了画面帧率,降低了CPU的占用时间、发热量和能耗。同时,减少了因模型修改或删除导致的合批失效的问题,从而保持稳定帧率。
图4为本发明另一实施提供的骨骼动画的合批渲染方法的流程图,如图4所示,本实施例中的方法可以包括:
S402、若同一批次部件使用相同的着色器,但是输入着色器的参数不同,则对着色器中的参数进行合并处理后,用浮点纹理存储合并处理后的参数,得到参数纹理。
S404、在使用着色器时,从参数纹理中获取所述同一批次部件中各部件所对应的着色器参数。
本实施例中,若同一批次部件的使用的着色器相同,但是输入着色器的参数不同时,对参数进行合并处理后,用浮点纹理存储合并处理后的参数,得到参数纹理;在使用着色器时,从参数纹理中获取部件序号对应的着色器参数。
具体地,如果参与合批的部件使用的着色器一样,但是传入着色器的参数不一样,本实施例也需要将其合并。合并的方法类似于骨骼动画的合批,也合并成一张浮点纹理,称为参数纹理,查找参数纹理的方法与查找骨骼纹理的方法一致。
S406、获取待渲染的同一批次部件的骨骼纹理和顶点数据,骨骼纹理为存储同一批次部件的骨骼矩阵的浮点纹理。
S408、从顶点数据中解析得到各顶点分别对应的部件序号。
S410、根据部件序号从骨骼纹理中读取与各顶点所对应的骨骼矩阵。
S412、根据顶点数据和读取的骨骼矩阵,以及获取的各部件对应的着色器参数,对同一批次部件进行合批渲染。
本实施例中,步骤S406~步骤S412的具体实现过程和技术原理请参见图2所示的方法中步骤S202~步骤S208中的相关描述,此处不再赘述。
本实施例,通过获取待渲染的同一批次部件的骨骼纹理、顶点数据和着色器参数,骨骼纹理为存储同一批次部件的骨骼矩阵的浮点纹理;从顶点数据中解析得到各顶点分别对应的部件序号,部件序号为同一批次部件中各部件的骨骼矩阵在骨骼纹理中的序号;根据部件序号从骨骼纹理中读取与所述各顶点所对应的骨骼矩阵;根据顶点数据、所述读取的骨骼矩阵和着色器参数,对同一批次部件进行合批渲染。从而实现对于多个带不同骨骼动画的模型进行动态合批,大幅度降低批次数量,减少了每一帧需要绘制的Draw Call数,解决了因Draw Call过多导致的卡顿的问题,提高了画面帧率,降低了CPU的占用时间、发热量和能耗。同时,减少了因模型修改或删除导致的合批失效的问题,从而保持稳定帧率。
图5为本发明另一实施提供的骨骼动画的合批渲染方法的流程图,如图5所示,本实施例中包括可以包括:
S502、获取待渲染的同一批次部件的骨骼纹理和顶点数据,骨骼纹理为存储同一批次部件的骨骼矩阵的浮点纹理;
S504、从顶点数据中解析得到各顶点分别对应的部件序号;
S506、根据部件序号从骨骼纹理中读取与各顶点所对应的骨骼矩阵;
S508、根据顶点数据和读取的骨骼矩阵,对同一批次部件进行合批渲染;
本实施例中,步骤S502~步骤S508的具体实现过程和技术原理请参见图2所示的方法中步骤S202~步骤S208中的相关描述,此处不再赘述。
S510、确定有新增部件需要进行渲染时,判断第一顶点池和第二顶点池的末尾剩余容量是否分别足以容纳新增部件的顶点数据和索引数据。
其中,同一批次部件的顶点数据存储于第一顶点池,第一顶点池为同一批次部件的顶点缓冲区合并得来,第一顶点池的容量为第一预设值,同一批次部件的索引数据存储于第二顶点池,第二顶点池为同一批次部件的索引缓冲区合并得来,第二顶点池的容量为第二预设值。
具体的,
若第一顶点池和第二顶点池的末尾剩余容量分别足以容纳新增部件的顶点数据和索引数据,则将新增部件的顶点数据和索引数据分别存储至第一顶点池和第二顶点池的末尾。
若第一顶点池的总剩余容量不能容纳新增部件的顶点数据或第二顶点池的总剩余容量不能容纳新增部件的索引数据,则将新增部件的顶点数据和索引数据分别存储于新建批次的顶点池中。
若第一顶点池和第二顶点池的总剩余容量分别足以容纳新增部件的顶点数据和索引数据,而第一顶点池的末尾剩余容量不能容纳新增部件的顶点数据,则对第一顶点池中顶点数据的位置和第二顶点池中索引数据的位置进行更新,使得第一顶点池和第二顶点池的总剩余容量分别位于第一顶点池和第二顶点的末尾,将新增部件的顶点数据和索引数据分别存储至第一顶点池和第二顶点池的末尾。
若第一顶点池的末尾剩余容量足以容纳新增部件的顶点数据,第二顶点池的末尾剩余容量不能容纳新增部件的索引数据,而第二顶点池的总剩余容量足以容纳新增部件的索引数据,则将新增部件的顶点数据存储至第一顶点池的末尾,且对第二顶点池中索引数据的位置进行更新,使得第二顶点池的总剩余容量位于第二顶点的末尾,将新增部件的索引数据存储至第二顶点池的末尾。
图6-1、图6-2、图6-3呈现了不同顶点池中新增部件时的存储情况。
具体地,图6-1中(A)部分所示的第一顶点池的区域11部分存储了部件(斜线所示),末尾区域12部分为空白区域,未存储任何部件,并且区域12的容量足够容纳新增部件,因此可以将新增部件直接加入区域12中,加入新增部件后第一顶点池1的存储情况如图6-1中(B)部分所示。
图6-2中(A)部分所示的第一顶点池的区域21部分和区域23中分别存储了部件,区域22和区域24为空白区域,当需要新增部件时,且区域24和区域22均不足以容纳新增部件,但区域24和区域22的总容量足以容纳新增部件时,将区域23中存储的部件移至区域22中存储,因此区域23变为空白区域,并且区域22还剩余一部分空白区域,区域22剩余的空白区域加上区域23也即为区域22的总面积,因此此时第一顶点池的空白区域全部位于第一顶点池的末尾,且可以容纳新增部件,因此将新增部件加入末尾即可。
图6-3中区域31部分存储了部件,区域32为空白区域,当需要新增部件,且空白区域32不足以容纳新增部件时,此时,需要新建一个批次,将新增部件的顶点数据和索引数据分别存储于新建批次的顶点池中。
需要说明的是,第二顶点池和第一顶点池的存储原理类似,其具体存储情况可以参见图6-1、图6-2、图6-3,此处不再赘述。
本实施例,通过获取待渲染的同一批次部件的骨骼纹理和顶点数据,骨骼纹理为存储同一批次部件的骨骼矩阵的浮点纹理;从顶点数据中解析得到各顶点分别对应的部件序号,部件序号为同一批次部件中各部件的骨骼矩阵在骨骼纹理中的序号;根据部件序号从骨骼纹理中读取与所述各顶点所对应的骨骼矩阵;根据顶点数据和所述读取的骨骼矩阵,对同一批次部件进行合批渲染。从而实现对于多个带不同骨骼动画的模型进行动态合批,大幅度降低批次数量,减少了每一帧需要绘制的Draw Call数,解决了因Draw Call过多导致的卡顿的问题,提高了画面帧率,降低了CPU的占用时间、发热量和能耗。同时,对顶点池进行管理,当增加部件时,根据第一顶点池和第二顶点池当前的存储情况来存储新增的顶点池,合理有效地理由了顶点池,提高了存储效率。
图7为本发明一实施例提供的骨骼动画的合批渲染装置的结构示意图,如图7所示,本实施例的骨骼动画的动态合批装置可以包括:
获取模块702,用于获取待渲染的同一批次部件的骨骼纹理和顶点数据,所述骨骼纹理为存储所述同一批次部件的骨骼矩阵的浮点纹理;
解析模块704,用于从所述顶点数据中解析得到各顶点分别对应的部件序号,所述部件序号为所述同一批次部件中各部件的骨骼矩阵在所述骨骼纹理中的序号;
读取模块706,用于根据所述部件序号从所述骨骼纹理中读取与所述各顶点所对应的骨骼矩阵;
渲染模块708,用于根据所述顶点数据和所述读取的骨骼矩阵,对所述同一批次部件进行合批渲染。
在一种可能的设计中,所述同一批次部件在合批渲染时所使用的贴图为各部件所对应的贴图的合并贴图。
在一种可能的设计中,所述骨骼纹理为RGBA32F格式的浮点纹理,所述骨骼纹理的每一行用于存储同一部件的所有骨骼矩阵,所述同一部件中的每个骨骼对应一个骨骼矩阵,所述部件序号为所述部件在所述骨骼纹理中的行号。
在一种可能的设计中,所述同一批次部件的顶点数据存储于第一顶点池,所述第一顶点池为所述同一批次部件的顶点缓冲区合并得来,所述第一顶点池的容量为第一预设值;
所述同一批次部件的索引数据存储于第二顶点池,所述第二顶点池为所述同一批次部件的索引缓冲区合并得来,所述第二顶点池的容量为第二预设值。
在一种可能的设计中,还包括:
确定模块710,用于确定所述同一批次部件中需要隐藏的部件,将所述第二顶点池中所述需要隐藏的部件所对应的索引缓冲区置零,并更新所述第二顶点池的总剩余容量。
在一种可能的设计中,还包括:
顶点池更新模块712,用于确定有新增部件需要进行渲染时,判断所述第一顶点池和第二顶点池的末尾剩余容量是否分别足以容纳所述新增部件的顶点数据和索引数据;
若所述第一顶点池和第二顶点池的末尾剩余容量分别足以容纳所述新增部件的顶点数据和索引数据,则将所述新增部件的顶点数据和索引数据分别存储至所述第一顶点池和第二顶点池的末尾;
若所述第一顶点池的总剩余容量不能容纳所述新增部件的顶点数据或所述第二顶点池的总剩余容量无法容纳所述新增部件的索引数据,则将所述新增部件的顶点数据和索引数据分别存储于新建批次的顶点池中;
若所述第一顶点池和第二顶点池的总剩余容量分别足以容纳所述新增部件的顶点数据和索引数据,而所述第一顶点池的末尾剩余容量无法容纳所述新增部件的顶点数据,则对所述第一顶点池中顶点数据的位置和所述第二顶点池中索引数据的位置进行更新,使得所述第一顶点池和第二顶点池的总剩余容量分别位于所述第一顶点池和第二顶点的末尾,将所述新增部件的顶点数据和索引数据分别存储至所述第一顶点池和第二顶点池的末尾;
若所述第一顶点池的末尾剩余容量足以容纳所述新增部件的顶点数据,所述第二顶点池的末尾剩余容量无法容纳所述新增部件的索引数据,而所述第二顶点池的总剩余容量足以容纳所述新增部件的索引数据,则将所述新增部件的顶点数据存储至所述第一顶点池的末尾,且对所述第二顶点池中索引数据的位置进行更新,使得所述第二顶点池的总剩余容量位于所述第二顶点的末尾,将所述新增部件的索引数据存储至所述第二顶点池的末尾。
在一种可能的设计中,获取模块702,还用于:
若所述同一批次部件使用相同的着色器,但是输入所述着色器的参数不同,则对所述着色器中的参数进行合并处理后,用浮点纹理存储合并处理后的参数,得到参数纹理;
在使用着色器时,从所述参数纹理中获取所述同一批次部件中各部件所对应的着色器参数。
本实施例的骨骼动画的动态合批装置,可以执行图2、图3、图4、图5所示方法中的技术方案,其具体实现过程和技术原理参见图2、图3、图4、图5所示方法中的相关描述,此处不再赘述。
本实施例,通过获取模块获取待渲染的同一批次部件的骨骼纹理和顶点数据,骨骼纹理为存储同一批次部件的骨骼矩阵的浮点纹理;解析模块从顶点数据中解析得到各顶点分别对应的部件序号,部件序号为同一批次部件中各部件的骨骼矩阵在骨骼纹理中的序号;读取模块根据部件序号从骨骼纹理中读取与所述各顶点所对应的骨骼矩阵;渲染模块根据顶点数据和所述读取的骨骼矩阵,对同一批次部件进行合批渲染。从而实现对于多个带不同骨骼动画的模型进行动态合批,大幅度降低批次数量,减少了每一帧需要绘制的Draw Call数,解决了因Draw Call过多导致的卡顿的问题,提高了画面帧率,降低了CPU的占用时间、发热量和能耗。同时,减少了因模型修改或删除导致的合批失效的问题,从而保持稳定帧率。
图8为本发明一实施例提供的骨骼动画的合批渲染系统的结构示意图,如图8所示,本实施例的骨骼动画的合批渲染系统800可以包括:处理器802和存储器804。
存储器804,用于存储计算机程序(如实现上述骨骼动画的合批渲染方法的应用程序、功能模块等)、计算机指令等;
上述的计算机程序、计算机指令等可以分区存储在一个或多个存储器804中。并且上述的计算机程序、计算机指令、数据等可以被处理器802调用。
处理器802,用于执行存储器804存储的计算机程序,以实现上述实施例涉及的方法中的各个步骤。
具体可以参见前面方法实施例中的相关描述。
处理器802和存储器804可以是独立结构,也可以是集成在一起的集成结构。当处理器802和存储器804是独立结构时,存储器804、处理器802可以通过总线806耦合连接。
本实施例的服务器可以执行图2、图3、图4、图5所示方法中的技术方案,其具体实现过程和技术原理参见图2、图3、图4、图5所示方法中的相关描述,此处不再赘述。
此外,本申请实施例还提供一种计算机可读存储介质,计算机可读存储介质中存储有计算机执行指令,当用户设备的至少一个处理器执行该计算机执行指令时,用户设备执行上述各种可能的方法。
其中,计算机可读介质包括计算机存储介质和通信介质,其中通信介质包括便于从一个地方向另一个地方传送计算机程序的任何介质。存储介质可以是通用或专用计算机能够存取的任何可用介质。一种示例性的存储介质耦合至处理器,从而使处理器能够从该存储介质读取信息,且可向该存储介质写入信息。当然,存储介质也可以是处理器的组成部分。处理器和存储介质可以位于ASIC中。另外,该ASIC可以位于用户设备中。当然,处理器和存储介质也可以作为分立组件存在于通信设备中。
本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。
Claims (14)
1.一种骨骼动画的合批渲染方法,其特征在于,包括:
获取待渲染的同一批次部件的骨骼纹理和顶点数据,所述骨骼纹理为存储所述同一批次部件的骨骼矩阵的浮点纹理;
从所述顶点数据中解析得到各顶点分别对应的部件序号,所述部件序号为所述同一批次部件中各部件的骨骼矩阵在所述骨骼纹理中的序号;
根据所述部件序号从所述骨骼纹理中读取与所述各顶点所对应的骨骼矩阵;
根据所述顶点数据和所述读取的骨骼矩阵,对所述同一批次部件进行合批渲染;
所述同一批次部件的顶点数据存储于第一顶点池,所述第一顶点池为所述同一批次部件的顶点缓冲区合并得来,所述第一顶点池的容量为第一预设值;
所述同一批次部件的索引数据存储于第二顶点池,所述第二顶点池为所述同一批次部件的索引缓冲区合并得来,所述第二顶点池的容量为第二预设值。
2.根据权利要求1所述的方法,其特征在于,所述同一批次部件在合批渲染时所使用的贴图为各部件所对应的贴图的合并贴图。
3.根据权利要求1所述的方法,其特征在于,所述骨骼纹理为RGBA32F格式的浮点纹理,所述骨骼纹理的每一行用于存储同一部件的所有骨骼矩阵,所述同一部件中的每个骨骼对应一个骨骼矩阵,所述部件序号为所述部件在所述骨骼纹理中的行号。
4.根据权利要求1所述的方法,其特征在于,还包括:
确定所述同一批次部件中需要隐藏的部件,将所述第二顶点池中所述需要隐藏的部件所对应的索引缓冲区置零,并更新所述第二顶点池的总剩余容量。
5.根据权利要求1所述的方法,其特征在于,还包括:
确定有新增部件需要进行渲染时,判断所述第一顶点池和第二顶点池的末尾剩余容量是否分别足以容纳所述新增部件的顶点数据和索引数据;
若所述第一顶点池和第二顶点池的末尾剩余容量分别足以容纳所述新增部件的顶点数据和索引数据,则将所述新增部件的顶点数据和索引数据分别存储至所述第一顶点池和第二顶点池的末尾;
若所述第一顶点池的总剩余容量不能容纳所述新增部件的顶点数据或所述第二顶点池的总剩余容量不能容纳所述新增部件的索引数据,则将所述新增部件的顶点数据和索引数据分别存储于新建批次的顶点池中;
若所述第一顶点池和第二顶点池的总剩余容量分别足以容纳所述新增部件的顶点数据和索引数据,而所述第一顶点池的末尾剩余容量无法容纳所述新增部件的顶点数据,则对所述第一顶点池中顶点数据的位置和所述第二顶点池中索引数据的位置进行更新,使得所述第一顶点池和第二顶点池的总剩余容量分别位于所述第一顶点池和第二顶点的末尾,将所述新增部件的顶点数据和索引数据分别存储至所述第一顶点池和第二顶点池的末尾;
若所述第一顶点池的末尾剩余容量足以容纳所述新增部件的顶点数据,所述第二顶点池的末尾剩余容量不能容纳所述新增部件的索引数据,而所述第二顶点池的总剩余容量足以容纳所述新增部件的索引数据,则将所述新增部件的顶点数据存储至所述第一顶点池的末尾,且对所述第二顶点池中索引数据的位置进行更新,使得所述第二顶点池的总剩余容量位于所述第二顶点的末尾,将所述新增部件的索引数据存储至所述第二顶点池的末尾。
6.根据权利要求1所述的方法,其特征在于,还包括:
若所述同一批次部件使用相同的着色器,但是输入所述着色器的参数不同,则对所述着色器中的参数进行合并处理后,用浮点纹理存储合并处理后的参数,得到参数纹理;
在使用着色器时,从所述参数纹理中获取所述同一批次部件中各部件所对应的着色器参数。
7.一种骨骼动画的合批渲染装置,其特征在于,包括:
获取模块,用于获取待渲染的同一批次部件的骨骼纹理和顶点数据,所述骨骼纹理为存储所述同一批次部件的骨骼矩阵的浮点纹理;所述同一批次部件的顶点数据存储于第一顶点池,所述第一顶点池为所述同一批次部件的顶点缓冲区合并得来,所述第一顶点池的容量为第一预设值;所述同一批次部件的索引数据存储于第二顶点池,所述第二顶点池为所述同一批次部件的索引缓冲区合并得来,所述第二顶点池的容量为第二预设值;
解析模块,用于从所述顶点数据中解析得到各顶点分别对应的部件序号,所述部件序号为所述同一批次部件中各部件的骨骼矩阵在所述骨骼纹理中的序号;
读取模块,用于根据所述部件序号从所述骨骼纹理中读取与所述各顶点所对应的骨骼矩阵;
渲染模块,用于根据所述顶点数据和所述读取的骨骼矩阵,对所述同一批次部件进行合批渲染。
8.根据权利要求7所述的装置,其特征在于,所述同一批次部件在合批渲染时所使用的贴图为各部件所对应的贴图的合并贴图。
9.根据权利要求7所述的装置,其特征在于,所述骨骼纹理为RGBA32F格式的浮点纹理,所述骨骼纹理的每一行用于存储同一部件的所有骨骼矩阵,所述同一部件中的每个骨骼对应一个骨骼矩阵,所述部件序号为所述部件在所述骨骼纹理中的行号。
10.根据权利要求7所述的装置,其特征在于,还包括:
确定模块,用于确定所述同一批次部件中需要隐藏的部件,将所述第二顶点池中所述需要隐藏的部件所对应的索引缓冲区置零,并更新所述第二顶点池的总剩余容量。
11.根据权利要求7所述的装置,其特征在于,还包括:
顶点池更新模块,用于确定有新增部件需要进行渲染时,判断所述第一顶点池和第二顶点池的末尾剩余容量是否分别足以容纳所述新增部件的顶点数据和索引数据;
若所述第一顶点池和第二顶点池的末尾剩余容量分别足以容纳所述新增部件的顶点数据和索引数据,则将所述新增部件的顶点数据和索引数据分别存储至所述第一顶点池和第二顶点池的末尾;
若所述第一顶点池的总剩余容量不能容纳所述新增部件的顶点数据或所述第二顶点池的总剩余容量不能容纳所述新增部件的索引数据,则将所述新增部件的顶点数据和索引数据分别存储于新建批次的顶点池中;
若所述第一顶点池和第二顶点池的总剩余容量分别足以容纳所述新增部件的顶点数据和索引数据,而所述第一顶点池的末尾剩余容量无法容纳所述新增部件的顶点数据,则对所述第一顶点池中顶点数据的位置和所述第二顶点池中索引数据的位置进行更新,使得所述第一顶点池和第二顶点池的总剩余容量分别位于所述第一顶点池和第二顶点的末尾,将所述新增部件的顶点数据和索引数据分别存储至所述第一顶点池和第二顶点池的末尾;
若所述第一顶点池的末尾剩余容量足以容纳所述新增部件的顶点数据,所述第二顶点池的末尾剩余容量不能容纳所述新增部件的索引数据,而所述第二顶点池的总剩余容量足以容纳所述新增部件的索引数据,则将所述新增部件的顶点数据存储至所述第一顶点池的末尾,且对所述第二顶点池中索引数据的位置进行更新,使得所述第二顶点池的总剩余容量位于所述第二顶点的末尾,将所述新增部件的索引数据存储至所述第二顶点池的末尾。
12.根据权利要求7所述的装置,其特征在于,所述获取模块,还用于:
若所述同一批次部件使用相同的着色器,但是输入所述着色器的参数不同,则对所述着色器中的参数进行合并处理后,用浮点纹理存储合并处理后的参数,得到参数纹理;
在使用着色器时,从所述参数纹理中获取所述同一批次部件中各部件所对应的着色器参数。
13.一种骨骼动画的合批渲染系统,其特征在于,包括:存储器和处理器,存储器中存储有所述处理器的可执行指令;其中,所述处理器配置为经由执行所述可执行指令来执行权利要求1至6中任一项所述的骨骼动画的合批渲染方法。
14.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现权利要求1至6中任一项所述的骨骼动画的合批渲染方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910054507.8A CN109840931B (zh) | 2019-01-21 | 2019-01-21 | 骨骼动画的合批渲染方法、装置、系统及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910054507.8A CN109840931B (zh) | 2019-01-21 | 2019-01-21 | 骨骼动画的合批渲染方法、装置、系统及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109840931A CN109840931A (zh) | 2019-06-04 |
CN109840931B true CN109840931B (zh) | 2023-07-25 |
Family
ID=66883917
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910054507.8A Active CN109840931B (zh) | 2019-01-21 | 2019-01-21 | 骨骼动画的合批渲染方法、装置、系统及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109840931B (zh) |
Families Citing this family (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110544291B (zh) * | 2019-09-11 | 2023-05-09 | 珠海金山数字网络科技有限公司 | 一种图像渲染方法及装置 |
CN110570507B (zh) * | 2019-09-11 | 2023-09-19 | 珠海金山数字网络科技有限公司 | 一种图像渲染方法及装置 |
CN110738720B (zh) * | 2019-10-08 | 2022-01-07 | 腾讯科技(深圳)有限公司 | 特效渲染方法、装置、终端及存储介质 |
CN111309430B (zh) * | 2020-03-16 | 2021-12-10 | 广东趣炫网络股份有限公司 | 一种自动缓存用户交互界面节点的方法和相关装置 |
CN111617473A (zh) * | 2020-05-28 | 2020-09-04 | 腾讯科技(深圳)有限公司 | 虚拟攻击道具的显示方法和装置、存储介质和电子设备 |
CN111710020B (zh) * | 2020-06-18 | 2023-03-21 | 腾讯科技(深圳)有限公司 | 动画渲染方法和装置及存储介质 |
CN111968210A (zh) * | 2020-08-17 | 2020-11-20 | 北京像素软件科技股份有限公司 | 物体简化模型创建、显示方法、装置、设备及存储介质 |
CN112669419A (zh) * | 2020-12-22 | 2021-04-16 | 北京像素软件科技股份有限公司 | 用于渲染的方法、中央处理器、图像处理器、系统和存储介质 |
CN112669418A (zh) * | 2020-12-22 | 2021-04-16 | 北京像素软件科技股份有限公司 | 一种模型渲染的方法及装置 |
CN113426130B (zh) * | 2021-07-01 | 2024-05-28 | 网易(杭州)网络有限公司 | 一种模型的合批处理方法和装置 |
CN113457162B (zh) * | 2021-07-16 | 2023-09-19 | 腾讯科技(深圳)有限公司 | 一种虚拟对象展示方法及相关装置 |
CN113835890A (zh) * | 2021-09-24 | 2021-12-24 | 厦门雅基软件有限公司 | 一种渲染数据处理方法、装置、设备和存储介质 |
CN116977537A (zh) * | 2022-04-22 | 2023-10-31 | 北京字跳网络技术有限公司 | 一种合批渲染方法、装置、设备及存储介质 |
CN117917691A (zh) * | 2022-10-21 | 2024-04-23 | 华为技术有限公司 | 一种渲染指令的合批方法及装置 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103606180A (zh) * | 2013-11-29 | 2014-02-26 | 广州菲动软件科技有限公司 | 3d骨骼动画的渲染方法及装置 |
CN108122266A (zh) * | 2017-12-20 | 2018-06-05 | 成都卓杭网络科技股份有限公司 | 一种缓存骨骼动画渲染纹理的方法、装置和存储介质 |
CN108711182A (zh) * | 2018-05-03 | 2018-10-26 | 广州爱九游信息技术有限公司 | 渲染处理方法、装置及移动终端设备 |
-
2019
- 2019-01-21 CN CN201910054507.8A patent/CN109840931B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103606180A (zh) * | 2013-11-29 | 2014-02-26 | 广州菲动软件科技有限公司 | 3d骨骼动画的渲染方法及装置 |
CN108122266A (zh) * | 2017-12-20 | 2018-06-05 | 成都卓杭网络科技股份有限公司 | 一种缓存骨骼动画渲染纹理的方法、装置和存储介质 |
CN108711182A (zh) * | 2018-05-03 | 2018-10-26 | 广州爱九游信息技术有限公司 | 渲染处理方法、装置及移动终端设备 |
Also Published As
Publication number | Publication date |
---|---|
CN109840931A (zh) | 2019-06-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109840931B (zh) | 骨骼动画的合批渲染方法、装置、系统及存储介质 | |
US20230053462A1 (en) | Image rendering method and apparatus, device, medium, and computer program product | |
US20210042991A1 (en) | Object loading method and apparatus, storage medium, and electronic device | |
US9916674B2 (en) | Baking path rendering objects into compact and efficient memory representations | |
US6961065B2 (en) | Image processor, components thereof, and rendering method | |
US7928990B2 (en) | Graphics processing unit with unified vertex cache and shader register file | |
US7042462B2 (en) | Pixel cache, 3D graphics accelerator using the same, and method therefor | |
US8941669B1 (en) | Split push buffer rendering for scalability | |
CN111400024B (zh) | 渲染过程中的资源调用方法、装置和渲染引擎 | |
US9811940B2 (en) | Bandwidth reduction using vertex shader | |
US9355464B2 (en) | Dynamic generation of texture atlases | |
CN101236661A (zh) | 在计算机中管理纹理数据的系统与方法 | |
KR20180056316A (ko) | 타일-기반 렌더링을 수행하는 방법 및 장치 | |
EP1255227A1 (en) | Vertices index processor | |
CN101754039A (zh) | 面向移动设备的3d参数解码系统 | |
CN108780582A (zh) | 可见性信息修改 | |
JP2011090663A (ja) | 画像処理装置及びプログラム | |
US10192348B2 (en) | Method and apparatus for processing texture | |
CN112669419A (zh) | 用于渲染的方法、中央处理器、图像处理器、系统和存储介质 | |
CN103782324A (zh) | 使用纹理坐标导数的加速的纹理查找 | |
CN111402369A (zh) | 互动广告的处理方法、装置、终端设备及存储介质 | |
US20060022990A1 (en) | Generating subdivision surfaces on a graphics hardware with floating-point fragment shaders | |
US20160284043A1 (en) | Graphics processing | |
CN110874856A (zh) | 一种基于gpu特性的实时渲染gui的优化方法 | |
CN112419430A (zh) | 动画播放方法、装置及计算机设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |