图像渲染方法、装置、设备及存储介质转让专利

申请号 : CN202210384063.6

文献号 : CN114494024B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 连冠荣昔文博

申请人 : 腾讯科技(深圳)有限公司

摘要 :

本申请实施例提供一种图像渲染方法、装置、设备及存储介质,至少应用于图像处理和游戏技术领域,其中,方法包括:获取待渲染数据和索引数据集合;所述待渲染数据对应一顶点集合;基于所述待渲染数据和所述索引数据集合中的索引数据,对所述顶点集合中的部分顶点进行顶点消除处理,得到待渲染顶点集合;对所述待渲染顶点集合中的待渲染顶点依次进行顶点渲染,得到渲染后的图像。能够通过调用一个绘制调用即可实现间歇顶点渲染,提高图像渲染效率。

权利要求 :

1.一种图像渲染方法,其特征在于,所述方法包括:获取待渲染数据和索引数据集合;所述待渲染数据对应一顶点集合;其中,所述索引数据集合中的每一索引数据与一个顶点之间具有映射关系;

获取所述顶点集合中的每一顶点的顶点位置信息;并从所述索引数据集合中获取与每一顶点对应的索引数据;

基于所述索引数据,对每一顶点的顶点位置信息进行缩放处理,得到缩放结果;

基于每一顶点的缩放结果,从所述顶点集合中确定出待消除顶点;

删除所述顶点集合中的待消除顶点,得到待渲染顶点集合;

获取所述待渲染顶点集合中每一待渲染顶点的顶点位置信息;

基于所述顶点位置信息,对所述待渲染顶点集合中的待渲染顶点进行三角划分,得到至少一个待渲染三角形;

以每一所述待渲染三角形为渲染单位进行顶点渲染,得到渲染后的图像。

2.根据权利要求1所述的方法,其特征在于,所述基于所述索引数据,对每一顶点的顶点位置信息进行缩放处理,得到缩放结果,包括:将每一顶点的顶点位置信息与所述顶点对应的索引数据相乘得到顶点位置乘积;

将所述顶点位置乘积确定为所述顶点的缩放结果。

3.根据权利要求2所述的方法,其特征在于,所述方法还包括:基于所述顶点位置信息,对所述顶点集合中的顶点进行三角划分,得到至少一个初始三角形;其中,每一所述初始三角形包括三个顶点;

对应地,所述基于每一顶点的缩放结果,从所述顶点集合中确定出待消除顶点,包括:当任一初始三角形的三个顶点对应的顶点位置乘积均相同时,将所述初始三角形的三个顶点确定为所述待消除顶点。

4.根据权利要求2所述的方法,其特征在于,所述基于每一顶点的缩放结果,从所述顶点集合中确定出待消除顶点,包括:当所述顶点位置乘积为第一类型位置数据时,将所述顶点位置乘积对应的顶点确定为所述待消除顶点;

当所述顶点位置乘积为第二类型位置数据时,将所述顶点位置乘积对应的顶点确定为所述待渲染顶点。

5.根据权利要求1所述的方法,其特征在于,所述方法还包括:基于所述索引数据,确定每一顶点对应的顶点处理状态;

当任一顶点的顶点处理状态为消除状态时,将所述顶点确定为所述待消除顶点。

6.根据权利要求5所述的方法,其特征在于,所述方法还包括:获取每一顶点的顶点位置信息;

基于所述顶点位置信息,对所述顶点集合中的顶点进行三角划分,得到至少一个初始三角形;其中,每一所述初始三角形包括三个顶点;

所述基于所述索引数据,确定每一顶点对应的顶点处理状态,包括:当任一初始三角形的三个顶点对应的索引数据均为预设类型索引数据时,将所述初始三角形的三个顶点的顶点处理状态确定为消除状态。

7.根据权利要求5所述的方法,其特征在于,所述基于所述索引数据,确定每一顶点对应的顶点处理状态,包括:当所述索引数据为第一类型索引数据时,将与所述索引数据具有所述映射关系的顶点对应的顶点处理状态确定为消除状态;

当所述索引数据为第二类型索引数据时,将与所述索引数据具有所述映射关系的顶点对应的顶点处理状态确定为非消除状态。

8.根据权利要求1所述的方法,其特征在于,所述方法还包括:获取图像渲染请求,所述图像渲染请求中包括所述待渲染数据和预设的渲染需求信息;

对所述渲染需求信息进行解析,得到与所述顶点集合中的每一顶点对应的索引数据;

对所述顶点集合中的全部顶点对应的索引数据进行整合,得到所述索引数据集合。

9.根据权利要求8所述的方法,其特征在于,所述渲染需求信息中包括针对每一顶点的处理指令;所述对所述渲染需求信息进行解析,得到与所述顶点集合中的每一顶点对应的索引数据,包括:对每一顶点的索引数据进行初始化设置,得到初始化索引数据;

对所述渲染需求信息进行解析,得到每一顶点的处理指令;

当所述处理指令为渲染指令时,将所述顶点的初始化索引数据更新为第二类型索引数据;

当所述处理指令为非渲染指令时,将所述顶点的初始化索引数据更新为第一类型索引数据。

10.一种图像渲染装置,其特征在于,所述装置包括:获取模块,用于获取待渲染数据和索引数据集合;所述待渲染数据对应一顶点集合;其中,所述索引数据集合中的每一索引数据与一个顶点之间具有映射关系;

顶点消除模块,用于获取所述顶点集合中的每一顶点的顶点位置信息;并从所述索引数据集合中获取与每一顶点对应的索引数据;基于所述索引数据,对每一顶点的顶点位置信息进行缩放处理,得到缩放结果;基于每一顶点的缩放结果,从所述顶点集合中确定出待消除顶点;删除所述顶点集合中的待消除顶点,得到待渲染顶点集合;

顶点渲染模块,用于获取所述待渲染顶点集合中每一待渲染顶点的顶点位置信息;基于所述顶点位置信息,对所述待渲染顶点集合中的待渲染顶点进行三角划分,得到至少一个待渲染三角形;以每一所述待渲染三角形为渲染单位进行顶点渲染,得到渲染后的图像。

11.一种图像渲染设备,其特征在于,包括:

存储器,用于存储可执行指令;处理器,用于执行所述存储器中存储的可执行指令时,实现权利要求1至9任一项所述的图像渲染方法。

12.一种计算机可读存储介质,其特征在于,存储有可执行指令,用于引起处理器执行所述可执行指令时,实现权利要求1至9任一项所述的图像渲染方法。

说明书 :

图像渲染方法、装置、设备及存储介质

技术领域

[0001] 本申请实施例涉及互联网技术领域,涉及但不限于一种图像渲染方法、装置、设备及存储介质。

背景技术

[0002] 网格是指包含顶点和面的结构,网格是3D游戏对象显示的常用方法,在3D游戏对象渲染和显示技术中,通常是以网格中的最小单元(三角形)为渲染单位进行顶点渲染。顶点缓冲区(VB,Vertex Buffer)是一个连续的顶点数据数组,在一些图像渲染场景下,需要从顶点缓冲区中进行间歇顶点渲染。
[0003] 相关技术中,在实现间歇顶点渲染时,通常需要分开调用多个绘制调用(Drawcall)才能够实现,或者需要较高阶图形处理器(GPU,Graphics Processing Unit)的图形绘制接口来实现,或者需要按照待渲染对象的零部件是否启用渲染,来实时填充需要
渲染的数据到VB,涉及数据拷贝过程。
[0004] 显然,相关技术中的方法在实现间歇顶点渲染时需要调用多个绘制调用,会极大的增大渲染时长,降低渲染效率;需要较高阶GPU的图形绘制接口,适配性不够广,不是所有机型都能适用;同时,数据拷贝过程会存在一定的时延,会极大的影响图像渲染效率。

发明内容

