本发明属于cad软件开发领域,尤其涉及一种基于间接渲染的遮挡剔除方法及系统。
背景技术:
1、本部分的陈述仅仅是提供了与本发明相关的背景技术信息,不必然构成在先技术。
2、在cad的渲染过程中,平均50%以上的物体是被其它物体遮挡的。这些被遮挡的物体是否进行渲染,对最终的呈现渲染效果没有任何影响。但如果参与渲染,会导致gpu的过度渲染,产生不必要的开销,在渲染大数模时浏览帧率低等问题。如图1所示,为了解决这一问题,渲染前通常会通过遮挡剔除,将被遮挡模型排除,从而减少每帧的渲染数据量,减轻gpu的压力,从而提升渲染帧率。
3、目前,遮挡剔除的常用方法有基于cpu的计算、遮挡查询等,但是这些方法存在如下弊端:
4、(1)基于cpu的大部分算法对cpu的开销非常高,即使使用多线程单独计算,也会因为计算时间太长导致明显的剔除结果滞后问题;
5、(2)基于gpu遮挡查询的方法需要大量的渲染提交次数,渲染性能较低,在大数据渲染时,达不到通过遮挡剔除实现高速渲染的目的,并且需要明确遮挡物。
技术实现思路
1、为了解决上述背景技术中存在的至少一项技术问题,本发明提供一种基于opengl间接渲染的遮挡剔除方法及系统,其通过预先为每个模型分配一个唯一的用于遮挡剔除的渲染颜色,使用opengl的间接渲染功能,通过极少的drallcall次数将渲染结果保存在单独的纹理图中。然后获取纹理图中所有的像素点上的颜色及每个颜色的像素数量。通过颜色与模型的关联数组,可以快速的确定每个模型。纹理图中出现的颜色,并且该颜色在纹理图中出现的像素数大于阈值,对应的模型判定为不能剔除,其它模型判定为剔除。通过这种方式,可以实现快速高效的遮挡剔除。
2、为了实现上述目的,本发明采用如下技术方案:
3、本发明的第一个方面提供一种基于间接渲染的遮挡剔除方法,包括如下步骤:
4、为场景中所有模型分配唯一用于遮挡剔除的颜色;
5、通过间接渲染命令,将渲染结果存入独立纹理图;
6、获取纹理图中所有像素点上的颜色及每个颜色的像素数量;
7、根据纹理图中所有像素点上的颜色确定对应的模型,通过该颜色在纹理图中的像素数量和阈值比较,剔除小于阈值对应的模型,将其放入剔除列表中。
8、进一步地,所述为场景中所有模型分配唯一用于遮挡剔除的颜色,包括:
9、定义模型与渲染结果中出现像素数量的结构体和存储该结构体的数组;
10、为所有参与遮挡剔除的模型生成一个结构体,并存储至模型数组中,每个模型对应一个该模型数组中的索引;
11、通过将该索引转换为rgb值,得到模型的唯一渲染颜色。
12、进一步地,所述根据纹理图中所有像素点上的颜色确定对应的模型,包括:
13、将颜色的rgb值,转化为模型数组索引,根据该模型数组索引确定对应的模型。
14、进一步地,根据索引转换为rgb值的公式如下:
15、color.r=index/256/256;
16、color.g=index/256%256;
17、color.b=index%256;
18、其中,color.r表示颜色的红色分量,color.g表示颜色的绿色分量,color.b表示颜色的蓝色分量,index表示模型对应的索引。
19、进一步地,渲染时,生成间接渲染的vao,通过绑定vao对象,切换渲染数据,所述vao的数据结构包括:顶点数组、索引缓冲对象、间接渲染的命令缓存、记录gpu内存中的模型矩阵和记录gpu内存中的颜色矩阵。
20、进一步地,接收到的其它剔除算法剔除后的模型列表,修改间接渲染vao中的间接渲染的命令缓存,将输入可见模型对应的命令设置为渲染生效,其它的设置为渲染不生效。
21、进一步地,所述通过间接渲染命令,将渲染结果存入独立纹理图时,采用opengl渲染器。
22、本发明的第二个方面提供一种基于间接渲染的遮挡剔除系统,包括:
23、颜色分配模块,其用于为场景中所有模型分配唯一用于遮挡剔除的颜色;
24、间接渲染模块,其用于通过间接渲染命令,将渲染结果存入独立纹理图;
25、遮挡剔除模块,其用于获取纹理图中所有像素点上的颜色及每个颜色的像素数量;根据纹理图中所有像素点上的颜色确定对应的模型,通过该颜色在纹理图中的像素数量和阈值比较,剔除小于阈值对应的模型,将其放入剔除列表中。
26、本发明的第三个方面提供一种计算机可读存储介质。
27、一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如上述所述的一种基于间接渲染的遮挡剔除方法中的步骤。
28、本发明的第四个方面提供一种计算机设备。
29、一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上述所述的一种基于间接渲染的遮挡剔除方法中的步骤。
30、与现有技术相比,本发明的有益效果是:
31、本发明通过预先为每个模型分配一个唯一的用于遮挡剔除的渲染颜色,使用opengl的间接渲染功能,通过极少的drallcall次数将渲染结果保存在单独的纹理图中。然后获取纹理图中所有的像素点上的颜色及每个颜色的像素数量。通过颜色与模型的关联数组,可以快速的确定每个模型。纹理图中出现的颜色,并且该颜色在纹理图中出现的像素数大于阈值,对应的模型判定为不能剔除,其它模型判定为剔除。通过这种方式,可以有效的解决遮挡剔除需要大量的drawcall带来的渲染性能问题及必须预先明确遮挡物的问题,实现快速高效的遮挡剔除。
32、本发明附加方面的优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本发明的实践了解到。
1.一种基于间接渲染的遮挡剔除方法,其特征在于,包括如下步骤:
2.如权利要求1所述的一种基于间接渲染的遮挡剔除方法,其特征在于,所述
3.如权利要求2所述的一种基于间接渲染的遮挡剔除方法,其特征在于,所述根据纹理图中所有像素点上的颜色确定对应的模型,包括:
4.如权利要求2所述的一种基于间接渲染的遮挡剔除方法,其特征在于,根据索引转换为rgb值的公式如下:
5.如权利要求1所述的一种基于间接渲染的遮挡剔除方法,其特征在于,渲染时,生成间接渲染的vao,通过绑定vao对象,切换渲染数据,所述vao的数据结构包括:顶点数组、索引缓冲对象、间接渲染的命令缓存、记录gpu内存中的模型矩阵和记录gpu内存中的颜色矩阵。
6.如权利要求5所述的一种基于间接渲染的遮挡剔除方法,其特征在于,接收到的其它剔除算法剔除后的模型列表,修改间接渲染vao中的间接渲染的命令缓存,将输入可见模型对应的命令设置为渲染生效,其它的设置为渲染不生效。
7.如权利要求1所述的一种基于间接渲染的遮挡剔除方法,其特征在于,所述通过间接渲染命令,将渲染结果存入独立纹理图时,采用opengl渲染器。
8.一种基于间接渲染的遮挡剔除系统,其特征在于,包括:
9.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1-7中任一项所述的一种基于间接渲染的遮挡剔除方法中的步骤。
10.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1-7中任一项所述的一种基于间接渲染的遮挡剔除方法中的步骤。