一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

图形渲染的方法、装置、存储介质以及电子设备与流程

2022-04-09 08:27:28 来源:中国专利 TAG:


1.本公开涉及图像处理技术领域,具体而言,涉及一种图形渲染的方法、装置、存储介质以及电子设备。


背景技术:

2.现有技术中,为了游戏提升渲染效率,一般都会使用合批技术绘制元素,例如,虚幻引擎ue4中一个可视化的用户界面ui创作工具umg,是基于用户界面slate ui框架进行实现一套基于层layer的ui合批,其基本思想是将拥有相同层地址layerid的相邻绘制元素进行合并,需要高度依赖layerid的正确性。
3.基于层layer的ui合批方案中,layerid管理非常复杂,不同控件组合下,往往会layerid相同导致ui合批,但是容易出现渲染层级错乱问题,这种错乱尤其对于画布控件canvaspanel尤为明显。此外,基于layer的合批机制,在大量使用画布控件的情况下,合批效果并不理想。
4.针对上述的问题,目前尚未提出有效的解决方案。


技术实现要素:

5.本公开实施例提供了一种图形渲染的方法、装置、存储介质以及电子设备,以至少解决现有技术中的图形渲染的方案存在合批渲染处理难度大且渲染效果差的技术问题。
6.根据本公开实施例的一个方面,提供了一种图形渲染的方法,包括:获取由多个绘制元素组成的绘制队列;按照上述绘制队列中各绘制元素的绘制顺序对上述多个绘制元素进行碰撞测试,上述碰撞测试用于确定上述多个绘制元素中互相之间不交叉且材质相同的目标绘制元素;当上述多个绘制元素中存在上述目标绘制元素时,对上述目标绘制元素进行合批渲染。
7.根据本公开实施例的另一方面,还提供了一种图形渲染的装置,包括:获取模块,用于获取由多个绘制元素组成的绘制队列;测试模块,用于按照上述绘制队列中各绘制元素的绘制顺序对上述多个绘制元素进行碰撞测试,得到测试结果,其中,上述碰撞测试用于确定上述多个绘制元素中互相之间不交叉且材质相同的目标绘制元素;处理模块,用于当上述多个绘制元素中存在上述目标绘制元素时,对上述目标绘制元素进行合批渲染。
8.根据本公开实施例的另一方面,还提供了一种非易失性存储介质,上述存储介质中存储有计算机程序,其中,上述计算机程序被设置为运行时执行上述任一项中上述的图形渲染的方法。
9.根据本公开实施例的另一方面,还提供了一种处理器,上述处理器用于运行程序,其中,上述程序被设置为运行时执行上述任一项中上述的图形渲染的方法。
10.根据本公开实施例的另一方面,还提供了一种电子设备,包括存储器和处理器,上述存储器中存储有计算机程序,上述处理器被设置为运行上述计算机程序以执行上述任一项中上述的图形渲染的方法。
11.在本公开实施例中,通过获取由多个绘制元素组成的绘制队列;按照上述绘制队列中各绘制元素的绘制顺序对上述多个绘制元素进行碰撞测试,上述碰撞测试用于确定上述多个绘制元素中互相之间不交叉且材质相同的目标绘制元素;当上述多个绘制元素中存在上述目标绘制元素时,对上述目标绘制元素进行合批渲染,达到了快速并有效的对多个绘制元素进行合批处理的目的,从而实现了提升图像渲染中对多个绘制元素的合批渲染效率,降低对多个绘制元素的合批渲染处理难度的技术效果,进而解决了现有技术中的图形渲染的方案存在合批渲染处理难度大且渲染效果差的技术问题。
附图说明
12.此处所说明的附图用来提供对本公开的进一步理解,构成本技术的一部分,本公开的示意性实施例及其说明用于解释本公开,并不构成对本公开的不当限定。在附图中:
13.图1是根据本公开实施例的图形渲染的方法的流程图;
14.图2a是根据本公开实施例的一种可选的绘制元素的排列顺序示意图;
15.图2b是根据本公开实施例的另一种可选的绘制元素的排列顺序示意图;
16.图2c是根据本公开实施例的另一种可选的绘制元素的排列顺序示意图;
17.图2d是根据本公开实施例的另一种可选的绘制元素的排列顺序示意图;
18.图3是根据本公开实施例的一种可选的图形渲染的方法的流程图;
19.图4是根据本公开实施例的一种可选的图形渲染的方法的流程图;
20.图5是根据本公开实施例的一种可选的对图片空间进行二叉树划分的示意图;
21.图6是根据本公开实施例的一种图形渲染的装置的结构示意图。
具体实施方式
22.为了使本技术领域的人员更好地理解本公开方案,下面将结合本公开实施例中的附图,对本公开实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本公开一部分的实施例,而不是全部的实施例。基于本公开中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本公开保护的范围。
23.需要说明的是,本公开的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本公开的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
24.首先,为方便理解本公开实施例,下面将对本公开中所涉及的部分术语或名词进行解释说明:
25.纹理贴图坐标(uv):通常具有两个坐标轴u和v,其中,u代表横向坐标上的分布,v代表纵向坐标上的分布。它定义了图片上每个点的位置信息,以决定纹理表面贴图的位置,即将图像上每一个点精确对应到模型物体的表面。
26.根据本公开实施例,提供了一种图形渲染的方法实施例,需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
27.该方法实施例的技术方案可以在移动终端、计算机终端或者类似的运算装置中执行。以运行在移动终端上为例,该移动终端可以是智能手机(如android手机、ios手机等)、平板电脑、掌上电脑以及移动互联网设备(mobile internet devices,简称为mid)、pad等终端设备。移动终端可以包括一个或多个处理器(处理器可以包括但不限于中央处理器(cpu)、图形处理器(gpu)、数字信号处理(dsp)芯片、微处理器(mcu)、可编程逻辑器件(fpga)、神经网络处理器(npu)、张量处理器(tpu)、人工智能(ai)类型处理器等的处理装置)和用于存储数据的存储器。可选的,上述移动终端还可以包括用于通信功能的传输设备、输入输出设备以及显示设备。本领域普通技术人员可以理解,上述结构描述仅为示意,其并不对上述移动终端的结构造成限定。例如,移动终端还可包括比上述结构描述更多或者更少的组件,或者具有与上述结构描述不同的配置。
28.存储器可用于存储计算机程序,例如,应用软件的软件程序以及模块,如本公开实施例中的游戏中生成贴图的方法对应的计算机程序,处理器通过运行存储在存储器内的计算机程序,从而执行各种功能应用以及数据处理,即实现上述的游戏中生成贴图的方法。存储器可包括高速随机存储器,还可包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器可进一步包括相对于处理器远程设置的存储器,这些远程存储器可以通过网络连接至移动终端。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
29.传输设备用于经由一个网络接收或者发送数据。上述的网络具体实例可包括移动终端的通信供应商提供的无线网络。在一个实例中,传输设备包括一个网络适配器(network interface controller,简称为nic),其可通过基站与其他网络设备相连从而可与互联网进行通讯。在一个实例中,传输设备可以为射频(radio frequency,简称为rf)模块,其用于通过无线方式与互联网进行通讯。该方法实施例的技术方案可以应用于各种通信系统,例如:全球移动通讯(global system of mobile communication,简称为gsm)系统、码分多址(code division multiple access,简称为cdma)系统、宽带码分多址(wideband code division multiple access,简称为wcdma)系统、通用分组无线业务(general packet radio service,简称为gprs)、长期演进(long term evolution,简称为lte)系统、lte频分双工(frequency division duplex,简称为fdd)系统、lte时分双工(time division duplex,简称为tdd)、通用移动通信系统(universal mobile telecommunication system,简称为umts)、全球互联微波接入(worldwide interoperability for microwave access,简称为wimax)通信系统或5g系统等。可选的,多个移动终端之间可以进行设备到设备(device to device,简称为d2d)通信。可选的,5g系统或5g网络又被称为新无线(new radio,简称为nr)系统或nr网络。
30.显示设备可以例如触摸屏式的液晶显示器(lcd)和触摸显示器(也被称为“触摸屏”或“触摸显示屏”)。该液晶显示器可使得用户能够与移动终端的用户界面进行交互。在一些实施例中,上述移动终端具有图形用户界面(gui),用户可以通过触摸触敏表面上的手
指接触和/或手势来与gui进行人机交互,此处的人机交互功能可选的包括如下交互:创建网页、绘图、文字处理、制作电子文档、游戏、视频会议、即时通信、收发电子邮件、通话界面、播放数字视频、播放数字音乐和/或网络浏览等、用于执行上述人机交互功能的可执行指令被配置/存储在一个或多个处理器可执行的计算机程序产品或可读非易失性存储介质中。
31.现有技术中,为了提升游戏渲染效率,通常会使用合批技术绘制元素。一般来说,游戏引擎通过提交顶点、设置纹理贴图、设置种色器shader以及渲染参数,最后调用图形应用程序接口api(如draw primitive)完成绘制的行为,上述过程称为一个渲染批次。所谓合批,即将具有相同渲染状态的绘制命令,合并在一起变成一个绘制命令,从而通过一个渲染批次完成多个批次才能完成的工作。渲染状态切换通常是比较耗时的,合批可以有效减少状态切换所耗费的时间,从而提升游戏渲染效率。
32.umg是虚幻引擎ue4中一个可视化的用户界面ui创作工具,它是基于用户界面slate ui框架进行实现的。slate中默认实现了一套基于层layer的ui合批方案,其基本思想是将拥有相同层地址layerid的相邻绘制元素进行合并,上述方案高度依赖layerid的正确性。
33.layerid的初始值为0,在绘制整个控件树的时候,根据不同的控件类型更新layerid。常用控件的layerid生成方式有:控件基类swidget,使用父控件layerid;swidget包含一个子控件的控件类,子控件使用layerid 1层级;spanel面板类控件,子控件直接使用spanel控件的layerid;画布控件类sconstraintcanvas(对应umg中的canvaspanel),在未开启画布canvas合批优化之前,每个子控件的layerid会依次递增,开启之后,相邻相同zorder的子控件使用相同的layerid,子控件layerid会取当前最大值。
34.由此可以看出,slate中基于层layer的ui合批方案中,layerid管理非常复杂,不同控件组合下,往往会layerid相同导致ui合批,但是容易出现渲染层级错乱问题,这种错乱尤其对于画布控件canvaspanel尤为明显。此外,基于layer的合批机制,在大量使用画布控件的情况下,合批效果并不理想。
35.图1是根据本公开实施例的一种图形渲染的方法的流程图,如图1所示,该方法包括如下步骤:
36.步骤s102,获取由多个绘制元素组成的绘制队列;
37.步骤s104,按照上述绘制队列中各绘制元素的绘制顺序对上述多个绘制元素进行碰撞测试,上述碰撞测试用于确定上述多个绘制元素中互相之间不交叉且材质相同的目标绘制元素;
38.步骤s106,当上述多个绘制元素中存在上述目标绘制元素时,对上述目标绘制元素进行合批渲染。
39.可选的,上述待合并的绘制元素为材质相同的两个绘制元素,其中,上述材质可以但不限于包括:纹理信息、着色shader信息以及材质参数信息,等等。
40.可选的,上述碰撞测试的算法可以但不限于为包围盒算法(即aabb,axis-aligned bounding box算法),用于确定上述多个绘制元素中互相之间不交叉且材质相同的目标绘制元素。
41.可选的,本公开实施例除了判断上述待合并的绘制元素是否相同外,同时考虑上述待合并的绘制元素的绘制顺序,即通过上述碰撞测试判定上述多个绘制元素中是否存在
待合并的绘制元素,即判定是否存在其它材质不同的元素与上述两个绘制元素均存在交叉的情况,若不存在,则上述两个绘制元素方可进行合批。
42.需要说明的是,针对绘制元素的碰撞测试,如果要做到全局最优的结果,算法复杂度会比较高,反而会导致cpu的消耗增加。基于此,本公开实施例采用一种相对简化的策略,即按照绘制顺序,依次判定当前绘制元素与后续绘制元素能否进行合批操作。
43.基于相关技术中存在的layer的合批方案存在合批管理难度大、合批效果差等问题,本公开实施例提出一种图形渲染的方法,该方法仅需关注绘制元素之间的重叠关系以及渲染状态,而不再关注layer这个抽象概念,从而极大的提升合批效果。
44.本公开实施例的核心思路在于判断两绘制元素能否进行合批,除了判断两绘制元素的材质(例如纹理,着色shader,材质参数等)是否相同外,还需要判断两个绘制元素绘制顺序之间,是否存在其它材质不同的元素与上述两个绘制元素均存在交叉的情况,若不存在,则上述两个绘制元素方可进行合批。
45.例如,排列顺序以此为a、b、c的三个绘制元素为例,其中,绘制元素a和绘制元素c材质相同,绘制元素b与绘制元素a和绘制元素c的材质不同。若绘制元素a、绘制元素b和绘制元素c均不交叉,如图2a所示,上述绘制元素a和绘制元素c可以合批;若绘制元素a与绘制元素b交叉,但绘制元素b与绘制元素c不交叉,如图2b所示,上述绘制元素a和绘制元素c可以合批;若绘制元素a与绘制元素b不交叉,但绘制元素b与绘制元素c交叉,如图2c所示,上述绘制元素a和绘制元素c可以合批;若绘制元素a与绘制元素b交叉,且绘制元素b与绘制元素c交叉,如图2d所示,上述绘制元素a和绘制元素c不可以合批,即只要上述绘制元素b不同时与上述绘制元素a和绘制元素c,则上述绘制元素a和绘制元素c即可进行合批。
46.在本公开实施例中,采用绘制元素处理的方式,通过获取由多个绘制元素组成的绘制队列;按照上述绘制队列中各绘制元素的绘制顺序对上述多个绘制元素进行碰撞测试,上述碰撞测试用于确定上述多个绘制元素中互相之间不交叉且材质相同的目标绘制元素;当上述多个绘制元素中存在上述目标绘制元素时,对上述目标绘制元素进行合批渲染,达到了快速并有效的对多个绘制元素进行合批处理的目的,从而实现了提升图像渲染中对多个绘制元素的合批渲染效率,降低对多个绘制元素的合批渲染处理难度的技术效果,进而解决了现有技术中的图形渲染的方案存在合批渲染处理难度大且渲染效果差的技术问题。
47.作为一种可选的实施例,图3是根据本公开实施例的一种可选的图形渲染的方法的流程图,如图3所示,按照上述绘制顺序对上述多个绘制元素进行碰撞测试,得到上述测试结果包括:
48.步骤s202,从上述多个绘制元素中选取第一绘制元素;
49.步骤s204,按照上述绘制顺序,依次比较上述第一绘制元素的材质与后续绘制元素的材质是否相同;
50.步骤s206,当在上述后续绘制元素中查找到第二绘制元素时,将上述第一绘制元素与上述第二绘制元素之间的中间绘制元素依次分别与上述第一绘制元素以及上述第二绘制元素进行碰撞测试,其中,上述第一绘制元素的材质与上述第二绘制元素的材质相同;
51.步骤s208,当存在中间绘制元素同时与上述第一绘制元素和上述第二绘制元素发生碰撞时,则确定上述第一绘制元素与上述第二绘制元素之间存在交叉;
52.步骤s210,当不存在中间绘制元素同时与上述第一绘制元素和上述第二绘制元素发生碰撞时,则确定上述第一绘制元素与上述第二绘制元素之间不存在交叉。
53.可选的,上述第一绘制元素的材质与上述第二绘制元素的材质相同,上述中间绘制元素与上述第一绘制元素和上述第二绘制元素材质不同,其中,上述材质可以但不限于包括:纹理信息、着色shader信息以及材质参数信息,等等。
54.可选的,上述中间绘制元素为上述第一绘制元素与上述第二绘制元素之间的绘制元素中的前m个绘制元素,其中,上述m为正整数。
55.作为一种可选的实施例,多个绘制元素的绘制顺序依次为:e0,e1,e2,