[0005] 本申请实施例提供一种图像渲染方法、装置、设备及存储介质,至少应用于图像处理和游戏技术领域,能够基于索引数据对顶点集合中的部分顶点进行顶点消除处理,从而能够调用一个绘制调用即可实现间歇顶点渲染,提高图像渲染效率。
[0006] 本申请实施例的技术方案是这样实现的:
[0007] 本申请实施例提供一种图像渲染方法,所述方法包括:
[0008] 获取待渲染数据和索引数据集合;所述待渲染数据对应一顶点集合;
[0009] 基于所述待渲染数据和所述索引数据集合中的索引数据,对所述顶点集合中的部分顶点进行顶点消除处理,得到待渲染顶点集合;
[0010] 对所述待渲染顶点集合中的待渲染顶点依次进行顶点渲染,得到渲染后的图像。
[0011] 在一些实施例中,所述索引数据集合中的每一索引数据与一个顶点之间具有映射关系;所述基于所述待渲染数据和所述索引数据集合中的索引数据,对所述顶点集合中的
部分顶点进行顶点消除处理,得到待渲染顶点集合,包括:获取所述顶点集合中的每一顶点的顶点位置信息;从所述索引数据集合中获取与每一顶点对应的索引数据;基于所述索引
数据,对每一顶点的顶点位置信息进行缩放处理,得到缩放结果;基于每一顶点的缩放结
果,从所述顶点集合中确定出待消除顶点;删除所述顶点集合中的待消除顶点,得到所述待渲染顶点集合。
[0012] 在一些实施例中,所述基于所述索引数据,对每一顶点的顶点位置信息进行缩放处理,得到缩放结果,包括:将每一顶点的顶点位置信息与所述顶点对应的索引数据相乘得到顶点位置乘积;将所述顶点位置乘积确定为所述顶点的缩放结果。
[0013] 在一些实施例中,所述方法还包括:基于所述顶点位置信息,对所述顶点集合中的顶点进行三角划分,得到至少一个初始三角形;其中,每一所述初始三角形包括三个顶点;对应地,所述基于每一顶点的缩放结果,从所述顶点集合中确定出待消除顶点,包括:当任一初始三角形的三个顶点对应的顶点位置乘积均相同时,将所述初始三角形的三个顶点确
定为所述待消除顶点。
[0014] 在一些实施例中,所述基于每一顶点的缩放结果,从所述顶点集合中确定出待消除顶点,包括:当所述顶点位置乘积为第一类型位置数据时,将所述顶点位置乘积对应的顶点确定为所述待消除顶点;当所述顶点位置乘积为第二类型位置数据时,将所述顶点位置
乘积对应的顶点确定为所述待渲染顶点。
[0015] 在一些实施例中,所述索引数据集合中的每一索引数据与一个顶点之间具有映射关系;所述基于所述待渲染数据和所述索引数据集合中的索引数据,对所述顶点集合中的
部分顶点进行顶点消除处理,得到待渲染顶点集合,包括:从所述索引数据集合中获取与每一顶点对应的索引数据;基于所述索引数据,确定每一顶点对应的顶点处理状态;当任一顶点的顶点处理状态为消除状态时,将所述顶点确定为待消除顶点;删除所述顶点集合中的
待消除顶点,得到所述待渲染顶点集合。
[0016] 在一些实施例中,所述方法还包括:获取每一顶点的顶点位置信息;基于所述顶点位置信息,对所述顶点集合中的顶点进行三角划分,得到至少一个初始三角形;其中,每一所述初始三角形包括三个顶点;所述基于所述索引数据,确定每一顶点对应的顶点处理状态,包括:当任一初始三角形的三个顶点对应的索引数据均为预设类型索引数据时,将所述初始三角形的三个顶点的顶点处理状态确定为消除状态。
[0017] 在一些实施例中,所述基于所述索引数据,确定每一顶点对应的顶点处理状态,包括:当所述索引数据为第一类型索引数据时,将与所述索引数据具有所述映射关系的顶点的顶点处理状态确定为消除状态;当所述索引数据为第二类型索引数据时,将与所述索引
数据具有所述映射关系的顶点的顶点处理状态确定为非消除状态。
[0018] 在一些实施例中,所述对所述待渲染顶点集合中的待渲染顶点依次进行顶点渲染,得到渲染后的图像,包括:获取每一待渲染顶点的顶点位置信息;基于所述顶点位置信息,对所述待渲染顶点集合中的待渲染顶点进行三角划分,得到至少一个待渲染三角形;以每一所述待渲染三角形为渲染单位进行顶点渲染,得到所述渲染后的图像。
[0019] 在一些实施例中,所述方法还包括:获取图像渲染请求,所述图像渲染请求中包括所述待渲染数据和预设的渲染需求信息;对所述渲染需求信息进行解析,得到与所述顶点集合中的每一顶点对应的索引数据;对所述顶点集合中的全部顶点对应的索引数据进行整
合,得到所述索引数据集合。
[0020] 在一些实施例中,所述渲染需求信息中包括针对每一顶点的处理指令;所述对所述渲染需求信息进行解析,得到与所述顶点集合中的每一顶点对应的索引数据,包括:对每一顶点的索引数据进行初始化设置,得到初始化索引数据;对所述渲染需求信息进行解析,得到每一顶点的处理指令;当所述处理指令为渲染指令时,将所述顶点的初始化索引数据
更新为第二类型索引数据;当所述处理指令为非渲染指令时,将所述顶点的初始化索引数
据更新为第一类型索引数据。
[0021] 本申请实施例提供一种图像渲染装置,所述装置包括:获取模块,用于获取待渲染数据和索引数据集合;所述待渲染数据对应一顶点集合;消除模块,用于基于所述待渲染数据和所述索引数据集合中的索引数据,对所述顶点集合中的部分顶点进行顶点消除处理,得到待渲染顶点集合;顶点渲染模块,用于对所述待渲染顶点集合中的待渲染顶点依次进
行顶点渲染,得到渲染后的图像。
[0022] 在一些实施例中,所述索引数据集合中的每一索引数据与一个顶点之间具有映射关系;所述顶点消除模块还用于:获取所述顶点集合中的每一顶点的顶点位置信息;从所述索引数据集合中获取与每一顶点对应的索引数据;基于所述索引数据,对每一顶点的顶点
位置信息进行缩放处理,得到缩放结果;基于每一顶点的缩放结果,从所述顶点集合中确定出待消除顶点;删除所述顶点集合中的待消除顶点,得到所述待渲染顶点集合。
[0023] 在一些实施例中,所述顶点消除模块还用于:将每一顶点的顶点位置信息与所述顶点对应的索引数据相乘得到顶点位置乘积;将所述顶点位置乘积确定为所述顶点的缩放
结果。
[0024] 在一些实施例中,所述装置还包括:第一三角划分模块,用于基于所述顶点位置信息,对所述顶点集合中的顶点进行三角划分,得到至少一个初始三角形;其中,每一所述初始三角形包括三个顶点;对应地,所述顶点消除模块还用于:当任一初始三角形的三个顶点对应的顶点位置乘积均相同时,将所述初始三角形的三个顶点确定为所述待消除顶点。
[0025] 在一些实施例中,所述顶点消除模块还用于:当所述顶点位置乘积为第一类型位置数据时,将所述顶点位置乘积对应的顶点确定为所述待消除顶点;当所述顶点位置乘积
为第二类型位置数据时,将所述顶点位置乘积对应的顶点确定为所述待渲染顶点。
[0026] 在一些实施例中,所述索引数据集合中的每一索引数据与一个顶点之间具有映射关系;所述顶点消除模块还用于:从所述索引数据集合中获取与每一顶点对应的索引数据;
基于所述索引数据,确定每一顶点对应的顶点处理状态;当任一顶点的顶点处理状态为消
除状态时,将所述顶点确定为待消除顶点;删除所述顶点集合中的待消除顶点,得到所述待渲染顶点集合。
[0027] 在一些实施例中,所述装置还包括:位置信息获取模块,用于获取每一顶点的顶点位置信息;第二三角划分模块,用于基于所述顶点位置信息,对所述顶点集合中的顶点进行三角划分,得到至少一个初始三角形;其中,每一所述初始三角形包括三个顶点;所述顶点消除模块还用于:当任一初始三角形的三个顶点对应的索引数据均为预设类型索引数据时,将所述初始三角形的三个顶点的顶点处理状态确定为消除状态。
[0028] 在一些实施例中,所述顶点消除模块还用于:当所述索引数据为第一类型索引数据时,将与所述索引数据具有所述映射关系的顶点的顶点处理状态确定为消除状态;当所
述索引数据为第二类型索引数据时,将与所述索引数据具有所述映射关系的顶点的顶点处
理状态确定为非消除状态。
[0029] 在一些实施例中,所述顶点渲染模块还用于:获取每一待渲染顶点的顶点位置信息;基于所述顶点位置信息,对所述待渲染顶点集合中的待渲染顶点进行三角划分,得到至少一个待渲染三角形;以每一所述待渲染三角形为渲染单位进行顶点渲染,得到所述渲染
后的图像。
[0030] 在一些实施例中,所述装置还包括:请求获取模块,用于获取图像渲染请求,所述图像渲染请求中包括所述待渲染数据和预设的渲染需求信息;解析模块,用于对所述渲染需求信息进行解析,得到与所述顶点集合中的每一顶点对应的索引数据;整合模块,用于对所述顶点集合中的全部顶点对应的索引数据进行整合,得到所述索引数据集合。
[0031] 在一些实施例中,所述渲染需求信息中包括针对每一顶点的处理指令;所述解析模块还用于:对每一顶点的索引数据进行初始化设置,得到初始化索引数据;对所述渲染需求信息进行解析,得到每一顶点的处理指令;当所述处理指令为渲染指令时,将所述顶点的初始化索引数据更新为第二类型索引数据;当所述处理指令为非渲染指令时,将所述顶点
的初始化索引数据更新为第一类型索引数据。
[0032] 本申请实施例提供一种图像渲染设备,包括:
[0033] 存储器,用于存储可执行指令;处理器,用于执行所述存储器中存储的可执行指令时,实现上述图像渲染方法。
[0034] 本申请实施例提供一种计算机程序产品或计算机程序,计算机程序产品或计算机程序包括可执行指令,可执行指令存储在计算机可读存储介质中;其中,图像渲染设备的处理器从计算机可读存储介质中读取可执行指令,并执行可执行指令时,实现上述的图像渲
染方法。
[0035] 本申请实施例提供一种计算机可读存储介质,存储有可执行指令,用于引起处理器执行所述可执行指令时,实现上述图像渲染方法。
[0036] 本申请实施例具有以下有益效果:基于所获取的待渲染数据和索引数据集合中的索引数据,对待渲染数据对应的顶点集合中的部分顶点进行顶点消除处理,得到待渲染顶
点集合;并对待渲染顶点集合中的待渲染顶点依次进行顶点渲染,得到渲染后的图像。如
此,由于基于索引数据对顶点集合中的部分顶点进行顶点消除处理,从而能够调用一个绘
制调用即可实现间歇顶点渲染,不仅提高图像渲染效率,而且适用于不同的设备,具有高的适配性。

