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

一种半透明对象渲染排序方法、装置、设备及存储介质与流程

2022-03-02 01:47:32 来源:中国专利 TAG:


1.本发明实施例涉及图像处理技术领域,尤其涉及一种半透明对象渲染排序方法、装置、设备及存储介质。


背景技术:

2.为了表现更好地展现人物显示效果,在图像处理领域,通常需要对人物进行半透明处理,从而让人物栩栩如生,以提升用户体验。
3.现有技术中,一般会规避半透明渲染的排序处理,或者采用手工排序方式渲染半透明部分,导致现有技术中未处理半透明部分的渲染结果效果较差,而手工排序半透明部分又存在费时费力的问题。


技术实现要素:

4.本发明实施例提供一种半透明对象渲染排序方法、装置、设备及存储介质,能够在保证半透明对象渲染效果的前提下,提升半透明对象的渲染排序效率。
5.第一方面,本发明实施例提供了一种半透明对象渲染排序方法,包括:
6.获取半透明对象图形集合中的半透明对象图形的遮挡率数据;
7.根据半透明对象图形的遮挡率数据确定半透明对象的单层半透明对象分布子集以及单层半透明对象分布子集的子集间排序数据;
8.根据单层半透明对象分布子集的子集间排序数据对半透明对象图形集合中的半透明对象图形进行排序渲染。
9.第二方面,本发明实施例还提供了一种半透明对象渲染排序装置,包括:
10.遮挡率数据获取模块,用于获取半透明对象图形集合中的半透明对象图形的遮挡率数据;
11.数据处理模块,用于根据半透明对象图形的遮挡率数据确定半透明对象的单层半透明对象分布子集以及单层半透明对象分布子集的子集间排序数据;
12.排序渲染模块,用于根据单层半透明对象分布子集的子集间排序数据对半透明对象图形集合中的半透明对象图形进行排序渲染。
13.第三方面,本发明实施例还提供了一种电子设备,电子设备包括:
14.一个或多个处理器;
15.存储装置,用于存储一个或多个程序;
16.当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现本发明任意实施例所提供的半透明对象渲染排序方法。
17.第四方面,本发明实施例还提供了一种计算机存储介质,其上存储有计算机程序,该程序被处理器执行时实现本发明任意实施例所提供的半透明对象渲染排序方法。
18.本实施例的技术方案,通过获取半透明对象图形集合中的半透明对象图形的遮挡率数据,进而根据半透明对象图形的遮挡率数据确定半透明对象的单层半透明对象分布子
集以及单层半透明对象分布子集的子集间排序数据,以根据单层半透明对象分布子集的子间集排序数据对半透明对象图形集合中的半透明对象图形进行排序渲染。通过遮挡率数据确定单层半透明对象分布子集可以实现对半透明对象图形集合基于层次的划分,而根据子间集排序数据对半透明对象图形集合中的半透明对象图形进行排序渲染,无需人工干预能够对实现层次划分的半透明对象图形集合按照子间集排序数据自动排序渲染,还能够保证更好的渲染效果,解决了现有技术中未处理半透明部分导致渲染结果效果较差,以及手工排序半透明部分又存在费时费力的问题,能够在保证半透明对象渲染效果的前提下,提升半透明对象的渲染排序效率。
附图说明
19.图1是本发明实施例一提供的一种半透明对象渲染排序方法的流程图;
20.图2是本发明实施例二提供的一种半透明对象渲染排序方法的流程图;
21.图3是本发明实施例二提供的一种标识颜色后的发束示意图;
22.图4是本发明实施例二提供的一种未排序的渲染效果示意图;
23.图5为本发明实施例二提供的一种排序后的渲染效果示意图;
24.图6是本发明实施例二提供的一种将头发模型的网格划分为发束的示意图;
25.图7是本发明实施例二提供的另一种将头发模型的网格划分为发束的示意图;
26.图8是本发明实施例二提供的一种未进行层内排序的头发模型的示意图;
27.图9是本发明实施例二提供的一种未进行层内排序的头发模型以及进行层内排序的头发模型的对比图;
28.图10是本发明实施例二提供的另一种未进行层内排序的头发模型以及进行层内排序的头发模型的对比图;
29.图11是本发明实施例三提供的一种半透明对象渲染排序装置的示意图;
30.图12为本发明实施例四提供的一种电子设备的结构示意图。
具体实施方式
31.下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。
32.另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部内容。在更加详细地讨论示例性实施例之前应当提到的是,一些示例性实施例被描述成作为流程图描绘的处理或方法。虽然流程图将各项操作(或步骤)描述成顺序的处理,但是其中的许多操作可以被并行地、并发地或者同时实施。此外,各项操作的顺序可以被重新安排。当其操作完成时所述处理可以被终止,但是还可以具有未包括在附图中的附加步骤。所述处理可以对应于方法、函数、规程、子例程、子程序等等。
33.实施例一
34.图1是本发明实施例一提供的一种半透明对象渲染排序方法的流程图,本实施例可适用于高效排序渲染半透明对象的情况,该方法可以由半透明对象渲染排序装置来执行,该装置可以由软件和/或硬件的方式来实现,并一般可集成在电子设备中。相应的,如图1所示,该方法包括如下操作:
35.s110、获取半透明对象图形集合中的半透明对象图形的遮挡率数据。
36.其中,半透明对象图形集合可以是需要渲染排序的半透明物体的图形集合。半透明对象图形可以是半透明对象图形集合中的半透明物体的图形。半透明对象图形集合可以包括至少一个半透明对象图形。示例性的,半透明对象图形可以包括但不限于半透明头发图形、半透明衣服图形、半透明五官图形、半透明发饰图形以及半透明字符图形等。当半透明对象图形为半透明头发图形时,半透明对象图形集合可以是包括多个半透明头发图形的图形集合。遮挡率数据可以用于表征物体的遮挡程度的数据。
37.在本发明实施例中,可以先获取半透明对象图形集合,进而确定半透明对象图形集合包括的半透明对象图形,从而计算各半透明对象图形的遮挡率数据。
38.s120、根据半透明对象图形的遮挡率数据确定半透明对象的单层半透明对象分布子集以及单层半透明对象分布子集的子集间排序数据。
39.其中,半透明对象可以是需要渲染排序的半透明物体。单层半透明对象分布子集可以是半透明对象图形集合中的,属于某一层次的半透明对象图形的集合。示例性的,当半透明对象为头发模型时,半透明对象图形可以是发束,单层半透明对象分布子集可以是头发模型中某一层次的发束。子集间排序数据可以是表征单层半透明对象分布子集的渲染次序的数据。
40.在本发明实施例中,可以根据半透明对象图形的遮挡率数据对半透明对象图形集合中的半透明对象图形进行划分,得到半透明对象的单层半透明对象分布子集,以使位于单层半透明对象分布子集的半透明对象图形属于同一层次,进而根据划分单层半透明对象分布子集的顺序确定单层半透明对象分布子集的子集间排序数据。
41.s130、根据单层半透明对象分布子集的子集间排序数据对半透明对象图形集合中的半透明对象图形进行排序渲染。
42.在本发明实施例中,可以根据单层半透明对象分布子集的子集间排序数据确定单层半透明对象分布子集的渲染顺序,进而根据单层半透明对象分布子集的渲染顺序对半透明对象图形集合中的半透明对象图形进行排序渲染。
43.本实施例的技术方案,通过获取半透明对象图形集合中的半透明对象图形的遮挡率数据,进而根据半透明对象图形的遮挡率数据确定半透明对象的单层半透明对象分布子集以及单层半透明对象分布子集的子集间排序数据,以根据单层半透明对象分布子集的子间集排序数据对半透明对象图形集合中的半透明对象图形进行排序渲染。通过遮挡率数据确定单层半透明对象分布子集可以实现对半透明对象图形集合基于层次的划分,而根据子间集排序数据对半透明对象图形集合中的半透明对象图形进行排序渲染,无需人工干预能够对实现层次划分的半透明对象图形集合按照子间集排序数据自动排序渲染,还能够保证更好的渲染效果,解决了现有技术中未处理半透明部分导致渲染结果效果较差,以及手工排序半透明部分又存在费时费力的问题,能够在保证半透明对象渲染效果的前提下,提升半透明对象的渲染排序效率。
44.实施例二
45.图2是本发明实施例二提供的一种半透明对象渲染排序方法的流程图,本实施例以上述实施例为基础进行具体化,在本实施例中,给出了获取半透明对象图形集合中的半透明对象图形的遮挡率数据,以及对单层半透明对象分布子集进行内部排序的具体的可选
的实施方式。相应的,如图2所示,该方法包括如下操作:
46.s210、根据半透明对象图形集合确定当前待处理半透明对象。
47.其中,当前待处理半透明对象可以是当前需要计算遮挡率数据的半透明对象图形。
48.在本发明实施例中,可以从半透明对象图形集合中确定当前需要计算遮挡率数据的当前待处理半透明对象。
49.在本发明的一个可选实施例中,在获取半透明对象图形集合中的半透明对象图形的遮挡率数据之前,还可以包括:获取半透明对象中半透明对象单元的顶点关联数据;根据半透明对象单元的顶点关联数据确定半透明对象图形集合。
50.其中,半透明对象单元可以是半透明对象的最小组成单元,也即半透明对象单元不能再划分。例如,当半透明对象为3d模型时,半透明对象单元为组成改3d模型的三角形。顶点关联数据可以是与半透明对象单元的顶点关联的数据。顶点关联数据可以包括用于标识顶点序号的顶点标识以及顶点所属的半透明对象单元等数据。
51.在本发明实施例中,可以首先获取需要渲染排序的半透明对象,进而确定构成半透明对象的半透明对象单元,进一步确定各半透明对象单元的顶点关联数据,以根据顶点关联数据确定共用顶点的半透明对象单元,进而根据共用顶点的半透明对象单元确定半透明对象图形集合。
52.示例性的,当半透明对象是头发模型时,可以将顶点关联数据输入至hairstrands.create()函数确定半透明对象图形集合。其中,hairstrands.create()函数为一种划分发束的函数。本发明实施例对确定半透明对象图形集合所采用的函数不做限定。
53.示例性的,可以首先遍历半透明对象中的半透明对象单元,如果半透明对象单元的顶点都未分配半透明对象图形标识,则为顶点都未分配半透明对象图形标识的半透明对象单元的顶点分配新的半透明对象图形标识。如果半透明对象单元的部分顶点分配有半透明对象图形标识,则将半透明对象图形标识配置到该半透明对象单元的未分配半透明对象图形标识的顶点。如果一个半透明对象单元的不同顶点具有不同的半透明对象图形标识,则从该半透明对象单元的不同顶点的不同的半透明对象图形标识中选择一个半透明对象图形标识统一配置到该半透明对象单元的全部顶点,并将与未统一配置顶点之前的该半透明对象单元具有相同半透明对象图形标识的半透明对象单元的顶点,配置成与统一配置顶点之后的该半透明对象单元顶点相同的半透明对象图形标识。其中,半透明对象图形标识可以是表征半透明对象图形的记号,以便于统计属于相同半透明对象图形的半透明对象单元。例如,半透明对象图形a的半透明对象图形标识可以是id1,半透明对象图形b的半透明对象图形标识可以是id2。
54.示例性的,假设半透明对象为头发模型,半透明对象单元为组成头发模型的三角形1、三角形2、三角形3、三角形4以及三角形5。其中,三角形1的顶点为顶点1、顶点2以及顶点3。三角形2的顶点为顶点2、顶点3以及顶点4。三角形3的顶点为顶点5、顶点6以及顶点7。三角形4的顶点为顶点4、顶点5以及顶点6。三角形5的顶点为顶点8、顶点9以及顶点10。假设三角形1的顶点分配的发束标识(半透明头发图形标识)为id1,由于三角形1和三角形2共用顶点2和顶点3,可以将三角形1和三角形2划分为一个发束也即一个半透明头发图形,并为
三角形1和三角形2的顶点分配发束标识id1,三角形3未与三角形2和三角形1共用顶点,进而将三角形3划分为一个发束,并为三角形3的顶点分配发束标识id2。由于三角形4与三角形2共用顶点4,与三角形3共用顶点5和顶点6,可以将三角形4划到发束标识id1的发束中,也可以将三角形4划到发束标识id2的发束中,此时三角形4顶点出现不同的发束标识,可以将发束标识id1统一分配至三角形4的顶点,并为三角形3的顶点分配发束标识id1,此时可以将三角形1、三角形2、三角形3以及三角形4划分为一个发束,该发束内的三角形顶点具有统一的发束id1。由于三角形5的顶点未分配发束标识,且未与三角形1三角形2、三角形3以及三角形4共用顶点,可以为三角形5的顶点分配发束标识id2。
55.s220、计算当前待处理半透明对象的当前法线方向数据。
56.其中,当前法线方向数据可以用于表征当前需要确定法线方向的半透明对象图形的法线方向。
57.具体的,如果当前待处理半透明对象为平面图形,则可以根据平面法线的计算方式计算当前待处理半透明对象的当前法线方向数据。如果当前待处理半透明对象为曲面图形,则可以根据曲面法线的计算方式计算当前待处理半透明对象的当前法线方向数据。
58.示例性的,如果当前待处理半透明对象为曲面图形,则可以先确定组成当前待处理半透明对象的半透明对象单元,进而以半透明对象单元的法线向量与半透明对象单元的面积的乘积作为该半透明对象单元的法线方向数据,进一步将当前待处理半透明对象的全部半透明对象单元的法线方向数据的平均值作为当前待处理半透明对象的当前法线方向数据,还可以对半透明对象单元顶点法线向量进行加权处理,并将加权结果作为该半透明对象单元的法线方向数据,进而将当前待处理半透明对象的全部半透明对象单元的法线方向数据的平均值作为当前待处理半透明对象的当前法线方向数据。
59.s230、根据当前法线方向数据确定当前待处理半透明对象的关联半透明对象。
60.其中,关联半透明对象可以是遮挡当前待处理半透明对象的半透明对象图形。关联半透明对象可以包括一个,或者多个半透明对象图形。
61.在本发明实施例中,可以根据法线方向数据确定在绘制当前待处理半透明对象时,会对当前待处理半透明对象形成遮挡的关联半透明对象。
62.在本发明的一个可选实施例中,根据当前法线方向数据确定当前待处理半透明对象的关联半透明对象,可以包括:根据当前法线方向数据确定当前待处理半透明对象匹配的当前正交相机参数;根据当前待处理半透明对象匹配的当前正交相机参数以及非当前半透明对象图形的图形深度数据确定当前待处理半透明对象的关联半透明对象。
63.其中,当前正交相机参数可以是拍摄当前待处理半透明对象的正交相机需要配置的数据。非当前半透明对象图形可以是正交相机拍摄到的除当前待处理半透明对象之外的半透明对象图形。图形深度数据可以是表征图形的像素深度的数据。像素深度可以指存储每个像素所用的位数,也用来度量图像的分辨率。
64.在本发明实施例中,可以先确定与当前法线方向数据的向量方向相反的方向,进而根据与当前法线方向数据的向量方向相反的方向放置正交相机,进而根据当前待处理半透明对象的包围盒的最大对角线确定与当前待处理半透明对象匹配的当前正交相机参数。在得到当前待处理半透明对象匹配的当前正交相机参数之后,可以根据当前正交相机参数配置正交相机,以使正交相机拍摄的范围至少包括整个当前待处理半透明对象,拍摄的图
像深度至少包括整个半透明对象图形集合,进而从正交相机拍摄的图形中确定非当前半透明对象图形,进而解析非当前半透明对象图形的图形深度数据,从而根据非当前半透明对象图形的图形深度数据确定相较于当前待处理半透明对象离正交相机更近的非当前半透明对象图形,进而将相较于当前待处理半透明对象离正交相机更近的非当前半透明对象图形作为当前待处理半透明对象的关联半透明对象。
65.s240、确定关联半透明对象对当前待处理半透明对象的遮挡面积。
66.其中,遮挡面积可以表征遮挡的范围,可以用于表示当前待处理半透明对象中的被遮挡的面积。
67.在本发明实施例中,可以先确定关联半透明对象的图像区域以及当前待处理半透明对象的图像区域,进而根据关联半透明对象的图像区域以及当前待处理半透明对象的图像区域确定关联半透明对象对当前待处理半透明对象的遮挡面积。
68.在本发明的一个可选实施例中,确定关联半透明对象对当前待处理半透明对象的遮挡面积,可以包括:根据当前正交相机参数获取当前待处理半透明对象的对象深度值和关联半透明对象的对象深度值;根据当前待处理半透明对象的对象深度值确定当前待处理半透明对象的全局图形面积;根据关联半透明对象的对象深度值确定当前待处理半透明对象的遮挡图形面积;根据遮挡图形面积和全局图形面积确定关联半透明对象对当前待处理半透明对象的遮挡面积。
69.其中,对象深度值可以是图形的像素深度的平均数值。全局图形面积可以是当前待处理半透明对象的图形面积。遮挡图形面积可以是关联半透明对象中的对当前待处理半透明对象形成遮挡的面积。
70.在本发明实施例中,可以根据当前正交相机参数确定当前正交相机的拍摄图像,进而根据当前正交相机的拍摄图像计算当前待处理半透明对象的对象深度值和关联半透明对象的对象深度值,进而根据当前待处理半透明对象的对象深度值,确定与当前待处理半透明对象的对象深度值对应的当前待处理半透明对象的全局图形面积,并根据关联半透明对象的对象深度值确定与关联半透明对象的对象深度值对应的当前待处理半透明对象的遮挡图形面积,进而将遮挡图形面积与全局图形面积的重叠区域的面积作为关联半透明对象对当前待处理半透明对象的遮挡面积。
71.s250、根据当前待处理半透明对象的遮挡面积计算半透明对象图形的遮挡率数据。
72.在本发明实施例中,可以根据当前待处理半透明对象的遮挡面积以及当前待处理半透明对象的图形面积计算半透明对象图形的遮挡率数据。
73.可选的,可以根据当前待处理半透明对象的遮挡面积以及当前待处理半透明对象的图形面积计算当前待处理半透明对象的遮挡率数据,进而将当前待处理半透明对象从半透明对象图形集合中剔除,以实现半透明对象集合的更新,并返回执行步骤s210直至半透明对象集合为空集。其中,计算遮挡率数据的算法可以实现在cpu(central processing unit,中央处理器)上,也可以实现在gpu(graphics processing unit,图形处理器)上。
74.示例性的,可以先计算当前待处理半透明对象的遮挡面积a和当前待处理半透明对象的图形面积b的和值c,进而将当前待处理半透明对象的遮挡面积a,与和值c的比值作为半透明对象图形的遮挡率数据。
75.示例性的,可以将当前发束的像素深度值写入深度缓冲区,并将当前发束的图形面积渲染为颜色a,进而关闭深度写入(此时绘制其他发束时不会改写深度缓冲区中的数据,深度缓冲区中只有当前发束的像素深度值),进一步开启深度测试(只有其他发束距离正交相机更近时,才会输出,距离正交相机更远的则丢弃,被丢弃的发束不会遮挡当前发束),进而将遮挡当前发束的发束的遮挡面积渲染为颜色b,在当前发束完成颜色渲染之后,渲染效果可以参见图3。在得到颜色a的渲染面积以及颜色b的渲染面积之后,可以进一步根据颜色a的渲染面积统计颜色a的像素数,并根据颜色b的渲染面积统计颜色b的像素数,从而计算颜色a的像素数和颜色b的像素数的和值,将颜色b的像素数与该和值的比值作为半透明对象图形的遮挡率数据。当比值为0是代表当前发束没有任何遮挡,当比值为1时表示当前发束被完全遮挡。
76.示例性的,gpu可以批量将发束的操作指令全部编码到command buffer(命令缓冲区的编程概念),进而基于渲染管线渲染当前发束的全局图形面积以及遮挡图形面积,进一步基于渲染器计算遮挡率数据,相较于cpu而言gpu的数据处理速度更快。在对当前发束渲染时,可以将当前发束设置为一张边长为256像素的渲染目标,并将全图的深度缓冲区刷至为能表示的最接近的值(如0)。
77.s260、根据半透明对象图形的遮挡率数据确定半透明对象的单层半透明对象分布子集以及单层半透明对象分布子集的子集间排序数据。
78.在本发明的一个可选实施例中,在根据半透明对象图形的遮挡率数据确定半透明对象的单层半透明对象分布子集之后,还可以包括:确定当前待排序单层半透明对象;获取当前待排序单层半透明对象的当前法线方向数据;根据当前待排序单层半透明对象的当前法线方向数据以及单层半透明对象分布子集内的非当前待排序单层半透明对象的法线方向数据确定目标法线方向数据;根据目标法线方向数据更新当前法线方向数据;根据当前法线方向数据对当前待排序单层半透明对象进行子集内部排序。
79.其中,当前待排序单层半透明对象可以是分层半透明对象分布子集中已经确定层内排布顺序的半透明对象图形。第一次确定的当前待排序单层半透明对象包括一个半透明对象图形,后续确定的当前待排序单层半透明对像为多个半透明对象图形的组合。非当前待排序单层半透明对象可以是单层半透明对象分布子集中除当前待排序单层半透明对象外的待处理半透明对象,非当前待排序单层半透明对象与当前待排序单层半透明对象属于相同的单层半透明对象分布子集。目标法线方向数据可以是由当前待排序单层半透明对象的当前法线方向数据以及单层半透明对象分布子集内的非当前待排序单层半透明对象的法线方向数据计算得到的数据,用于更新当前法线方向数据。
80.在本发明实施例中,可以从单层半透明对象分布子集中确定当前待排序单层半透明对象,进一步计算当前待排序单层半透明对象的当前法线方向数据,从而确定与当前待排序单层半透明对象的当前法线方向数据对应的法线方向的反方向最接近的单层半透明对象分布子集内的非当前待排序单层半透明对象,并确定该非当前待排序单层半透明对象的法线方向数据。在得到当前待排序单层半透明对象的当前法线方向数据,以及与当前法线方向数据对应的法线方向的反方向最接近的单层半透明对象分布子集内的非当前待排序单层半透明对象的法线方向数据之后,可以根据当前待排序单层半透明对象的当前法线方向数据以及单层半透明对象分布子集内的非当前待排序单层半透明对象的法线方向数
据计算目标法线方向数据,并将目标法线方向数据作为新的当前法线方向数据,将计算目标法线方向数据的非当前待排序单层半透明对象添加至当前待排序单层半透明对象中,并返回执行确定当前待排序单层半透明对象的操作,直至当前待排序单层半透明对象包括单层半透明对象分布子集的全部半透明对象图形,从而根据当前法线方向数据计算过程中添加至当前待排序单层半透明对象的半透明对象的顺序作为当前待排序单层半透明对象的子集内部排序,进而根据当前待排序单层半透明对象的子集内部排序对当前待排序单层半透明对象进行排序渲染。
81.在本发明的一个可选实施例中,根据目标法线方向数据更新当前法线方向数据,可以包括:获取目标法线方向数据与当前法线方向数据的和值;根据目标法线方向数据与当前法线方向数据的和值更新当前法线方向数据。
82.在本发明实施例中,可以计算目标法线方向数据与当前法线方向数据的和值,进而将目标法线方向数据与当前法线方向数据的和值作为新的当前法线方向数据,进而将与目标法线方向数据对应的非当前待排序单层半透明对象添加至当前待排序单层半透明对象,并返回执行确定当前待排序单层半透明对象的操作,直至当前待排序单层半透明对象包括单层半透明对象分布子集内全部前待处理半透明对象,结束当前法线方向数据的更新。
83.示例性的,假设在确定单层半透明对象分布子集包括半透明对象图形a、半透明对象图形b以及半透明对象图形c。当前待排序单层半透明对象为空的情况下,可以从单层半透明对象分布子集中随机选取一个半透明对象图像,例如,半透明对象图形a,进而将选取的半透明对象图形a添加至当前待排序单层半透明对象,此时当前待排序单层半透明对象的当前法线方向数据为半透明对象图形a的当前法线方向数据,进而将半透明对象图形b以及半透明对象图形c作为非当前待排序单层半透明对象,进一步从非当前待排序单层半透明对象中确定与半透明对象图形a的当前法线方向数据对应向量的反方向最接近的半透明对象图形b,进而根据半透明对象图形b的法线方向数据以及半透明对象图形a的当前法线方向数据的和值作为目标法线方向数据,进而将当前法线方向数据更新为目标法线方向数据,并将半透明对象图形b添加至当前待排序单层半透明对象中。
84.在将半透明对象图形b添加至当前待排序单层半透明对象之后,当前待排序单层半透明对象包括半透明对象图形a以及半透明对象图形b,非当前待排序单层半透明对象为半透明对象图形c,当前待排序单层半透明对象的当前法线方向数据为半透明对象图形b的法线方向数据以及半透明对象图形a的法线方向数据的和值,根据当前待排序单层半透明对象的当前法线方向数据确定与当前待排序单层半透明对象的当前法线方向数据对应向量的反方向最接近的半透明对象图形c,则将半透明对象图形c的法线方向数据、半透明对象图形b的法线方向数据以及半透明对象图形a的法线方向数据的和值作为目标法线方向数据,并将半透明对象图形c添加至当前待排序单层半透明对象,由于当前待排序单层半透明对象包括了单层半透明对象分布子集的全部半透明对象图形,结束确定当前待排序单层半透明对象的操作,根据当前法线方向数据的更新过程将添加至当前待排序单层半透明对象的半透明对象的顺序(半透明对象图形a、半透明对象图形b以及半透明对象图形c)作为子集内部排序。
85.在本发明的一个可选实施例中,根据半透明对象图形的遮挡率数据确定半透明对
象的单层半透明对象分布子集以及单层半透明对象分布子集的子集间排序数据,可以包括:确定当前遮挡率阈值;将遮挡率数据小于或等于当前遮挡率阈值的半透明对象图形划分为单层半透明对象分布子集;根据各单层半透明对象分布子集的确定顺序确定单层半透明对象分布子集的子集间排序数据。
86.其中,当前遮挡率阈值可以是根据渲染效果预设的遮挡率的阈值。示例性的,当前遮挡率阈值可以设置为0.2,确定每个单层半透明对象分布子集的遮挡率阈值可以相同或不同。
87.在本发明实施例中,可以根据所需的渲染效果确定当前遮挡率阈值,并初始化空集作为单层半透明对象分布子集,进而将遮挡率数据小于或等于当前遮挡率阈值的半透明对象图形划分为单层半透明对象分布子集,进而根据各单层半透明对象分布子集的确定顺序确定单层半透明对象分布子集的子集间排序数据。
88.示例性的,假设首先确定了单层半透明对象分布子集1,进而确定了单层半透明对象分布子集2,最后确定了单层半透明对象分布子集3,则子集间排序数据为单层半透明对象分布子集1、单层半透明对象分布子集2、单层半透明对象分布子集3。
89.s270、根据单层半透明对象分布子集的子集间排序数据对半透明对象图形集合中的半透明对象图形进行排序渲染。
90.在本发明的一个可选实施例中,根据单层半透明对象分布子集的子集间排序数据对半透明对象图形集合中的半透明对象图形进行排序渲染,可以包括:对单层半透明对象分布子集的子集间排序数据进行倒序处理,得到子集间倒序排序数据;根据子集间倒序排序数据对半透明对象图形集合中的半透明对象图形进行排序渲染。
91.其中,倒序处理可以用于将数组中的数据倒序重排。例如,原数组为123,对原数组进行倒序处理可以的倒序重排的数组为321。子集间倒序排序数据可以是单层半透明对象分布子集的子集间排序数据的倒序处理的结果。
92.在本发明实施例中,可以对单层半透明对象分布子集的子集间排序数据进行倒序处理,得到子集间排序数据的倒序排列结果即子集间倒序排序数据,进而利用子集间倒序排序数据以及单层半透明对象分布子集的子集间排序数据对半透明对象图形集合中的半透明对象图形进行排序渲染。
93.示例性的,假设子集间排序数据为单层半透明对象分布子集1、单层半透明对象分布子集2、单层半透明对象分布子集3,子集间倒序排序数据为单层半透明对象分布子集3、单层半透明对象分布子集2、单层半透明对象分布子集1,进而先对半透明对象图形集合中的单层半透明对象分布子集3进行渲染,再对半透明对象图形集合中的单层半透明对象分布子集2进行渲染,最后对半透明对象图形集合中的单层半透明对象分布子集1进行渲染。
94.在一个具体的例子中,当绘制虚拟人物的头发模型时,为了让头发有更好的显示效果,会引入半透明,让头发边缘看起来更自然。半透明渲染可以利用画家算法由远及近绘制图形,头发模型中头部后方的三角形先绘制,然后绘制鬓角,发生了由近及远的绘制,然而单个渲染器对自身三角形之间的先后顺序无法处理,使得引入半透明后未排序的网格会遇到明显的错误,一些需要被遮挡的三角形后绘制,造成原本需要被遮挡的三角形未被遮挡如图4所示,圈出部分为原本需要被遮挡的三角形未被遮挡的情况。本方案通过对发束层(相当于单层半透明对象分布子集)进行层内排序(子集内部排序),以及对不同发束层按照
发束层剥离倒序顺序(相当于子集倒序排序数据)排序渲染发束层,可以实现三角形渲染顺序的排序,减少单个渲染器无法对自身三角形排序导致的渲染效果较差的问题,根据本方案对发束层排序后,最终的排序渲染效果参见图5。
95.头发模型的发束排序可以参考如下步骤,步骤1、将头发模型的三角形划分为发束;步骤2、计算待定发束的遮挡率(未完成分层排序的发束,相当于多个待处理半透明对象);步骤3、在待定发束中将遮挡率数据小于或等于当前遮挡率阈值的发束划分为发束层li,其中,li表示第i层发束;步骤4、对一个发束层的发束进行层内排序;步骤5、从待定发束中剔除发束li,令i=i 1,并返回执行步骤2-步骤5,直至待定发束为空,所有发束划分到某层中;步骤6、根据剥离顺序得到的发束层l1、l2、