,en。针对第一绘制元素ei(0≤i≤n),依次与后续绘制元素ej(j>i)进行材质比较,若材质与上述第一绘制元素ei不相同,则继续对比下一绘制元素,在查找到与上述第一绘制元素ei材质相同的第二绘制元素ek后,依次执行上述第一绘制元素ei与上述第二绘制元素ek之间的绘制元素(即中间绘制元素ei 1

ek-1)与上述第二绘制元素ek的碰撞测试,若上述绘制元素ei 1

ek-1中任一中间绘制元素同时与上述第一绘制元素ei和上述第二绘制元素ek发生碰撞时,则确定上述第一绘制元素ei与上述第二绘制元素ek之间不存在交叉;若所有中间绘制元素(及即上述绘制元素ei 1

ek-1)均不同时与上述第一绘制元素ei和上述第二绘制元素ek发生碰撞,则确定上述第一绘制元素ei与上述第二绘制元素ek之间不存在交叉。
56.需要说明的是,只要绘制元素b不同时与绘制元素a和绘制元素c交叉就可以进行合批渲染,上述可选的算法执行ei 1

ek-1与ek的碰撞测试,如果发生碰撞,则判定为不能合批,是为了简化判定,剔除了绘制元素b和绘制元素c交叉,不与绘制元素a交叉这种情况,否则判定条件会更复杂,算法消耗也更多。但是理论上以及实际上,采用本公开所提供的方案,将绘制元素b和绘制元素c交叉,不与绘制元素a交叉这种情况完全可以实现。
57.作为一种可选的实施例,图4是根据本公开实施例的另一种可选的图形渲染的方法的流程图,如图4所示,按照上述绘制顺序对上述多个绘制元素进行碰撞测试,得到上述测试结果包括:
58.步骤s302,从上述多个绘制元素中选取第一绘制元素;
59.步骤s304,按照上述绘制顺序,依次比较上述第一绘制元素的材质与后续绘制元素的材质是否相同;
60.步骤s306,当在上述后续绘制元素中查找到第二绘制元素时,将上述第一绘制元素与上述第二绘制元素之间的中间绘制元素依次与上述第二绘制元素进行碰撞测试,其中,上述第一绘制元素的材质与上述第二绘制元素的材质相同;
61.步骤s308,当存在中间绘制元素与上述第二绘制元素发生碰撞时,则确定上述第一绘制元素与上述第二绘制元素之间存在交叉;
62.步骤s310,当不存在中间绘制元素与上述第二绘制元素发生碰撞时,则确定上述第一绘制元素与上述第二绘制元素之间不存在交叉。
63.可选的,上述第一绘制元素的材质与上述第二绘制元素的材质相同,上述中间绘制元素与上述第一绘制元素和上述第二绘制元素材质不同,其中,上述材质可以但不限于包括:纹理信息、着色shader信息以及材质参数信息,等等。
64.作为一种可选的实施例,多个绘制元素的绘制顺序依次为:e0,e1,e2,