附图说明

[0037] 图1A是本申请实施例提供的网格的结构示意图;
[0038] 图1B是本申请实施例提供的顶点‑面‑边之间的关系示意图;
[0039] 图2是间歇顶点渲染的示意图;
[0040] 图3是相关技术中调用多个绘制调用进行间歇顶点渲染的示意图;
[0041] 图4是相关技术中采用高阶GPU的图形绘制接口进行间歇顶点渲染的示意图;
[0042] 图5是相关技术中通过数据拷贝进行间歇顶点渲染的示意图;
[0043] 图6是相关技术中通过多次渲染进行间歇顶点渲染的示意图;
[0044] 图7是本申请实施例提供的图像渲染系统的一个可选的架构示意图;
[0045] 图8是本申请实施例提供的图像渲染设备的结构示意图;
[0046] 图9是本申请实施例提供的图像渲染方法的一个可选的流程示意图;
[0047] 图10是本申请实施例提供的图像渲染方法的另一个可选的流程示意图;
[0048] 图11是本申请实施例提供的图像渲染方法的再一个可选的流程示意图;
[0049] 图12A是本申请实施例的启用/禁用身体某些部分的渲染前的原始图像;
[0050] 图12B是本申请实施例的禁用身体头发部分渲染的图像;
[0051] 图13是本申请实施例提供的图像渲染方法的流程图;
[0052] 图14是本申请实施例提供的图像渲染方法的另一流程图;
[0053] 图15是本申请实施例的方法应用于低端机的效果示意图;
[0054] 图16是本申请实施例的方法应用于中端机的效果示意图;
[0055] 图17是本申请实施例的方法应用于高端机的效果示意图。

具体实施方式

