本发明涉及游戏界面图像处理,尤其涉及一种动态调整小图纹理的图集处理方法、设备及介质。
背景技术:
1、在游戏开发中会用到很多的图片,每张图片对应一个纹理。游戏渲染时,会为每一个纹理分别提交一次绘制命令。当游戏渲染界面的纹理较多时,会导致游戏帧率下降,从而影响游戏体验。
2、如果把小图片预先合并到一张大的图集里,就可以使用一次绘制完成图集中所有对应的图片的渲染操作,从而大大降低因渲染不同纹理而导致的绘制命令增多的问题。市面上有很多图集生成与使用的方法,主要有如下两种方式:一是预先使用工具将小图合并到图集中,在项目使用直接使用图集而不是小图,即使用静态图集。二是在游戏运行过程中,动态的将小图合并到图集中,其按照插入到图集中的顺序依次排列,图集中每一行的高度即该行中最高图片的高度,如果小图较多,会生成多个图集。
3、上述两种方式都有较大的局限性:使用静态图集比较影响开发效率,开发过程中经常会有修改图片资源的需求,每次变更都要重新打图集;自动合图虽然方便,但现有的技术空间利用率较低,空间利用率受小图高度差异和合图顺序等的影响,会出现大量空闲区域,且不支持动态移除小图,导致图集数量不断增加,随着图集数量的增加,很难保证界面上显示的不同小图可以打进同一个图集中,导致在渲染时依然会出现需要频繁切换图集,从而增加绘制命令调用的情况。
技术实现思路
1、本发明要解决的技术问题,在于提供一种动态调整小图纹理的图集处理方法、设备及介质,有效避免游戏渲染过程因图片较多而导致绘制命令多、渲染效率低的问题,同时提高内存利用率。
2、第一方面,本发明提供了一种动态调整小图纹理的图集处理方法,包括:
3、步骤1、设置一图集,将图集纹理划分成树状区域,预先定义根区域为水平区域或垂直区域,并设置区域的分裂方式,对于水平区域的进一步拆分按照左右分裂,左边为垂直区域,右边为水平区域,对于垂直区域的进一步拆分按照上下分裂,上边为水平区域,下边为垂直区域;
4、步骤2、在需要插入小图到图集时,从根区域逐层向下找到一个能放得下当前小图的区域并结合预设的区域分裂方式将小图插入到图集中;
5、步骤3、在每帧渲染前检查纹理的空闲区域是否小于阈值,若是,则删除使用频率低于一预设值的小图,并释放空闲区域。
6、进一步的,所述步骤2中“将小图插入到图集中”的具体过程如下:
7、步骤21、从头根区域开始递归遍历,找到大小足够容纳该小图的空闲区域;
8、步骤22、判断所述空闲区域是否为水平区域,若是,则进入步骤23,否则,进入步骤24;
9、步骤23、判断所述空闲区域的宽度减去小图宽度是否小于最小宽度,若是,则把小图放进所述空闲区域,结束流程;否则,将所述空闲区域分裂成左右两个区域,设定其中的左边区域为垂直区域,右边区域为水平区域,并将左边区域的宽度设置为小图宽度,再将左边区域分裂成上下两个区域,上边区域为水平区域,下边区域为垂直区域,且上边区域大小为小图大小,插入小图至上边区域中;
10、步骤24、判断所述空闲区域的高度减去小图高度是否小于最小高度,若是,则把小图放进所述空闲区域,结束流程;否则,将所述空闲区域分裂成上下两个区域,设定其中的上边区域为水平区域,下边区域为垂直区域,并将上边区域的高度设置为小图高度,再将上边区域分裂成左右两个区域,左边区域为垂直区域,右边区域为水平区域,且左边区域大小为小图大小,插入小图至左边区域中。
11、进一步的,在通过分裂区域来插入小图之后,还对分裂的区域进行重整,具体如下:
12、在所述步骤23中“插入小图至上边区域中”之后还包括:判断所述空闲区域的父区域是否也是水平区域,若是,则删除所述空闲区域,把所述空闲区域的左右两个区域直接添加到所述空闲区域的父区域中,否则,把左右两个区域添加到所述空闲区域中;
13、在所述步骤24中“插入小图至左边区域中”之后还包括:判断所述空闲区域的父区域是否也是垂直区域,若是,则删除所述空闲区域,把所述空闲区域的上下两个区域直接添加到所述空闲区域的父区域中,否则,把上下两个区域添加到所述空闲区域中。
14、进一步的,所述步骤2之前还包括初始化根区域,定义根区域大小,并定义根区域方向为水平或垂直。
15、进一步的,在首次插入小图到图集时,按照先序遍历方式递归插入符合条件的小图直至图集插满为止,所述符合条件的小图是非压缩格式的小图且小图大小要小于 预设大小;之后刷帧时如果有小图需要渲染且小图不在图集中,才进行动态插入小图至图集。
16、进一步的,所述步骤3具体包括:
17、步骤31、在每帧渲染前检查纹理的空闲区域是否小于阈值,若是,则对所有小图按照使用频次排序,进入步骤32,否则,结束流程;
18、步骤32、根据要回收的区域大小和小图排列顺序计算需要删除的小图;
19、步骤33、删除小图所在的区域;
20、步骤34、重置当前区域为空闲区域,判断空闲区域是否存在父区域,若是,则获取其在父区域的索引,依次合并索引之前的区域,直到遇到非空闲区域,再依次合并索引之后的区域,直到遇到非空闲区域;否则,结束流程;
21、步骤35、若空闲区域的父区域的子区域只剩一个,则删除当前空闲区域,将其父区域作为当前区域返回步骤34进行递归删除。
22、第二方面,本发明提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现第一方面所述的方法。
23、第三方面,本发明提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现第一方面所述的方法。
24、本发明的优点在于:通过设计动态图集,支持动态添加和移除小图,只需要一张图集即可满足运行时需求,减少渲染过程的绘制命令数量,提高游戏渲染效率;并通过自定义的小图插入与删除算法,合理利用区域,使得图集内部图像更为紧凑,减少空间的浪费,提高内存空间利用率。
1.一种动态调整小图纹理的图集处理方法,其特征在于:包括:
2.如权利要求1所述的一种动态调整小图纹理的图集处理方法,其特征在于:所述步骤2中“将小图插入到图集中”的具体过程如下:
3.如权利要求2所述的一种动态调整小图纹理的图集处理方法,其特征在于:在通过分裂区域来插入小图之后,还对分裂的区域进行重整,具体如下:
4.如权利要求1所述的一种动态调整小图纹理的图集处理方法,其特征在于:所述步骤2之前还包括初始化根区域,定义根区域大小,并定义根区域方向为水平或垂直。
5. 如权利要求1所述的一种动态调整小图纹理的图集处理方法,其特征在于:在首次插入小图到图集时,按照先序遍历方式递归插入符合条件的小图直至图集插满为止,所述符合条件的小图是非压缩格式的小图且小图大小要小于 预设大小;之后刷帧时如果有小图需要渲染且小图不在图集中,才进行动态插入小图至图集。
6.如权利要求1所述的一种动态调整小图纹理的图集处理方法,其特征在于:所述步骤3具体包括:
7.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1至6任一项所述的方法。
8.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1至6任一项所述的方法。