,en。针对第一绘制元素ei(0≤i≤n),依次与后续绘制元素ej(j>i)进行材质比较,若材质与上述第
一绘制元素ei不相同,则继续对比下一绘制元素,在查找到与上述第一绘制元素ei材质相同的第二绘制元素ek后,依次执行上述第一绘制元素ei与上述第二绘制元素ek之间的绘制元素(即中间绘制元素ei 1

ek-1)与上述第二绘制元素ek的碰撞测试,若上述绘制元素ei 1

ek-1中任一中间绘制元素与第二绘制元素ek发生碰撞,则判定上述第一绘制元素ei与上述第二绘制元素ek存在交叉;当所有中间绘制元素(即绘制元素ei 1

ek-1)均不与上述第二绘制元素发生碰撞时,则确定上述第一绘制元素ei与上述第二绘制元素ek之间不存在交叉。
65.需要说明的是,上述实施例中的碰撞测试方法的算法时间复杂度为o(n3),在绘制元素比较多的情况,该算法执行速率会很慢。此外,在一些情况下,例如,采用动态合图技术时,两个绘制元素之间,使用的纹理图片合并在同一张图集的概率会随着绘制元素之间的间隔而减少。基于此,提出了另一种可选的实施例,即通过限定步长m优化上述算法,具体包括:多个绘制元素的绘制顺序依次为:e0,e1,e2,