[0056] 为了使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请作进一步地详细描述,所描述的实施例不应视为对本申请的限制,本领域普通技术人员在没有
做出创造性劳动前提下所获得的所有其它实施例,都属于本申请保护的范围。
[0057] 在以下的描述中,涉及到“一些实施例”,其描述了所有可能实施例的子集,但是可以理解,“一些实施例”可以是所有可能实施例的相同子集或不同子集,并且可以在不冲突的情况下相互结合。除非另有定义,本申请实施例所使用的所有的技术和科学术语与属于本申请实施例的技术领域的技术人员通常理解的含义相同。本申请实施例所使用的术语只
是为了描述本申请实施例的目的,不是旨在限制本申请。
[0058] 在说明本申请实施例的方案之前,首先对本申请实施例涉及的名词进行解释:
[0059] (1)网格:是指包含顶点、面的结构。网格是3D游戏对象显示的常用方法。网格是包含顶点数组和面数组的数据结构。如图1A所示,是网格的结构示意图,在图像渲染过程中,是以网格中的网格单元为单位进行渲染的,其中网格中包括多个网格单元101。
[0060] (2)顶点:是一个数据结构,包含一个3度空间向量,包含顶点的位置[x,y,z]。如图1B所示,是顶点‑面‑边之间的关系示意图,顶点(Vertex=[x,y,z])在图1B中分别包括顶点
0、顶点1和顶点2。
[0061] (3)面:是一个包含3个索引整数的数据结构,索引指示面顶点使用的顶点。如图1B所示,面1表示为:Face=[0,1,2]。
[0062] (4)边:每个面有3条边。边是包含2个索引整数的数据结构。如图1B所示,三条边(边0、边1和边2)分别表示为:边0=[0,1],边1=[1,2],边2=[2,0]。
[0063] (5)渲染实例化:使用GPU实例化可使用少量绘制调用(Drawcall)一次绘制(或渲染)同一网格的多个副本。这对于绘制诸如建筑物、树木、草地或其他在场景中重复出现的对象非常有用。GPU实例化在每次绘制调用时仅渲染相同的网格,但每个实例可以具有不同的参数(例如,颜色或比例)以增加变化并减少外观上的重复。GPU实例化可以降低每个场景使用的绘制调用数量。可以显着提高项目的渲染性能。
[0064] (6)绘制调用:是中央处理器(CPU,Central Processing Unit)对底层图形绘制接口的调用命令,以命令GPU执行渲染操作,渲染流程采用流水线实现,CPU和GPU并行工作,CPU和GPU之间通过命令缓冲区连接,CPU向命令缓冲区中发送渲染命令,GPU接收并执行对应的渲染命令。这里,绘制调用影响绘制的原因主要是因为每次绘制时,CPU都需要调用一个绘制调用,而每个绘制调用都需要很多准备工作:检测渲染状态、提交渲染数据、提交渲染状态等。而GPU本身具有很强大的计算能力,可以很快就处理完渲染任务。当绘制调用过多,CPU就会很多额外开销用于准备工作,CPU本身负载较高,而这时GPU可能闲置了。由于过多的绘制调用会造成CPU的性能瓶颈,大量时间消耗在绘制调用的准备工作上。很显然的一个优化方向就是:尽量把小的绘制调用合并到一个大的绘制调用中。
[0065] (7)高阶GPU(例如GPU glMulti)的图形绘制接口:指的是开放图形接口(OpenGLES,Open Graphics Library),这些接口需要高端GPU(支持OpenGLES 3.1甚至以上)硬件才能用的上的图形绘制接口。
[0066] (8)顶点缓冲区:是OpenGL/Directx等的一种存放在GPU的缓冲区,用作存放顶点数据数组,顶点缓冲区提供了将顶点数据(位置、法线向量、颜色等)上传到GPU以进行非即时模式渲染的方法。顶点缓冲区比立即模式渲染提供了显著的性能提升,主要是因为数据驻留在GPU内存中而不是系统内存中,因此数据可以由GPU取出并直接渲染。
[0067] (9)单绘制调用的间歇顶点渲染:顶点缓冲区是一个连续的顶点数据数组,某些场景需要从顶点缓冲区的单个绘制调用进行间歇渲染顶点,即单个绘制调用内不是由1至n顺序全部渲染,而是单个绘制调用内间歇地1‑10,31‑100,221‑300…,1000‑n,中间有一些顶点会略过。如图2所示,是间歇顶点渲染的示意图,只做少量处理来判定中间顶点是否显示,例如,在图2中第一行表示顶点数据数组中的全部20个顶点:1,2,3,4,5,6,7,8,9,10,11,
12,13,14,15,16,17,18,19,20。而在实际渲染过程中需要进行间歇顶点渲染,只需要渲染
1,2,3,4,5,6,7和13,14,15,16,17,18,19,20,因此,中间的顶点8,9,10,11,12会略过不进行渲染。
[0068] 在解释本申请实施例的图像渲染方法之前,首先对相关技术中的方法进行说明。
[0069] 在间歇顶点渲染过程中,相关技术中的一种实现方式是分开绘制调用实现,也就是说需要通过调用多个绘制调用才能够实现间歇顶点渲染。如图3所示,是相关技术中调用多个绘制调用进行间歇顶点渲染的示意图,对于顶点数据数组中的全部20个顶点:1,2,3,
4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,其中,在第一行图像数据的渲染过程中,顶点4,5,6,7是不需要渲染的顶点,在第二行图像数据的渲染过程中,顶点8,9,10,11,
12和13,14,15,16,17,18,19,20是不需要渲染的顶点,因此,整体渲染过程中,需要调用5个绘制调用来进行渲染,其中5个绘制调用分别是:glDrawArray(1,2,3),用于渲染顶点1,2,
3;glDrawArray(8,9,10,11,12),用于渲染顶点8,9,10,11,12;glDrawArray(13,14,15,16,
17,18,19,20),用于渲染顶点13,14,15,16,17,18,19,20;glDrawArray(1,2,3),用于渲染顶点1,2,3;glDrawArray(4,5,6,7),用于渲染顶点4,5,6,7。
[0070] 相关技术中的另一种实现方式是需要高阶GPU的图形绘制接口,如图4所示,是相关技术中采用高阶GPU的图形绘制接口进行间歇顶点渲染的示意图,对于顶点数据数组中
的全部20个顶点:1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,其中,在第一行图像数据的渲染过程中,顶点4,5,6,7是不需要渲染的顶点,在第二行图像数据的渲染过程中,顶点8,9,10,11,12和13,14,15,16,17,18,19,20是不需要渲染的顶点,因此,整体渲染过程中,采用高阶GPU的图形绘制接口,调用1个绘制调用来进行渲染,其中这一个绘制调用是:
[0071] glDrawArray(
[0072] 1,2,3,
[0073] 8,9,10,11,12,
[0074] 13,14,15,16,17,18,19,20,
[0075] 1,2,3,
[0076] 4,5,6,7
[0077] )。
[0078] 但是这种方法适配性不够广,不是所有机型都能适用。
[0079] 相关技术中的再一种实现方式是按照对象的零部件是否启用渲染,来实时填充需要渲染的数据到VB,如图5所示,是相关技术中通过数据拷贝进行间歇顶点渲染的示意图,对于顶点数据数组中的全部20个顶点:1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,
18,19,20,其中,在第一行图像数据的渲染过程中,顶点4,5,6,7是不需要渲染的顶点,在第二行图像数据的渲染过程中,顶点8,9,10,11,12和13,14,15,16,17,18,19,20是不需要渲染的顶点,因此,整体渲染过程中,可以将待渲染数据拷贝至顶点缓冲区中,然后进行渲染。
但是,这种方法涉及一个数据拷贝过程,因此性能有瓶颈上限。
[0080] 相关技术中的又一种实现方式是,如果没有高阶GPU的图形绘制接口,因为同类物件的零部件有不同的启用状态,所以不能实例化,需要多次渲染。如图6所示,是相关技术中通过多次渲染进行间歇顶点渲染的示意图,对于物件一、物件二和物件三,其中部件1、部件
2、部件3和部件4位相同部件,需要渲染的数据和内容完全相同,但是物件一、物件二和物件三中不需要渲染的部件不同,因此,对于相同的部件,在不同物件中可能需要进行多次渲
染。这样,显然会降低图像渲染效率。
[0081] 基于相关技术中所存在的上述问题,本申请实施例提供一种图像渲染方法,该图像渲染方法是一种适配性更广的GPU渲染调用优化方法,该方法解决了某些场景下,从顶点缓冲区的单个绘制调用实现间歇顶点渲染的需求,即单个绘制调用内不是由1至n顺序全部
渲染,而是单个绘制调用内间歇地1‑10,31‑100,221‑300…,1000‑n渲染,中间有一些顶点会略过。
[0082] 本申请实施例提供的图像渲染方法中,首先,获取待渲染数据和索引数据集合;待渲染数据对应一顶点集合;然后,基于待渲染数据和索引数据集合中的索引数据,对顶点集合中的部分顶点进行顶点消除处理,得到待渲染顶点集合;最后,对待渲染顶点集合中的待渲染顶点依次进行顶点渲染,得到渲染后的图像。如此,由于基于索引数据对顶点集合中的部分顶点进行顶点消除处理,从而能够调用一个绘制调用即可实现间歇顶点渲染,不仅提高图像渲染效率,而且适用于不同的设备,具有高的适配性。
[0083] 下面说明本申请实施例的图像渲染设备的示例性应用,本申请实施例提供的图像渲染设备可以实施为终端,也可以实施为服务器。在一种实现方式中,本申请实施例提供的图像渲染设备可以实施为笔记本电脑,平板电脑,台式计算机,移动设备(例如,移动电话,便携式音乐播放器,个人数字助理,专用消息设备,便携式游戏设备)、智能机器人、智能家电和智能车载设备等任意的具备图像处理功能、视频显示功能和图像渲染功能的终端;在
另一种实现方式中,本申请实施例提供的图像渲染设备还可以实施为服务器,其中,服务器可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,
还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、内容分发网络(CDN,Content Delivery Network)、以及大数据和人工智能平台等基础云计算服务的云服务器。终端以及服务器可以通过有线或无线通信方式进
行直接或间接地连接,本申请实施例中不做限制。下面,将说明图像渲染设备实施为终端时的示例性应用。
[0084] 参见图7,图7是本申请实施例提供的图像渲染系统的一个可选的架构示意图,为实现支撑任意一个视频应用或者图像显示应用,图像渲染系统10中至少包括终端100、网络
200和服务器300,其中服务器300是视频应用或者图像显示应用的服务器,服务器300可以
构成本申请实施例的图像渲染设备。终端100通过网络200连接服务器300,网络200可以是
广域网或者局域网,又或者是二者的组合。在图像渲染过程中,终端100将图像渲染请求通过网络200发送给服务器300,服务器300在获取到待渲染数据和索引数据集合后,基于待渲染数据和索引数据集合中的索引数据,对待渲染数据对应的顶点集合中的部分顶点进行顶
点消除处理,得到待渲染顶点集合;然后对待渲染顶点集合中的待渲染顶点依次进行顶点
渲染,得到渲染后的图像。在得到渲染后的图像后,通过网络200将渲染后的图像发送给终端100,并在终端100上显示该渲染后的图像。
[0085] 本申请实施例所提供的图像渲染方法还可以基于云平台并通过云技术来实现,例如,上述服务器300可以是云端服务器,通过云端服务器基于待渲染数据和索引数据集合中的索引数据,对顶点集合中的部分顶点进行顶点消除处理,得到待渲染顶点集合,以及,通过云端服务器对待渲染顶点集合中的待渲染顶点依次进行顶点渲染,得到渲染后的图像。
[0086] 在一些实施例中,还可以具有云端存储器,可以将渲染后的图像存储至云端存储器中,或者将索引数据集合存储至云端存储器中,或者将待渲染数据与渲染后的图像映射
后存储至云端存储器中。这样,在后续需要再次对待渲染数据进行图像渲染时,可以直接从云端存储器中读取该渲染后的图像。
[0087] 这里需要说明的是,云技术(Cloud technology)是指在广域网或局域网内将硬件、软件、网络等系列资源统一起来,实现数据的计算、储存、处理和共享的一种托管技术。
云技术基于云计算商业模式应用的网络技术、信息技术、整合技术、管理平台技术、应用技术等的总称,可以组成资源池,按需所用,灵活便利。云计算技术将变成重要支撑。技术网络系统的后台服务需要大量的计算、存储资源,如视频网站、图片类网站和更多的门户网站。
伴随着互联网行业的高度发展和应用,将来每个物品都有可能存在自己的识别标志,都需
要传输到后台系统进行逻辑处理,不同程度级别的数据将会分开处理,各类行业数据皆需
要强大的系统后盾支撑,只能通过云计算来实现。
[0088] 图8是本申请实施例提供的图像渲染设备的结构示意图,图8所示的图像渲染设备包括:至少一个处理器310、存储器350、至少一个网络接口320和用户接口330。图像渲染设备中的各个组件通过总线系统340耦合在一起。可理解,总线系统340用于实现这些组件之
间的连接通信。总线系统340除包括数据总线之外,还包括电源总线、控制总线和状态信号总线。但是为了清楚说明起见,在图8中将各种总线都标为总线系统340。
[0089] 处理器310可以是一种集成电路芯片,具有信号的处理能力,例如通用处理器、数字信号处理器(DSP,Digital Signal Processor),或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等,其中,通用处理器可以是微处理器或者任何常规的处理器等。
[0090] 用户接口330包括使得能够呈现媒体内容的一个或多个输出装置331,以及一个或多个输入装置332。
[0091] 存储器350可以是可移除的,不可移除的或其组合。示例性的硬件设备包括固态存储器,硬盘驱动器,光盘驱动器等。存储器350可选地包括在物理位置上远离处理器310的一个或多个存储设备。存储器350包括易失性存储器或非易失性存储器,也可包括易失性和非易失性存储器两者。非易失性存储器可以是只读存储器(ROM,Read Only Memory),易失性存储器可以是随机存取存储器(RAM,Random Access Memory)。本申请实施例描述的存储器
350旨在包括任意适合类型的存储器。在一些实施例中,存储器350能够存储数据以支持各
种操作,这些数据的示例包括程序、模块和数据结构或者其子集或超集,下面示例性说明。
[0092] 操作系统351,包括用于处理各种基本系统服务和执行硬件相关任务的系统程序,例如框架层、核心库层、驱动层等,用于实现各种基础业务以及处理基于硬件的任务;
[0093] 网络通信模块352,用于经由一个或多个(有线或无线)网络接口320到达其他计算设备,示例性的网络接口320包括:蓝牙、无线相容性认证(WiFi)、和通用串行总线(USB,Universal Serial Bus)等;
[0094] 输入处理模块353,用于对一个或多个来自一个或多个输入装置332之一的一个或多个用户输入或互动进行检测以及翻译所检测的输入或互动。
[0095] 在一些实施例中,本申请实施例提供的装置可采用软件方式实现,图8示出了存储在存储器350中的一种图像渲染装置354,该图像渲染装置354可以是图像渲染设备中的图
像渲染装置,其可以是程序和插件等形式的软件,包括以下软件模块:获取模块3541、顶点消除模块3542和顶点渲染模块3543,这些模块是逻辑上的,因此根据所实现的功能可以进
行任意的组合或进一步拆分。将在下文中说明各个模块的功能。
[0096] 在另一些实施例中,本申请实施例提供的装置可以采用硬件方式实现,作为示例,本申请实施例提供的装置可以是采用硬件译码处理器形式的处理器,其被编程以执行本申请实施例提供的图像渲染方法,例如,硬件译码处理器形式的处理器可以采用一个或多个
应用专用集成电路(ASIC,Application Specific Integrated Circuit)、DSP、可编程逻辑器件(PLD,Programmable  Logic  Device)、复杂可编程逻辑器件(CPLD,Complex 
Programmable Logic Device)、现场可编程门阵列(FPGA,Field‑Programmable Gate 
Array)或其他电子元件。
[0097] 本申请各实施例提供的图像渲染方法可以由图像渲染设备来执行,其中,该图像渲染设备可以是任意一种具备图像处理功能、视频显示功能和图像渲染功能的终端,或者
也可以是服务器,即本申请各实施例的图像渲染方法可以通过终端来执行,也可以通过服
务器来执行,或者还可以通过终端与服务器进行交互来执行。
[0098] 参见图9,图9是本申请实施例提供的图像渲染方法的一个可选的流程示意图,下面将结合图9示出的步骤进行说明,需要说明的是,图9中的图像渲染方法是通过服务器作
为执行主体为例来说明的。
[0099] 步骤S901,获取待渲染数据和索引数据集合;待渲染数据对应一顶点集合。
[0100] 这里,待渲染数据是用于渲染得到渲染图像的原始数据,待渲染数据中包括渲染图像上每一像素点对应的数据,通过待渲染数据进行图像渲染,可以得到原始图像,该原始图像是未进行任何处理,且未体现任何渲染需求信息的图像,即未体现用户的任何渲染需
求的图像。
[0101] 索引数据集合是基于用户的渲染需求信息得到的,也就是说,索引数据集合中的索引数据是能够反映用户的渲染需求的数据。索引数据集合中的索引数据用于与待渲染数
据对应的顶点集合中的顶点进行计算,以确定出对应的顶点是否要被渲染。
[0102] 本申请实施例中,顶点集合中包括至少三个顶点,其中,每三个顶点可以形成一个三角形,在进行图像渲染过程中,三角形是图像渲染的最小单位。当然,也可以由四个顶点连接形成四边形,由五个顶点连接形成五边形等。这些三角形、四边形、五边形等图形叠加后构成本申请实施例中图像对应的网格。在实际渲染过程中,针对网格中的图形,均是将图像划分成三角形,以三角形为渲染单位进行渲染。
[0103] 在一些实施例中,索引数据集合中的索引数据可以是预先设置的,也可以是基于用户的渲染指令计算得到的。
[0104] 步骤S902,基于待渲染数据和索引数据集合中的索引数据,对顶点集合中的部分顶点进行顶点消除处理,得到待渲染顶点集合。
[0105] 这里,可以通过对待渲染数据对应的顶点集合中的每一顶点与索引数据集合中的索引数据进行顶点消除运算,得到每一顶点的运算结果,然后基于运算结果确定每一顶点
是否要被消除。或者,还可以通过确定每一顶点对应的索引数据的数据类型,确定出该顶点是否要被消除,也就是说,每一顶点对应的索引数据中可以具有一标签数据,该标签数据是能够标识该顶点的消除状态指示的,通过该消除状态指示可以确定出该顶点是否要被消
除。
[0106] 本申请实施例中,由于索引数据是预先设置的或者是基于用户的渲染指令计算得到的,因此索引数据能够表征用户的渲染需求,所以,基于索引数据进行顶点消除运算得到的运算结果,能够准确的反应出每一顶点是否事要被消除掉的顶点。或者,通过标签数据对顶点可以进行区分,能够快准确的确定出每一顶点是否是要被消除掉的顶点。
[0107] 顶点消除处理是指将顶点集合中的部分顶点删除掉,进而实现对顶点集合中的部分顶点不进行渲染。待渲染顶点集合中包括至少一个待渲染顶点,待渲染顶点是实际需要
进行渲染的顶点。待渲染顶点集合中的待渲染顶点的数量小于顶点集合中的顶点的数量。
[0108] 本申请实施例中,对部分顶点不进行渲染即间歇顶点渲染,也就是说,不是对顶点集合中的全部顶点按序进行连续渲染,而是间歇性的跳过一部分顶点,对这部分顶点不进行渲染。
[0109] 步骤S903,对待渲染顶点集合中的待渲染顶点依次进行顶点渲染,得到渲染后的图像。
[0110] 本申请实施例中,在得到消除了部分顶点的待渲染顶点集合之后,对待渲染顶点集合中的全部待渲染顶点进行顶点渲染,在渲染过程中,可以将待渲染顶点集合中的待渲
染顶点进行三角划分,得到多个三角形,然后以每一三角形为单位进行三角图像渲染,得到渲染后的图像。
[0111] 本申请实施例提供的图像渲染方法,基于所获取的待渲染数据和索引数据集合中的索引数据,对待渲染数据对应的顶点集合中的部分顶点进行顶点消除处理,得到待渲染
顶点集合;并对待渲染顶点集合中的待渲染顶点依次进行顶点渲染,得到渲染后的图像。如此,由于基于索引数据对顶点集合中的部分顶点进行顶点消除处理,从而能够调用一个绘
制调用即可实现间歇顶点渲染,不仅提高图像渲染效率,而且适用于不同的设备,具有高的适配性。
[0112] 在一些实施例中,图像渲染系统中至少包括终端和服务器。终端上运行有视频应用或者图像显示应用,这里以终端上运行有图像显示应用,且图像显示应用为游戏应用为
例进行说明。
[0113] 在游戏每一帧画面的渲染过程中,可以预先定义该帧画面中哪些部分是需要渲染的,哪些部分是不需要渲染的,这样,可以基于同一待渲染数据和用户的预定义信息渲染得到不同的游戏画面。举例来说,当对同一操作对象进行操作时,前后两帧的游戏画面的差异可能非常小,仅是局部上显示信息不同,因此,在图像渲染之前可以预先定义这两帧游戏画面中哪些局部区域的信息需要渲染,哪些局部区域的信息不需要渲染。在渲染的过程中,基于预定义信息,可以采用本申请实施例提供的图像渲染方法进行图像渲染,得到最终显示
的游戏画面。
[0114] 图10是本申请实施例提供的图像渲染方法的另一个可选的流程示意图,如图10所示,方法包括以下步骤:
[0115] 步骤S101,终端获取输入的待渲染数据和预设的渲染需求信息,待渲染数据对应一顶点集合。
[0116] 这里,渲染需求信息可以是用户通过终端输入的,例如,可以在输入待渲染数据时,对应于待渲染数据标记出不需要被渲染的区域、像素点或者顶点,则此时标记的全部数据构成该渲染需求信息。
[0117] 在一些实施例中,在进行图像渲染时,可以在游戏应用的当前界面上显示提示信息,该提示信息用于提示用户输入渲染需求信息,用户可以通过命令行输入框输入命令,形成渲染需求信息,也可以通过鼠标或键盘进行区域、像素点或者顶点的选择和标记,从而生成渲染需求信息。
[0118] 步骤S102,终端基于待渲染数据和预设的渲染需求信息生成图像渲染请求。
[0119] 这里,将待渲染数据和预设的渲染需求信息封装至图像渲染请求中。
[0120] 步骤S103,终端将图像渲染请求发送给服务器。
[0121] 步骤S104,服务器对渲染需求信息进行解析,得到与顶点集合中的每一顶点对应的索引数据。
[0122] 在一些实施例中,渲染需求信息中包括针对每一顶点的处理指令,对应地,步骤S104可以通过以下步骤S1041至步骤S1044(图中未示出)实现:
[0123] 步骤S1041,对每一顶点的索引数据进行初始化设置,得到初始化索引数据。
[0124] 这里,初始化设置可以是将每一顶点的索引数据设置为相同的初始值,由该初始值构成初始化索引数据。例如,将每一顶点的索引数据都设置为0,此时,初始化索引数据即为0。
[0125] 步骤S1042,对渲染需求信息进行解析,得到每一顶点的处理指令。
[0126] 这里,可以通过解析渲染需求信息,确定出针对每一顶点是否要进行渲染。当需要对某一顶点进行渲染时,该顶点对应的处理指定为渲染指令;当不需要对某一顶点进行渲染时,该顶点对应的处理指令为非渲染指令。
[0127] 在一些实施例中,还可以通过解析渲染需求信息,确定出针对每一顶点是否要进行消除处理。当需要对某一顶点进行消除处理时,该顶点对应的处理指定为非渲染指令;当不需要对某一顶点进行消除处理时,该顶点对应的处理指令为渲染指令。
[0128] 步骤S1043,当处理指令为渲染指令时,将顶点的初始化索引数据更新为第二类型索引数据。
[0129] 这里,第二类型索引数据是用于表征要对顶点进行渲染处理的索引数据。当任一顶点的索引数据为第二类型索引数据,则可以确定出该顶点是不需要进行消除处理,且是
需要进行渲染的顶点。
[0130] 本申请实施例中,基于处理指令为渲染指令对顶点的初始化所以数据进行更新,以通过第二类型索引数据为顶点添加渲染标签,使得在后续渲染过程中,能够基于第二类
型索引数据确定出对应顶点的渲染处理方式。
[0131] 步骤S1044,当处理指令为非渲染指令时,将顶点的初始化索引数据更新为第一类型索引数据。
[0132] 这里,第一类型索引数据是用于表征要对顶点不进行渲染处理的索引数据。当任一顶点的索引数据为第一类型索引数据,则可以确定出该顶点是需要进行消除处理,且是
不需要进行渲染的顶点。
[0133] 本申请实施例中,基于处理指令为非渲染指令对顶点的初始化所以数据进行更新,以通过第一类型索引数据为顶点添加渲染标签,使得在后续渲染过程中,能够基于第一类型索引数据确定出对应顶点的渲染处理方式。
[0134] 步骤S105,服务器对顶点集合中的全部顶点对应的索引数据进行整合,得到索引数据集合。
[0135] 本申请实施例中,索引数据集合中的每一索引数据与一个顶点之间具有映射关系。这里,对顶点集合中的全部顶点对应的索引数据进行整合,可以是统计全部顶点的索引数据,形成索引数据集合,在该索引数据集合中,包括每一顶点的索引数据,以及,顶点的顶点标识与索引数据之间的映射关系。通过顶点标识和该映射关系,则可以确定出顶点对应
的索引数据。
[0136] 在一些实施例中,终端还可以获取输入的待渲染数据和每一顶点对应的索引数据,并对全部顶点对应的索引数据进行整合得到索引数据集合,再基于待渲染数据和索引
数据集合生成图像渲染请求,此时图像渲染请求中包括待渲染数据和索引数据集合。也就
是说,可以由服务器获取终端发送的渲染需求信息,进而解析得到每一顶点的索引数据,并进一步对索引数据进行整合得到索引数据集合;或者,也可以由终端对用户的渲染需求信
息进行解析,得到每一顶点的索引数据,并进一步对索引数据进行整合得到索引数据集合。
[0137] 步骤S106,服务器获取顶点集合中的每一顶点的顶点位置信息。
[0138] 这里,顶点位置信息是指每一顶点在图像中的位置信息。顶点位置信息可以是一坐标数据,即顶点位置信息以坐标数据的形式呈现。
[0139] 步骤S107,服务器从索引数据集合中获取与每一顶点对应的索引数据。
[0140] 这里,可以基于每一顶点的顶点标识,从索引数据集合中确定出与每一顶点对应的索引数据。
[0141] 步骤S108,服务器基于索引数据,对每一顶点的顶点位置信息进行缩放处理,得到缩放结果。
[0142] 在一些实施例中,步骤S108可以通过以下步骤S1081和步骤S1082(图中未示出)实现:
[0143] 步骤S1081,将每一顶点的顶点位置信息与顶点对应的索引数据相乘得到顶点位置乘积。
[0144] 缩放处理是指对顶点位置信息进行坐标数据的缩减或放大。在一种实现方式中,索引数据可以取值为任意的正数。当任一顶点的索引数据为小于1的正数时,则通过索引数据可以对该顶点的坐标数据进行缩减;当任一顶点的索引数据为大于1的数时,则通过索引数据可以对该顶点的坐标数据进行放大;当任一顶点的索引数据等于1时,则基于索引数
据,该顶点的坐标数据不做变化。
[0145] 在另一种实现方式中,索引数据可以取值为0或1。当索引数据等于0时,则通过索引数据可以对该顶点的坐标数据进行缩减;当索引数据等于1时,则基于索引数据,该顶点的坐标数据不做变化。
[0146] 步骤S1082,将顶点位置乘积确定为顶点的缩放结果。
[0147] 步骤S109,服务器基于每一顶点的缩放结果,从顶点集合中确定出待消除顶点。
[0148] 在一种实现方式中,在获取到顶点集合中的每一顶点的顶点位置信息之后,还可以基于顶点位置信息,对顶点集合中的顶点进行三角划分,得到至少一个初始三角形;其
中,每一初始三角形包括三个顶点。对应地,基于每一顶点的缩放结果,从顶点集合中确定出待消除顶点,可以是当任一初始三角形的三个顶点对应的顶点位置乘积均相同时,将初
始三角形的三个顶点确定为待消除顶点。
[0149] 这里,当任一初始三角形的三个顶点对应的顶点位置乘积均相同,可以是当任一初始三角形的三个顶点对应的顶点位置乘积均为0时,将这个初始三角形的三个顶点确定
为待消除顶点。这样,由于三个顶点对应的顶点位置乘积均为0,即三个顶点的坐标数据均为0,三个顶点位于同一位置,三个顶点收缩到同一位置,隐藏了三个顶点中的其中两个,因此,这三个顶点均为待消除顶点,无需进行渲染。
[0150] 在另一种实现方式中,基于每一顶点的缩放结果,从顶点集合中确定出待消除顶点,可以是:当顶点位置乘积为第一类型位置数据时,将顶点位置乘积对应的顶点确定为待消除顶点;当顶点位置乘积为第二类型位置数据时,将顶点位置乘积对应的顶点确定为待
渲染顶点。
[0151] 这里,第一类型位置数据可以是0,则当任一顶点的顶点位置乘积为0时,将该顶点确定为待消除顶点;第二类型位置数据可以是1,则当任一顶点的顶点位置乘积为1时,将该顶点确定为待渲染顶点,即非消除顶点。
[0152] 步骤S110,服务器删除顶点集合中的待消除顶点,得到待渲染顶点集合。
[0153] 步骤S111,服务器对待渲染顶点集合中的待渲染顶点依次进行顶点渲染,得到渲染后的图像。
[0154] 步骤S112,服务器将渲染后的图像发送给终端。
[0155] 步骤S113,终端在当前界面上显示渲染后的图像。
[0156] 本申请实施例提供的图像渲染方法,基于每一顶点的索引数据,对每一顶点的顶点位置信息进行缩放处理,得到缩放结果,并基于每一顶点的缩放结果,从顶点集合中确定出待消除顶点。如此,能够准确的确定出待消除顶点,得到准确的待渲染顶点集合,实现对用户的渲染需求进行准确的响应。
[0157] 在一些实施例中,在进行图像渲染时,可以调用一个绘制调用(Drawcall)实现本申请实施例的图像渲染方法。
[0158] 图11是本申请实施例提供的图像渲染方法的再一个可选的流程示意图,如图11所示,方法包括以下步骤:
[0159] 步骤S121,终端获取输入的待渲染数据和预设的渲染需求信息,待渲染数据对应一顶点集合。
[0160] 步骤S122,终端基于待渲染数据和预设的渲染需求信息生成图像渲染请求。
[0161] 步骤S123,终端将图像渲染请求发送给服务器。
[0162] 步骤S124,服务器对渲染需求信息进行解析,得到与顶点集合中的每一顶点对应的索引数据。
[0163] 步骤S125,服务器对顶点集合中的全部顶点对应的索引数据进行整合,得到索引数据集合。
[0164] 索引数据集合中的每一索引数据与一个顶点之间具有映射关系。
[0165] 步骤S126,服务器从索引数据集合中获取与每一顶点对应的索引数据。
[0166] 步骤S127,服务器基于索引数据,确定每一顶点对应的顶点处理状态。
[0167] 在一种实现方式中,服务器还可以获取每一顶点的顶点位置信息;并基于顶点位置信息,对顶点集合中的顶点进行三角划分,得到至少一个初始三角形;其中,每一初始三角形包括三个顶点。对应地,基于索引数据确定每一顶点对应的顶点处理状态,可以是当任一初始三角形的三个顶点对应的索引数据均为预设类型索引数据时,将初始三角形的三个
顶点的顶点处理状态确定为消除状态,也就是说,将初始三角形的三个顶点确定为待消除
顶点。
[0168] 在另一种实现方式中,基于索引数据确定每一顶点对应的顶点处理状态,可以是:当索引数据为第一类型索引数据时,将与索引数据具有映射关系的顶点的顶点处理状态确
定为消除状态;当索引数据为第二类型索引数据时,将与索引数据具有映射关系的顶点的
顶点处理状态确定为非消除状态。也就是说,当索引数据为第一类型索引数据时,将与索引数据具有映射关系的顶点确定为待消除顶点;当索引数据为第二类型索引数据时,将与索
引数据具有映射关系的顶点确定为待渲染顶点。
[0169] 步骤S128,当任一顶点的顶点处理状态为消除状态时,服务器将该顶点确定为待消除顶点。
[0170] 步骤S129,服务器删除顶点集合中的待消除顶点,得到待渲染顶点集合。
[0171] 步骤S130,服务器对待渲染顶点集合中的待渲染顶点依次进行顶点渲染,得到渲染后的图像。
[0172] 在一些实施例中,步骤S130可以通过以下步骤S1301至步骤S1303(图中未示出)实现:
[0173] 步骤S1301,获取每一待渲染顶点的顶点位置信息。
[0174] 步骤S1302,基于顶点位置信息,对待渲染顶点集合中的待渲染顶点进行三角划分,得到至少一个待渲染三角形。
[0175] 步骤S1303,以每一待渲染三角形为渲染单位进行顶点渲染,得到渲染后的图像。
[0176] 步骤S131,服务器将渲染后的图像发送给终端。
[0177] 步骤S132,终端在当前界面上显示渲染后的图像。
[0178] 本申请实施例提供的图像渲染方法,服务器基于索引数据,确定每一顶点对应的顶点处理状态,当任一顶点的顶点处理状态为消除状态时,服务器将该顶点确定为待消除
顶点,从而进行顶点消除,得到待渲染顶点集合;并对待渲染顶点集合中的待渲染顶点依次进行顶点渲染,得到渲染后的图像。如此,由于基于索引数据对顶点集合中的部分顶点进行顶点消除处理,从而能够调用一个绘制调用即可实现间歇顶点渲染,不仅提高图像渲染效
率,而且适用于不同的设备,具有高的适配性。另外,由于能够准确的确定出待消除顶点,得到准确的待渲染顶点集合,因此实现了对用户的渲染需求进行准确的响应。
[0179] 下面,以任一游戏应用P1的游戏画面渲染为例,对本申请实施例的图像渲染方法进行说明。
[0180] 当用户作为玩家在终端上运行游戏应用P1开始玩游戏时,对应于用户的每一操作,均显示有特定的游戏画面,在游戏应用P1的服务器渲染每一游戏画面时,由于游戏应用中画面的连续性,前后连续几帧的游戏画面可能差别不大,仅具有局部的差异,因此,在实现的时刻,对于连续的游戏画面可以进行批渲染,并提取出局部的差异,得到每一游戏画面的待渲染顶点进行顶点渲染。在这种情况下,前一游戏画面的渲染数据就可以构成后一游
戏画面的待渲染数据,同时基于用户的操作,确定出后一游戏画面不需要渲染的部分,从而得到后一游戏画面的待渲染顶点。也就是说,本申请实施例的方法,能够解决的问题正是对连续相似视频帧的快速准确渲染。
[0181] 为了实现对连续相似视频帧的快速准确渲染,本申请实施例中,首先获取该游戏画面的的待渲染数据和对应用户操作的索引数据集合,这里索引数据集合与用户的操作对
应,即可以基于用户的操作确定出索引数据集合;该待渲染数据对应一顶点集合;然后基于待渲染数据和索引数据集合中的索引数据,对顶点集合中的部分顶点进行顶点消除处理,
得到待渲染顶点集合;最后对待渲染顶点集合中的待渲染顶点依次进行顶点渲染,得到游
戏画面。
[0182] 参见图12A和图12B,其中,图12A呈现的是用户未进行操作之前的原始人脸图像(即原始图像),图12B呈现的是用户进行任一操作后所需要显示的游戏画面(即渲染后的图像),对应于用户的操作,需要显示的游戏画面相比于原始人脸图像,对部分头发121不进行渲染。因此,需要得到能够渲染出不包括部分头发121的待渲染数据。在实现的过程中,可以获取用户在原始人脸图像下的操作指令K1,并基于K1确定出与该操作指令K1对应的渲染需
求信息,然后对渲染需求信息进行解析,得到与图12A中的原始人脸图像的待渲染数据对应的顶点集合中的每一顶点的索引数据;其中,基于索引数据能够确定每一顶点对应的顶点
处理状态,顶点处理状态包括消除状态和非消除状态。在得到每一顶点的索引数据之后,基于原始人脸图像的待渲染数据和索引数据集合中的索引数据,对原始人脸图像中的部分头
发121区域的顶点进行顶点消除处理,得到游戏画面的待渲染顶点集合,然后对待渲染顶点集合中的待渲染顶点依次进行顶点渲染,得到未渲染部分头发121区域的游戏画面。
[0183] 本申请实施例中,在进行游戏画面渲染时,基于用户的操作指令确定出对应的索引数据集合,该索引数据集合能够表征用户的渲染需求,即基于该索引数据集合中的索引
数据能够确定出游戏画面中哪些顶点需要渲染,哪些顶点不需要渲染,从而能够实现对连
续相似视频帧的快速准确渲染。
[0184] 下面,将说明本申请实施例在一个实际的应用场景中的示例性应用。本申请实施例提供一种图像渲染方法,该图像渲染方法是一种适配性更广的GPU渲染调用优化方法。该方法解决了某些场景下,从顶点缓冲区的单个绘制调用实现间歇顶点渲染的需求,即单个
绘制调用内不是由1至n顺序全部渲染,而是单个绘制调用内间歇地1‑10,31‑100,221‑
300…,1000‑n渲染,中间有一些顶点会略过。
[0185] 本申请实施例中,只需做少量处理来判定中间顶点是否显示,且算法不需高端GPU硬件,无需OpenGL3.1或以上才支持的glMultiDraw的图形绘制接口,只需使用间歇渲染函
数(例如,可以是glDrawElements函数)即可实现一个绘制调用为顶点缓冲区进行间歇渲染顶点。本申请实施例中,通过在顶点数据添加一个索引值,用以索引比例因子数组
(scaleFactors[]),从而控制顶点收缩到[0,0,0],以达到隐藏顶点或三角形面,实现间歇渲染顶点的目的。
[0186] 本申请实施例中,通过将把顶点收缩到同一位置(比如说[0,0,0]),利用GPU渲染特性(当三角形的3个顶点都在同一位置时,不会渲染任何像素),达到是否渲染顶点(以及三角形)的目的。利用把顶点收缩到同一位置(比如说[0,0,0]),控制是否渲染顶点以及三角形,达到间歇地渲染顶点缓冲的顶点(以及三角形)。
[0187] 本申请实施例的方法至少可以应用于以下场景:在衣服系统中,在单个绘图调用中,需要启用/禁用身体某些部分的渲染。如图12A和图12B所示,其中,图12A为原始图像,图
12B为禁用身体头发部分渲染的图像,针对于图像中人物的头发,可以禁止对图12B中的部
分头发121进行渲染。
[0188] 本申请实施例的方法可以使用任何有GPU,并最少支持OpenGL‑ES 2.0标准的设备的硬件环境。
[0189] 本申请实施例在实现顶点消除处理时所使用的顶点消除算法主要涉及以下原理:每个顶点添加一个顶点索引数据(scaleFactorIdx),该顶点索引数据用于索引比例因子
(scaleFactors)数组。在渲染时每个顶点位置(vertices[i].xyz)都用这个比例因子数组做缩放,例如可以通过scaleFactors[vertices[i].scaleFactorIdx]计算做缩放,则缩放
结果表示为以下公式(1):
[0190] p=vertices[i].xyz*scaleFactors[vertices[i].scaleFactorIdx]    (1)。
[0191] 这里,*表示相乘。经过上述缩放处理后,可以把缩放过的结果p渲染。因此,如果scaleFactors[vertices[i].scaleFactorIdx]=1,p的位置没有变化(等于vertices[i].xyz),否则scaleFactors[vertices[i].scaleFactorIdx]=0,p的位置变为原点[0,0,0]。
[0192] 本申请实施例中,因为GPU有以下特性:当三角形的3个顶点都在同一位置时,不会渲染任何像素。利用此特性加上以上顶点消除算法,可以产生非常有用的结果。当三角形的所有3个顶点的scaleFactors[vertices[i].scaleFactorIdx]为1时,顶点位置不变,因此三角形形状被正常渲染。然而,如果三角形所有3个顶点的scaleFactors[vertices[i]
.scaleFactorIdx]都为0,三角形的所有顶点都收缩[0,0,0],三角形收缩到单个点[0,0,
0]。三角形隐藏不被渲染。
[0193] 通过顶点的缩放,可以控制三角形是否渲染。所以,整个三角形数组中间的三角形可以随意的选择隐藏,这样便可以达到间歇顶点(三角形)渲染的效果。
[0194] 图13是本申请实施例提供的图像渲染方法的流程图,如图13所示,方法包括以下步骤:
[0195] 步骤S1301,加载比例因子数组的数值scaleFactors[]。
[0196] 步骤S1302,定义i=0。
[0197] 步骤S1303,基于顶点索引数据(scaleFactorIdx),计算scaleFactor=scaleFactors[vertex[i].scaleFactorldx]。
[0198] 步骤S1304,在渲染时每个顶点位置(vertices[i].xyz)都用这个scaleFactors[vertices[i].scaleFactorIdx]做缩放,即计算p.xyz=vertex[vertexldx].xyz*
scaleFactor。
[0199] 步骤S1305,渲染顶点p。
[0200] 步骤S1306,定义i=i+1。
[0201] 步骤S1307,判断i是否小于顶点总数。
[0202] 如果判断结果为是,则返回继续执行步骤S1303;如果判断结果为否,则结束流程,完成渲染顶点缓存。
[0203] 图14是本申请实施例提供的图像渲染方法的另一流程图,如图14所示,方法包括以下步骤:
[0204] 步骤S1401,初始化比例因子数组的数值等于1(即,scaleFactors[]=1)。
[0205] 步骤S1402,定义i=0。
[0206] 步骤S1403,判断是否要开启顶点i的渲染。
[0207] 如果判断结果为是,则执行步骤S1404;如果判断结果为否,则执行步骤S1405。
[0208] 步骤S1404,定义第i个比例因子数组的数值等于0(即scaleFactors[i]=0)。
[0209] 步骤S1405,判断是否要打开顶点i的渲染。
[0210] 如果判断结果为是,则执行步骤S1406;如果判断结果为否,则执行步骤S1405。
[0211] 步骤S1406,定义第i个比例因子数组的数值等于1(即scaleFactors[i]=1)。
[0212] 步骤S1407,定义i=i+1。
[0213] 步骤S1408,判断i是否小于比例因子数组中的数值的总数。
[0214] 如果判断结果为是,返回继续执行步骤S1403;如果判断结果为否,则结束流程,完成更改顶点是否渲染流程。
[0215] 图15至图17是本申请实施例的方法分别应用于低端机、中端机和高端机的效果示意图,如图15所示,在低端机上,平均每秒传输帧数(FPS,Frames Per Second)为58.9,且在运行过程中,FPS的变化曲线151是比较平稳的。需要说明的是,图15中在00:06时之后的FPS比较稳定,而在00:06时出现较大的低谷值,原因主要是:其他干扰因素的影响,比如游戏刚启动,是需要处理很多其他事情,而这些事情是与本申请实施例的图像渲染过程没有关系
的,因此,可以忽略该低谷值。
[0216] 如图16所示,在中端机上,平均FPS为59.6,且在运行过程中,FPS的变化曲线161也是比较平稳的(忽略00:06时的低谷值)。
[0217] 如图17所示,在高端机上,平均FPS为59.6,且在运行过程中,FPS的变化曲线171也是比较平稳的(忽略00:06时的低谷值)。
[0218] 基于以上本申请实施例提供的图像渲染方法,在实现间歇顶点渲染问题中,因为不需拷贝顶点数据,不需高端GPU,所以本申请实施例的方法的适配性更广,且渲染效率没有因为启用/禁用而有损失。
[0219] 可以理解的是,在本申请实施例中,涉及到用户信息的内容,例如,待渲染数据、索引数据集合、渲染后的图像等信息,如果涉及与用户信息或企业信息相关的数据,当本申请实施例运用到具体产品或技术中时,需要获得用户许可或者同意,且相关数据的收集、使用和处理需要遵守相关国家和地区的相关法律法规和标准。
[0220] 下面继续说明本申请实施例提供的图像渲染装置354实施为软件模块的示例性结构,在一些实施例中,如图8所示,图像渲染装置354包括:
[0221] 获取模块3541,用于获取待渲染数据和索引数据集合;所述待渲染数据对应一顶点集合;
[0222] 顶点消除模块3542,用于基于所述待渲染数据和所述索引数据集合中的索引数据,对所述顶点集合中的部分顶点进行顶点消除处理,得到待渲染顶点集合;
[0223] 顶点渲染模块3543,用于对所述待渲染顶点集合中的待渲染顶点依次进行顶点渲染,得到渲染后的图像。
[0224] 在一些实施例中,所述索引数据集合中的每一索引数据与一个顶点之间具有映射关系;所述顶点消除模块还用于:获取所述顶点集合中的每一顶点的顶点位置信息;从所述索引数据集合中获取与每一顶点对应的索引数据;基于所述索引数据,对每一顶点的顶点
位置信息进行缩放处理,得到缩放结果;基于每一顶点的缩放结果,从所述顶点集合中确定出待消除顶点;删除所述顶点集合中的待消除顶点,得到所述待渲染顶点集合。
[0225] 在一些实施例中,所述顶点消除模块还用于:将每一顶点的顶点位置信息与所述顶点对应的索引数据相乘得到顶点位置乘积;将所述顶点位置乘积确定为所述顶点的缩放
结果。
[0226] 在一些实施例中,所述装置还包括:第一三角划分模块,用于基于所述顶点位置信息,对所述顶点集合中的顶点进行三角划分,得到至少一个初始三角形;其中,每一所述初始三角形包括三个顶点;对应地,所述顶点消除模块还用于:当任一初始三角形的三个顶点对应的顶点位置乘积均相同时,将所述初始三角形的三个顶点确定为所述待消除顶点。
[0227] 在一些实施例中,所述顶点消除模块还用于:当所述顶点位置乘积为第一类型位置数据时,将所述顶点位置乘积对应的顶点确定为所述待消除顶点;当所述顶点位置乘积
为第二类型位置数据时,将所述顶点位置乘积对应的顶点确定为所述待渲染顶点。
[0228] 在一些实施例中,所述索引数据集合中的每一索引数据与一个顶点之间具有映射关系;所述顶点消除模块还用于:从所述索引数据集合中获取与每一顶点对应的索引数据;
基于所述索引数据,确定每一顶点对应的顶点处理状态;当任一顶点的顶点处理状态为消
除状态时,将所述顶点确定为待消除顶点;删除所述顶点集合中的待消除顶点,得到所述待渲染顶点集合。
[0229] 在一些实施例中,所述装置还包括:位置信息获取模块,用于获取每一顶点的顶点位置信息;第二三角划分模块,用于基于所述顶点位置信息,对所述顶点集合中的顶点进行三角划分,得到至少一个初始三角形;其中,每一所述初始三角形包括三个顶点;所述顶点消除模块还用于:当任一初始三角形的三个顶点对应的索引数据均为预设类型索引数据时,将所述初始三角形的三个顶点的顶点处理状态确定为消除状态。
[0230] 在一些实施例中,所述顶点消除模块还用于:当所述索引数据为第一类型索引数据时,将与所述索引数据具有所述映射关系的顶点的顶点处理状态确定为消除状态;当所
述索引数据为第二类型索引数据时,将与所述索引数据具有所述映射关系的顶点的顶点处
理状态确定为非消除状态。
[0231] 在一些实施例中,所述顶点渲染模块还用于:获取每一待渲染顶点的顶点位置信息;基于所述顶点位置信息,对所述待渲染顶点集合中的待渲染顶点进行三角划分,得到至少一个待渲染三角形;以每一所述待渲染三角形为渲染单位进行顶点渲染,得到所述渲染
后的图像。
[0232] 在一些实施例中,所述装置还包括:请求获取模块,用于获取图像渲染请求,所述图像渲染请求中包括所述待渲染数据和预设的渲染需求信息;解析模块,用于对所述渲染需求信息进行解析,得到与所述顶点集合中的每一顶点对应的索引数据;整合模块,用于对所述顶点集合中的全部顶点对应的索引数据进行整合,得到所述索引数据集合。
[0233] 在一些实施例中,所述渲染需求信息中包括针对每一顶点的处理指令;所述解析模块还用于:对每一顶点的索引数据进行初始化设置,得到初始化索引数据;对所述渲染需求信息进行解析,得到每一顶点的处理指令;当所述处理指令为渲染指令时,将所述顶点的初始化索引数据更新为第二类型索引数据;当所述处理指令为非渲染指令时,将所述顶点
的初始化索引数据更新为第一类型索引数据。
[0234] 需要说明的是,本申请实施例装置的描述,与上述方法实施例的描述是类似的,具有同方法实施例相似的有益效果,因此不做赘述。对于本装置实施例中未披露的技术细节,请参照本申请方法实施例的描述而理解。
[0235] 本申请实施例提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括可执行指令,该可执行指令是一种计算机指令;该可执行指令存储在计算机
可读存储介质中。当图像渲染设备的处理器从计算机可读存储介质读取该可执行指令,处
理器执行该可执行指令时,使得该图像渲染设备执行本申请实施例上述的方法。
[0236] 本申请实施例提供一种存储有可执行指令的存储介质,其中存储有可执行指令,当可执行指令被处理器执行时,将引起处理器执行本申请实施例提供的方法,例如,如图9示出的方法。
[0237] 在一些实施例中,存储介质可以是计算机可读存储介质,例如,铁电存储器(FRAM,Ferromagnetic Random Access Memory)、只读存储器(ROM,Read Only Memory)、可编程只读存储器(PROM,Programmable Read Only Memory)、可擦除可编程只读存储器(EPROM,Erasable Programmable Read Only Memory)、带电可擦可编程只读存储器(EEPROM,Electrically Erasable Programmable Read Only Memory)、闪存、磁表面存储器、光盘、或光盘只读存储器(CD‑ROM,Compact Disk‑Read Only Memory)等存储器;也可以是包括上述存储器之一或任意组合的各种设备。
[0238] 在一些实施例中,可执行指令可以采用程序、软件、软件模块、脚本或代码的形式,按任意形式的编程语言(包括编译或解释语言,或者声明性或过程性语言)来编写,并且其可按任意形式部署,包括被部署为独立的程序或者被部署为模块、组件、子例程或者适合在计算环境中使用的其它单元。
[0239] 作为示例,可执行指令可以但不一定对应于文件系统中的文件,可以可被存储在保存其它程序或数据的文件的一部分,例如,存储在超文本标记语言(HTML,Hyper Text Markup Language)文档中的一个或多个脚本中,存储在专用于所讨论的程序的单个文件
中,或者,存储在多个协同文件(例如,存储一个或多个模块、子程序或代码部分的文件)中。
作为示例,可执行指令可被部署为在一个计算设备(可以是作业运行时长确定设备)上执
行,或者在位于一个地点的多个计算设备上执行,又或者,在分布在多个地点且通过通信网络互连的多个计算设备上执行。
[0240] 以上所述,仅为本申请的实施例而已,并非用于限定本申请的保护范围。凡在本申请的精神和范围之内所作的任何修改、等同替换和改进等,均包含在本申请的保护范围之内。