ln,以剥离倒序顺序ln

l1、l2的顺序渲染发束。其中,l1表示第一层发束,l2表示第二层发束,以此类推,ln表示第n层发束。n越大表示发束层越靠里,越靠里的发束优先绘制,保证从内到外混合正确,最终得到一个离线(发生在编辑阶段,而非游戏运行阶段)排序的网格,该网格在游戏中直接使用便能得到很好的显示效果。
96.具体的,步骤2可以包括:步骤2.1、计算当前发束的当前法线方向数据;步骤2.2、沿着当前法线方向数据对应法线方向的反方向设置正交相机;步骤2.3、根据正交相机拍摄的图像绘制当前发束,并将像素深度值写入深度缓冲区,并将当前发束标记为颜色a;步骤2.4、关闭深度写入,开启深度测试,并将遮挡当前发束的发束的遮挡面积渲染为颜色b;步骤2.5、将颜色b的像素数/(颜色b的像素数 颜色a的像素数)作为当前发束的遮挡率数据。
97.步骤4可以包括:步骤4.1.1、确定层内未排序发束,初始值为层内所有发束;步骤4.1.2、计算层内未排序发束的法线方向数据;步骤4.1.3、从层内未排序发束中确定当前发束(相当于确定当前待排序单层半透明对象,且此时当前待排序单层半透明对象中仅包括一个半透明对象图形),并将当前发束的法线方向数据n作为当前法线方向数据;步骤4.2、从当前层内确定与当前发束反方向最接近的发束,作为下一个待处理的发束,并标记下一个待处理的发束为sn;步骤4.3、用sn的法线方向数据与当前法线方向数据n的和值作为目标法线方向数据nn,nn=sn n,并利用公式n=nn更新当前法线方向数据;步骤4.4、从层内未排序发束中删除sn,将sn添加至已排序列表中;步骤4.5、返回执行步骤4.2至步骤4.4,直至层内未排序发束清空,排序列表里发束的添加顺序为层内发束的层内排序顺序。
98.图6是本发明实施例二提供的一种将头发模型的网格划分为发束的示意图,如图6所示,在一个三维坐标系下,作为网格的三角形被划分成多个发束。为了更形象的展示发束,在一个三维坐标系下,给出了另一个头发模型的发束示意图,参见图7。在图7和图6中每一缕头发作为一个发束。
99.图8是本发明实施例二提供的一种未进行层内排序的头发模型的示意图,如图8所示,如果不进行层内排序,则会出现头发模型一侧观察基本正确,而另一侧基本错误的情况。在右侧由右至左观察时,头发模型渲染基本正确,而在左侧从左至右观察时,头发模型基本错误,也即还是能够看到右侧发型的大部分,只能看到左侧发型的小部分。
100.图9是本发明实施例二提供的一种未进行层内排序的头发模型以及进行层内排序的头发模型的对比图,图10是本发明实施例二提供的另一种未进行层内排序的头发模型以及进行层内排序的头发模型的对比图,如图9所示,当从右侧观察头发模型时,如果发束层完成层内部排序,则可以使渲染的图形在右观察时为部分正确部分错误(在头发模型中正
确部分的颜色相较于错误部分的颜色浅)。如果发束层未进行层内部排序,则渲染的图形在右侧观察为基本正确。如图10所示,当从左侧观察头发模型时,如果发束层完成层内部排序,则可以使渲染的图形在左观察时为部分正确部分错误。如果发束层未进行层内部排序,则渲染的图形在左侧观察为基本错误。在半透明发束的透明度为中度或低度时,如果头发模型正确错误相穿插,则错误部分不容易被发现,因此本方案对发束层进行层内排序可以提升视觉效果。
101.在完成对发束的排序之后,可以通过调试工具查看计算过程中的中间结果,进而检查出错环节,出错环节可能包括计算问题和/或美术资源问题。通过调试工具可以快速定位出错环节,进而准确判断出需要修正的位置。例如,可以在调试工具中编写测试用例,作为测试单元,在修改代码时不破坏发束排序渲染的正确性。测试工具还可以将发束层的层内排序顺序以及发束层的排序顺序以可视化的形式进行展示,以便于排查排序结果以及发束划分的正确性,还可以在计算当前发束的遮挡率数据时输出当前发束以及遮挡当前发束的其他发束的图片,以方便检查正交相机以及遮挡率数据的正确性。
102.本实施例的技术方案,通过根据半透明对象图形集合确定当前待处理半透明对象,从而计算当前待处理半透明对象的当前法线方向数据,进而根据当前法线方向数据确定当前待处理半透明对象的关联半透明对象,进一步确定关联半透明对象对当前待处理半透明对象的遮挡面积,以根据当前待处理半透明对象的遮挡面积计算半透明对象图形的遮挡率数据,从而根据半透明对象图形的遮挡率数据确定半透明对象的单层半透明对象分布子集以及单层半透明对象分布子集的子集间排序数据,进而根据单层半透明对象分布子集的子集间排序数据对半透明对象图形集合中的半透明对象图形进行排序渲染。通过遮挡率数据确定单层半透明对象分布子集可以实现对半透明对象图形集合基于层次的划分,而根据子间集排序数据对半透明对象图形集合中的半透明对象图形进行排序渲染,无需人工干预能够对实现层次划分的半透明对象图形集合按照子间集排序数据自动排序渲染,还能够保证更好的渲染效果,解决了现有技术中未处理半透明部分导致渲染结果效果较差,以及手工排序半透明部分又存在费时费力的问题,能够在保证半透明对象渲染效果的前提下,提升半透明对象的渲染排序效率。
103.需要说明的是,以上各实施例中各技术特征之间的任意排列组合也属于本发明的保护范围。
104.实施例三
105.图11是本发明实施例三提供的一种半透明对象渲染排序装置的示意图,如图11所示,所述装置包括:遮挡率数据获取模块310、数据处理模块320以及排序渲染模块330,其中:
106.遮挡率数据获取模块310,用于获取半透明对象图形集合中的半透明对象图形的遮挡率数据;
107.数据处理模块320,用于根据所述半透明对象图形的遮挡率数据确定半透明对象的单层半透明对象分布子集以及所述单层半透明对象分布子集的子集间排序数据;
108.排序渲染模块330,用于根据所述单层半透明对象分布子集的子集间排序数据对所述半透明对象图形集合中的半透明对象图形进行排序渲染。
109.本实施例的技术方案,通过获取半透明对象图形集合中的半透明对象图形的遮挡
率数据,进而根据半透明对象图形的遮挡率数据确定半透明对象的单层半透明对象分布子集以及单层半透明对象分布子集的子集间排序数据,以根据单层半透明对象分布子集的子间集排序数据对半透明对象图形集合中的半透明对象图形进行排序渲染。通过遮挡率数据确定单层半透明对象分布子集可以实现对半透明对象图形集合基于层次的划分,而根据子间集排序数据对半透明对象图形集合中的半透明对象图形进行排序渲染,无需人工干预能够对实现层次划分的半透明对象图形集合按照子间集排序数据自动排序渲染,还能够保证更好的渲染效果,解决了现有技术中未处理半透明部分导致渲染结果效果较差,以及手工排序半透明部分又存在费时费力的问题,能够在保证半透明对象渲染效果的前提下,提升半透明对象的渲染排序效率。
110.可选的,遮挡率数据获取模块310,具体用于:根据所述半透明对象图形集合确定当前待处理半透明对象;计算所述当前待处理半透明对象的当前法线方向数据;根据所述当前法线方向数据确定所述当前待处理半透明对象的关联半透明对象;确定所述关联半透明对象对所述当前待处理半透明对象的遮挡面积;根据所述当前待处理半透明对象的遮挡面积计算所述半透明对象图形的遮挡率数据。
111.可选的,遮挡率数据获取模块310,具体用于:根据所述当前法线方向数据确定所述当前待处理半透明对象匹配的当前正交相机参数;根据所述当前待处理半透明对象匹配的当前正交相机参数以及非当前半透明对象图形的图形深度数据确定所述当前待处理半透明对象的关联半透明对象。
112.可选的,遮挡率数据获取模块310,具体用于:根据所述当前正交相机参数获取所述当前待处理半透明对象的对象深度值和所述关联半透明对象的对象深度值;根据所述当前待处理半透明对象的对象深度值确定所述当前待处理半透明对象的全局图形面积;根据所述关联半透明对象的对象深度值确定所述当前待处理半透明对象的遮挡图形面积;根据所述遮挡图形面积和所述全局图形面积确定所述关联半透明对象对所述当前待处理半透明对象的遮挡面积。
113.可选的,数据处理模块320,具体用于:确定当前遮挡率阈值;将遮挡率数据小于或等于所述当前遮挡率阈值的半透明对象图形划分为所述单层半透明对象分布子集;根据各所述单层半透明对象分布子集的确定顺序确定所述单层半透明对象分布子集的子集间排序数据。
114.可选的,半透明对象渲染排序装置,还包括子集内部排序模块,用于确定当前待排序单层半透明对象;获取所述当前待排序单层半透明对象的当前法线方向数据;根据所述当前待排序单层半透明对象的当前法线方向数据以及所述单层半透明对象分布子集内的非当前待排序单层半透明对象的法线方向数据确定目标法线方向数据;根据所述目标法线方向数据更新所述当前法线方向数据;根据所述当前法线方向数据对所述当前待排序单层半透明对象进行子集内部排序。
115.可选的,子集内部排序模块,具体用于:获取所述目标法线方向数据与所述当前法线方向数据的和值;根据所述目标法线方向数据与所述当前法线方向数据的和值更新所述当前法线方向数据。
116.可选的,排序渲染模块330,具体用于:对所述单层半透明对象分布子集的子集间排序数据进行倒序处理,得到子集间倒序排序数据;根据所述子集间倒序排序数据对所述
半透明对象图形集合中的半透明对象图形进行排序渲染。
117.可选的,半透明对象渲染排序装置,还包括半透明对象图形集合确定模块,用于获取半透明对象中半透明对象单元的顶点关联数据;根据所述半透明对象单元的顶点关联数据确定所述半透明对象图形集合。
118.上述半透明对象渲染排序装置可执行本发明任意实施例所提供的半透明对象渲染排序装置方法,具备执行方法相应的功能模块和有益效果。未在本实施例中详尽描述的技术细节,可参见本发明任意实施例提供的半透明对象渲染排序装置方法。
119.由于上述所介绍的半透明对象渲染排序装置为可以执行本发明实施例中的半透明对象渲染排序装置方法的装置,故而基于本发明实施例中所介绍的半透明对象渲染排序装置方法,本领域所属技术人员能够了解本实施例的半透明对象渲染排序装置的具体实施方式以及其各种变化形式,所以在此对于该半透明对象渲染排序装置如何实现本发明实施例中的半透明对象渲染排序装置方法不再详细介绍。只要本领域所属技术人员实施本发明实施例中半透明对象渲染排序装置方法所采用的装置,都属于本技术所欲保护的范围。
120.实施例四
121.图12为本发明实施例四提供的一种电子设备的结构示意图。图12示出了适于用来实现本发明实施方式的电子设备412的框图。图12显示的电子设备412仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。电子设备412例如可以是计算机设备或服务器设备等。
122.如图12所示,电子设备412以通用计算设备的形式表现。电子设备412的组件可以包括但不限于:一个或者多个处理器416,存储装置428,连接不同系统组件(包括存储装置428和处理器416)的总线418。
123.总线418表示几类总线结构中的一种或多种,包括存储器总线或者存储器控制器,外围总线,图形加速端口,处理器或者使用多种总线结构中的任意总线结构的局域总线。举例来说,这些体系结构包括但不限于工业标准体系结构(industry standard architecture,isa)总线,微通道体系结构(microchannel architecture,mca)总线,增强型isa总线、视频电子标准协会(video electronics standards association,vesa)局域总线以及外围组件互连(peripheral component interconnect,pci)总线。
124.电子设备412典型地包括多种计算机系统可读介质。这些介质可以是任何能够被电子设备412访问的可用介质,包括易失性和非易失性介质,可移动的和不可移动的介质。
125.存储装置428可以包括易失性存储器形式的计算机系统可读介质,例如随机存取存储器(random access memory,ram)430和/或高速缓存存储器432。电子设备412可以进一步包括其它可移动/不可移动的、易失性/非易失性计算机系统存储介质。仅作为举例,存储系统434可以用于读写不可移动的、非易失性磁介质(图12未显示,通常称为“硬盘驱动器”)。尽管图12中未示出,可以提供用于对可移动非易失性磁盘(例如“软盘”)读写的磁盘驱动器,以及对可移动非易失性光盘(例如只读光盘(compact disc-readonly memory,cd-rom)、数字视盘(digital video disc-read only memory,dvd-rom)或者其它光介质)读写的光盘驱动器。在这些情况下,每个驱动器可以通过一个或者多个数据介质接口与总线418相连。存储装置428可以包括至少一个程序产品,该程序产品具有一组(例如至少一个)程序模块,这些程序模块被配置以执行本发明各实施例的功能。
126.具有一组(至少一个)程序模块426的程序436,可以存储在例如存储装置428中,这样的程序模块426包括但不限于操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。程序模块426通常执行本发明所描述的实施例中的功能和/或方法。
127.电子设备412也可以与一个或多个外部设备414(例如键盘、指向设备、摄像头、显示器424等)通信,还可与一个或者多个使得用户能与该电子设备412交互的设备通信,和/或与使得该电子设备412能与一个或多个其它计算设备进行通信的任何设备(例如网卡,调制解调器等等)通信。这种通信可以通过输入/输出(input/output,i/o)接口422进行。并且,电子设备412还可以通过网络适配器420与一个或者多个网络(例如局域网(local area network,lan),广域网wide area network,wan)和/或公共网络,例如因特网)通信。如图所示,网络适配器420通过总线418与电子设备412的其它模块通信。应当明白,尽管图中未示出,可以结合电子设备412使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、磁盘阵列(redundant arrays of independent disks,raid)系统、磁带驱动器以及数据备份存储系统等。
128.处理器416通过运行存储在存储装置428中的程序,从而执行各种功能应用以及数据处理,例如实现本发明上述实施例所提供的半透明对象渲染排序方法:获取半透明对象图形集合中的半透明对象图形的遮挡率数据;根据半透明对象图形的遮挡率数据确定半透明对象的单层半透明对象分布子集以及单层半透明对象分布子集的子集间排序数据;根据单层半透明对象分布子集的子间集排序数据对半透明对象图形集合中的半透明对象图形进行排序渲染。
129.本实施例的技术方案,通过获取半透明对象图形集合中的半透明对象图形的遮挡率数据,进而根据半透明对象图形的遮挡率数据确定半透明对象的单层半透明对象分布子集以及单层半透明对象分布子集的子集间排序数据,以根据单层半透明对象分布子集的子间集排序数据对半透明对象图形集合中的半透明对象图形进行排序渲染。通过遮挡率数据确定单层半透明对象分布子集可以实现对半透明对象图形集合基于层次的划分,而根据子间集排序数据对半透明对象图形集合中的半透明对象图形进行排序渲染,无需人工干预能够对实现层次划分的半透明对象图形集合按照子间集排序数据自动排序渲染,还能够保证更好的渲染效果,解决了现有技术中未处理半透明部分导致渲染结果效果较差,以及手工排序半透明部分又存在费时费力的问题,能够在保证半透明对象渲染效果的前提下,提升半透明对象的渲染排序效率。
130.实施例五
131.本发明实施例五还提供一种存储计算机程序的计算机存储介质,计算机程序在由计算机处理器执行时用于执行本发明上述实施例任一的半透明对象渲染排序方法:获取半透明对象图形集合中的半透明对象图形的遮挡率数据;根据半透明对象图形的遮挡率数据确定半透明对象的单层半透明对象分布子集以及单层半透明对象分布子集的子集间排序数据;根据单层半透明对象分布子集的子间集排序数据对半透明对象图形集合中的半透明对象图形进行排序渲染。
132.本发明实施例的计算机存储介质,可以采用一个或多个计算机可读的介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读
存储介质例如可以是但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(ram)、只读存储器(read only memory,rom)、可擦式可编程只读存储器((erasable programmable read only memory,eprom)或闪存)、光纤、便携式紧凑磁盘只读存储器(cd-rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
133.计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
134.计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于无线、电线、光缆、射频(radio frequency,rf)等等,或者上述的任意合适的组合。
135.可以以一种或多种程序设计语言或其组合来编写用于执行本发明操作的计算机程序代码,程序设计语言包括面向对象的程序设计语言—诸如java、smalltalk、c ,还包括常规的过程式程序设计语言,诸如“c”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络,包括局域网(lan)或广域网(wan)连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
136.注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。
再多了解一些

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

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

相关文献