,en。针对第一绘制元素ei(0≤i≤n),依次与后续绘制元素ej(j>i)进行材质比较,若材质与上述第一绘制元素ei不相同,则继续对比下一绘制元素,在查找到与上述第一绘制元素ei材质相同的第二绘制元素ek后,依次执行上述第一绘制元素ei与上述第二绘制元素ek之间的绘制元素(即绘制元素ei 1

ek-1)与上述第二绘制元素ek的碰撞测试,若上述绘制元素ei 1

ek-1中任一绘制元素与第二绘制元素ek发生碰撞,则判定上述第一绘制元素ei与上述第二绘制元素ek不能合批;按照上述碰撞方法继续执行,直至与绘制元素ei m完成比较。改进后放入算法时间复杂度为o(n*m2),达到了提升算法执行速率的目的。
66.在一种可选的实施例中,上述中间绘制元素为上述第一绘制元素与上述第二绘制元素之间的绘制元素中的前m个绘制元素,其中,上述m为正整数。
67.可选的,多个绘制元素的绘制顺序依次为:e0,e1,e2,

,en。针对第一绘制元素ei(0≤i≤n),依次与后续绘制元素ej(j>i)进行材质比较,若材质与上述第一绘制元素ei不相同,则继续对比下一绘制元素,在查找到与上述第一绘制元素ei材质相同的第二绘制元素ek后,则确定上述第一绘制元素ei与上述第二绘制元素ek之间的绘制元素ei 1

ek-1为中间绘制元素。
68.在一种可选的实施例中,上述对上述目标绘制元素进行合批渲染,包括:
69.步骤s402,对上述多个绘制元素进行合图操作,得到目标图形;
70.步骤s404,对上述目标图形进行渲染。
71.可选的,当通过碰撞测试确定多个绘制元素中存在互相之间不交叉且材质相同的多个目标绘制元素后,对上述多个绘制元素进行合图操作,得到目标图形,并在此基础上对上述目标图形进行渲染。
72.在一种可选的实施例中,上述对上述多个绘制元素进行合图操作,得到目标图形,包括:
73.步骤s502,对待合图的绘制元素的周围分别增加预设数量的透明像素;
74.步骤s504,将增加透明像素后的绘制元素进行合图操作,得到目标图形。
75.可选的,上述对待合图的绘制元素的周围分别增加预设数量的透明像素,用于将所有待合图的绘制元素均填充至预设条件尺寸大小。
76.在一种可选的实施例中,上述对待合图的绘制元素的周围分别增加预设数量的透
明像素之前,上述方法还包括:
77.步骤s602,确定上述待合图的绘制元素的尺寸满足预设条件;
78.步骤s604,若上述待合图的绘制元素的尺寸不满足预设条件,在上述待合图的绘制元素的周围填充透明像素,直到上述待合图的绘制元素的尺寸满足上述预设条件。
79.需要说明的是,实际应用中,各绘制元素的尺寸可能存在一定的差异,直接对不同尺寸的绘制元素进行合图操作,会显著影响合图效果,因此,在合图之前,需要确定上述待合图的绘制元素的尺寸满足预设条件,若上述待合图的绘制元素的尺寸不满足预设条件,则可以通过在不满足尺寸条件的绘制元素的周围填充透明像素的方式,使得待合图的绘制元素均满足尺寸条件,以此来提升合图效果。
80.可选的,将待合图的绘制元素的尺寸预设条件设置为4的倍数,且被透明像素包裹,则判断上述待合图的绘制元素的尺寸是否满足4的倍数,若是,则在上述绘制元素的上下左右各填充2个像素的透明像素;对于不满足条件的绘制元素,填充后除了需要满足4的倍数外,还需要保证周边有足够的透明像素,例如绘制元素的尺寸为3*3,那么不能只是将绘制元素尺寸扩充为4*4,而是需要扩充为8*8,这样才能保证上下左右均被透明像素包裹。上述方法可以让每个绘制元素分隔,由于采样算法可能会采样周边多个像素,如果不填充透明像素,就可能采样到其它绘制元素的纹素,从而渲染出现一些意外的线条。
81.在一种可选的实施例中,上述方法还包括:
82.步骤s702,根据上述增加透明像素后的绘制元素对上述目标图形的纹理坐标进行更新。
83.需要说明的是,不同的绘制元素对应于不同的纹理坐标,在对绘制元素增加头名像素后,其纹理坐标也会随之更新。
84.在一种可选的实施例中,上述对上述多个绘制元素进行合图操作,包括:
85.步骤s802,对压缩格式的上述多个绘制元素进行合图操作。
86.可选的,上述压缩格式可以但不限于为astc和/或dxt5格式。
87.可选的,上述合图操作所对应的合图方法可以但不限于包括动态合图方法、静态合图方法。其中,上述静态合图方法主要是使用合图工具(例如texturepacker)静态生成大图;上述动态合图方法主要是在游戏运行时动态合成大图。上述静态合图方法和动态合图方法各有优缺点:静态合图通过离线完成,不需要消耗运行时资源,但是静态合图很多情况下无法做到最优合图,只能根据图片用途进行分类合并;动态合图是指在游戏运行时动态合并图集,可以实时根据使用情况,近乎最优的合成所需要的图集,但是需要额外消耗cpu资源。
88.需要说明的是,相较于静态合图方法,动态合图方法的便利性更强,维护成本更低。因此,本公开实施例采用动态合图方法获取目标图集。slate默认实现了一套动态合图机制,主要用于引擎相关png图片的合图,更多的是为了编辑器自身的批次优化。目前该合图机制仅支持png、jpg等图片格式,并且合图纹理格式限制必须是pf_r8g8b8a8格式。其基本算法是通过狭槽slot将整个图片空间进行二叉树划分,即初始化整个大图空间为一个slot;添加一个新的小图时,先根据图片宽高找到能容纳当前图片的slot,然后根据图片宽高选择进行横向填充还是纵向填充,填充完后,会得到两个新的空闲slot,并放置到空闲链表中,具体如图5所示。slate默认仅支持png并且纹理格式为pf_r8g8b8a8图片的动态合图,
并且是在引擎启动时执行的一次性合图操作。
89.针对上述问题,本公开实施例对上述动态合图方法进行了扩展,主要包括:支持压缩格式;扩展支持uasset文件资源格式,以及对ue4支持的各种压缩格式合图支持,包括astc,dxt5等;支持存储空间的动态分配和释放;允许运行过程中更改合图内存,支持结构texture释放后回收狭槽slot;支持在特定时机清理合图,以及长时间运行后的无效占用。
90.仍需说明的是,现有技术中的动态合图方法主要面临两个问题:一是越界采样问题,即如果小图之间没有预留间隙,合成大图之后有可能出现采样到旁边纹理的边界像素,在ui上表现为一条奇怪的线条;对于非压缩纹理格式,可以通过填充一些值为0的边界来避免上述问题。但是对于压缩纹理,则不能简单的通过填充0来达到目的,首先每种压缩纹理要求的压缩单元块不尽相同,因此无法确定应该填充多少个像素的边界能够满足压缩格式的要求,此外,0值在解压之后不一定是透明像素。二是压缩格式对图片尺寸的要求,一般压缩格式是按块进行压缩的,比如dxt5中要求图片为4x4的块,而pvrtc中则要求图片必须是2的幂,因此,当图片压缩格式为astc和/或dxt5时,需要保证图片尺寸满足4的倍数。
91.为了解决上述现有技术中的技术问题,本公开实施例中,通过动态合图方法进行合图操作得到目标图集可以通过如下方案实现:确定图片的压缩格式为astc和/或dxt5;判断图片是否满足4的倍数,若是,则在上述图片的上下左右各填充2个像素的透明像素;对于不满足条件的图片,填充后除了需要满足4的倍数外,还需要保证周边有足够的透明像素,例如图片的尺寸为3*3,那么不能只是将图片尺寸扩充为4*4,而是需要扩充为8*8,这样才能保证上下左右均被透明像素包裹。上述方法可以让每个子图片元素分隔,由于采样算法可能会采样周边多个像素,如果不填充透明像素,就可能采样到其它子图片的纹素,从而渲染出现一些意外的线条。
92.根据本公开实施例,还提供了一种用于实施上述图形渲染的方法的装置实施例,图6是根据本公开实施例的一种图形渲染的装置的结构示意图,如图6所示,上述图形渲染的装置,包括:获取模块60、测试模块62和处理模块64,其中:
93.上述获取模块60,用于获取由多个绘制元素组成的绘制队列;上述测试模块62,用于按照上述绘制队列中各绘制元素的绘制顺序对上述多个绘制元素进行碰撞测试,得到测试结果,其中,上述碰撞测试用于确定上述多个绘制元素中互相之间不交叉且材质相同的目标绘制元素;上述处理模块64,用于当上述多个绘制元素中存在上述目标绘制元素时,对上述目标绘制元素进行合批渲染。
94.需要说明的是,上述各个模块是可以通过软件或硬件来实现的,例如,对于后者,可以通过以下方式实现:上述各个模块可以位于同一处理器中;或者,上述各个模块以任意组合的方式位于不同的处理器中。
95.此处需要说明的是,上述获取模块60、测试模块62和处理模块64对应于方法实施例中的步骤s102至步骤s106,上述模块与对应的步骤所实现的实例和应用场景相同,但不限于上述方法实施例所公开的内容。需要说明的是,上述模块作为装置的一部分可以运行在计算机终端中。
96.需要说明的是,本实施例的可选或优选实施方式可以参见方法实施例中的相关描述,此处不再赘述。
97.上述的游戏中生成贴图的方法的装置还可以包括处理器和存储器,上述获取模块
60、测试模块62和处理模块64等均作为程序单元存储在存储器中,由处理器执行存储在存储器中的上述程序单元来实现相应的功能。
98.处理器中包含内核,由内核去存储器中调取相应的程序单元,上述内核可以设置一个或以上。存储器可能包括计算机可读介质中的非永久性存储器,随机存取存储器(ram)和/或非易失性内存等形式,如只读存储器(rom)或闪存(flash ram),存储器包括至少一个存储芯片。
99.根据本公开实施例,还提供了一种非易失性存储介质实施例。可选的,在本实施例中,上述非易失性存储介质包括存储的程序,其中,在上述程序运行时控制上述非易失性存储介质所在设备执行上述任意一种图形渲染的方法。
100.可选的,在本实施例中,上述非易失性存储介质可以位于计算机网络中计算机终端群中的任意一个计算机终端中,或者位于移动终端群中的任意一个移动终端中,上述非易失性存储介质包括存储的程序。
101.可选的,在程序运行时控制非易失性存储介质所在设备执行以下功能:获取由多个绘制元素组成的绘制队列;按照上述绘制队列中各绘制元素的绘制顺序对上述多个绘制元素进行碰撞测试,上述碰撞测试用于确定上述多个绘制元素中互相之间不交叉且材质相同的目标绘制元素;当上述多个绘制元素中存在上述目标绘制元素时,对上述目标绘制元素进行合批渲染。
102.可选的,在程序运行时控制非易失性存储介质所在设备执行以下功能:从上述多个绘制元素中选取第一绘制元素;按照上述绘制顺序,依次比较上述第一绘制元素的材质与后续绘制元素的材质是否相同;当在上述后续绘制元素中查找到第二绘制元素时,将上述第一绘制元素与上述第二绘制元素之间的中间绘制元素依次分别与上述第一绘制元素以及上述第二绘制元素进行碰撞测试,其中,上述第一绘制元素的材质与上述第二绘制元素的材质相同;当存在中间绘制元素同时与上述第一绘制元素和上述第二绘制元素发生碰撞时,则确定上述第一绘制元素与上述第二绘制元素之间存在交叉;当不存在中间绘制元素同时与上述第一绘制元素和上述第二绘制元素发生碰撞时,则确定上述第一绘制元素与上述第二绘制元素之间不存在交叉。
103.可选的,在程序运行时控制非易失性存储介质所在设备执行以下功能:从上述多个绘制元素中选取第一绘制元素;按照上述绘制顺序,依次比较上述第一绘制元素的材质与后续绘制元素的材质是否相同;当在上述后续绘制元素中查找到第二绘制元素时,将上述第一绘制元素与上述第二绘制元素之间的中间绘制元素依次与上述第二绘制元素进行碰撞测试,其中,上述第一绘制元素的材质与上述第二绘制元素的材质相同;当存在中间绘制元素与上述第二绘制元素发生碰撞时,则确定上述第一绘制元素与上述第二绘制元素之间存在交叉;当不存在中间绘制元素与上述第二绘制元素发生碰撞时,则确定上述第一绘制元素与上述第二绘制元素之间不存在交叉。
104.可选的,在程序运行时控制非易失性存储介质所在设备执行以下功能:对上述多个绘制元素进行合图操作,得到目标图形;对上述目标图形进行渲染。
105.可选的,在程序运行时控制非易失性存储介质所在设备执行以下功能:对待合图的绘制元素的周围分别增加预设数量的透明像素;将增加透明像素后的绘制元素进行合图操作,得到目标图形。
106.可选的,在程序运行时控制非易失性存储介质所在设备执行以下功能:确定上述待合图的绘制元素的尺寸满足预设条件;若上述待合图的绘制元素的尺寸不满足预设条件,在上述待合图的绘制元素的周围填充透明像素,直到上述待合图的绘制元素的尺寸满足上述预设条件。
107.可选的,在程序运行时控制非易失性存储介质所在设备执行以下功能:根据上述增加透明像素后的绘制元素对上述目标图形的纹理坐标进行更新。
108.可选的,在程序运行时控制非易失性存储介质所在设备执行以下功能:对压缩格式的上述多个绘制元素进行合图操作。
109.根据本公开实施例,还提供了一种处理器实施例。可选的,在本实施例中,上述处理器用于运行程序,其中,上述程序运行时执行上述任意一种图形渲染的方法。
110.本公开实施例提供了一种电子设备,包括存储器和处理器,上述存储器中存储有计算机程序,上述处理器被设置为运行上述计算机程序以执行任意一项上述的图形渲染的方法。
111.本公开还提供了一种计算机程序产品,当在数据处理设备上执行时,适于执行初始化有如下方法步骤的程序:获取由多个绘制元素组成的绘制队列;按照上述绘制队列中各绘制元素的绘制顺序对上述多个绘制元素进行碰撞测试,上述碰撞测试用于确定上述多个绘制元素中互相之间不交叉且材质相同的目标绘制元素;当上述多个绘制元素中存在上述目标绘制元素时,对上述目标绘制元素进行合批渲染。
112.上述本公开实施例序号仅仅为了描述,不代表实施例的优劣。
113.在本公开的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
114.在本技术所提供的几个实施例中,应该理解到,所揭露的技术内容,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,可以为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。
115.所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
116.另外,在本公开各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
117.所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本公开的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本公开各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、只读存储器(rom,read-only memory)、随机存取存
储器(ram,random access memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
118.以上所述仅是本公开的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本公开原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本公开的保护范围。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献