一种三维场景渲染方法、装置、设备以及存储介质与流程
未命名
08-14
阅读:89
评论:0
1.本发明涉及图像处理技术领域,特别是涉及一种三维场景渲染方法、装置、设备以及存储介质。
背景技术:
2.在图像渲染领域,三维场景中的各个元素往往需要经过多个渲染通道的渲染。针对三维场景中的每一元素经过一个渲染通道的渲染过程而言,需要经过准备待渲染数据、生成指示对该待渲染数据进行渲染的渲染指令,以及将渲染指令传递到图形api(application programming interface,应用程序编程接口)中这一系列步骤。其中,待渲染数据包括该元素的网格信息以及用于渲染该元素的资源等;图形api为gpu(graphics processing unit,图形处理器)的图形库接口,相应的,渲染指令传递到图形api后,即可指示gpu根据该待渲染数据,基于相应的渲染通道来完成渲染。
3.相关技术中,在进行三维场景渲染时,按照串行方式,将各个渲染指令依次传递至图形api,并且,在传递至图形api后,可以按照同步方式,基于各个渲染通道来进行渲染。由于待渲染的三维场景中往往存在大量的待渲染元素,使得渲染指令的串行传递过程占用大量的cpu(central processing unit,中央处理器)时间,从而导致三维场景的渲染效率较低。
4.因此,如何提高三维场景的渲染效率成为亟需解决的技术问题。
技术实现要素:
5.本发明实施例的目的在于提供一种三维场景渲染方法、装置、设备以及存储介质,以提高三维场景的渲染效率。具体技术方案如下:
6.第一方面,本发明实施例提供了一种三维场景渲染方法,所述方法包括:
7.构建针对待渲染的三维场景的至少一个渲染数据集;其中,每一渲染数据集中包含有所述三维场景中的元素的、对应于同一渲染通道的待渲染数据;
8.确定对所述三维场景进行渲染时所需利用的各个目标渲染通道,并从至少一个渲染数据集中,确定各个目标渲染通道各自对应的渲染数据集;
9.针对每一目标渲染通道,基于该目标渲染通道对应的渲染数据集中的各待渲染数据,生成各待渲染数据分别对应的渲染任务;
10.将所生成的渲染任务进行分组处理,得到多个渲染任务组;
11.为每个渲染任务组分别分配一处理线程,以使每一处理线程依次将所分配到的渲染任务组中的渲染任务对应的渲染指令,传递至图形处理器的图形api,以指示图形处理器响应于所接收到的渲染指令,进行渲染。
12.可选地,所述构建针对待渲染的三维场景的至少一个渲染数据集,包括:
13.获得待渲染的三维场景中的元素的描述信息;
14.基于所获得的描述信息,构建所述三维场景的至少一个渲染数据集。
15.可选地,所述基于所获得的描述信息,构建所述三维场景的至少一个渲染数据集,包括:
16.确定待渲染的三维场景中的元素的类别;
17.针对所确定的每一类别,将待渲染的三维场景中的、属于该类别的元素的描述信息,作为输入内容,输入至该类别的元素所对应的渲染数据生成器,得到包含有该类别的元素的待渲染数据的至少一个渲染数据集。
18.可选地,所述将所生成的渲染任务进行分组处理,得到多个渲染任务组,包括:
19.以各个目标渲染通道作为节点,构建有向无环图,得到当前待分析的有向无环图;其中,所述有向无环图用于表征各个目标渲染通道之间的渲染顺序关系;
20.确定当前待分析的有向无环图中、目标节点所表征的目标渲染通道;其中,所述目标节点为入度为零的节点;
21.按照负载均衡的方式,将所确定出的目标渲染通道对应的渲染任务,划分至指定数量个预设组别内;
22.删除当前待分析的有向无环图中的目标节点,得到新的有向无环图,作为当前待分析的有向无环图,返回所述确定当前待分析的有向无环图中、目标节点所表征的目标渲染通道的步骤,直至遍历完当前待分析的有向无环图中的所有节点,得到多个渲染任务组。
23.可选地,所述每一处理线程依次将所分配到的渲染任务组中的渲染任务对应的渲染指令,传递至图形处理器的图形api,包括:
24.每一处理线程从所分配到的渲染任务组中,依次选取待处理的渲染任务;
25.若所选取到的待处理的渲染任务存在上游渲染任务,则在所述上游渲染任务对应的渲染指令,已传递至图形处理器的图形api后,将所选取的待处理的渲染任务对应的渲染指令,传递至图形处理器的图形api;
26.若所选取到的待处理的渲染任务未存在上游渲染任务,则将所选取的待处理的渲染任务对应的渲染指令,传递至图形处理器的图形api。
27.可选地,任一渲染任务的上游渲染任务的确定方式包括:
28.针对与该渲染任务对应同一元素的其他渲染任务,若该渲染任务所对应的目标渲染通道,依赖于该其他渲染任务对应的目标渲染通道进行渲染,则将该其他渲染任务确定为该渲染任务的上游渲染任务。
29.第二方面,本发明实施例提供了一种三维场景渲染装置,所述装置包括:
30.构建模块,用于构建针对待渲染的三维场景的至少一个渲染数据集;其中,每一渲染数据集中包含有所述三维场景中的元素的、对应于同一渲染通道的待渲染数据;
31.确定模块,用于确定对所述三维场景进行渲染时所需利用的各个目标渲染通道,并从至少一个渲染数据集中,确定各个目标渲染通道各自对应的渲染数据集;
32.生成模块,用于针对每一目标渲染通道,基于该目标渲染通道对应的渲染数据集中的各待渲染数据,生成各待渲染数据分别对应的渲染任务;
33.分组模块,用于将所生成的渲染任务进行分组处理,得到多个渲染任务组;
34.渲染模块,用于为每个渲染任务组分别分配一处理线程,以使每一处理线程依次将所分配到的渲染任务组中的渲染任务对应的渲染指令,传递至图形处理器的图形api,以指示图形处理器响应于所接收到的渲染指令,进行渲染。
35.可选地,所述构建模块,包括:
36.获取子模块,用于获得待渲染的三维场景中的元素的描述信息;
37.第一构建子模块,用于基于所获得的描述信息,构建所述三维场景的至少一个渲染数据集。
38.可选地,所述构建子模块,具体用于:
39.确定待渲染的三维场景中的元素的类别;
40.针对所确定的每一类别,将待渲染的三维场景中的、属于该类别的元素的描述信息,作为输入内容,输入至该类别的元素所对应的渲染数据生成器,得到包含有该类别的元素的待渲染数据的至少一个渲染数据集。
41.可选地,所述分组模块,包括:
42.第二构建子模块,用于以各个目标渲染通道作为节点,构建有向无环图,得到当前待分析的有向无环图;其中,所述有向无环图用于表征各个目标渲染通道之间的渲染顺序关系;
43.确定子模块,用于确定当前待分析的有向无环图中、目标节点所表征的目标渲染通道;其中,所述目标节点为入度为零的节点;
44.划分子模块,用于按照负载均衡的方式,将所确定出的目标渲染通道对应的渲染任务,划分至指定数量个预设组别内;
45.遍历子模块,用于删除当前待分析的有向无环图中的目标节点,得到新的有向无环图,作为当前待分析的有向无环图,返回所述确定当前待分析的有向无环图中、目标节点所表征的目标渲染通道的步骤,直至遍历完当前待分析的有向无环图中的所有节点,得到多个渲染任务组。
46.可选地,所述每一处理线程依次将所分配到的渲染任务组中的渲染任务对应的渲染指令,传递至图形处理器的图形api,包括:
47.每一处理线程从所分配到的渲染任务组中,依次选取待处理的渲染任务;
48.若所选取到的待处理的渲染任务存在上游渲染任务,则在所述上游渲染任务对应的渲染指令,已传递至图形处理器的图形api后,将所选取的待处理的渲染任务对应的渲染指令,传递至图形处理器的图形api;
49.若所选取到的待处理的渲染任务未存在上游渲染任务,则将所选取的待处理的渲染任务对应的渲染指令,传递至图形处理器的图形api。
50.可选地,任一渲染任务的上游渲染任务的确定方式包括:
51.针对与该渲染任务对应同一元素的其他渲染任务,若该渲染任务所对应的目标渲染通道,依赖于该其他渲染任务对应的目标渲染通道进行渲染,则将该其他渲染任务确定为该渲染任务的上游渲染任务。
52.第三方面,本发明实施例例提供了一种电子设备,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;
53.存储器,用于存放计算机程序;
54.处理器,用于执行存储器上所存放的程序时,实现上述任一所述的三维场景渲染方法的步骤。
55.第四方面,本发明实施例提供了一种计算机可读存储介质,所述计算机可读存储
介质内存储有计算机程序,所述计算机程序被处理器执行时实现上述任一所述的三维场景渲染方法的步骤。
56.本发明实施例有益效果:
57.本发明实施例提供的方案,可以构建针对待渲染的三维场景的至少一个渲染数据集,然后确定该三维场景进行渲染时所需利用的各个目标渲染通道各自对应的渲染数据集,并生成各个目标渲染通道对应的渲染数据集中的各待渲染数据对应的渲染任务。然后,将所生成的渲染任务进行分组处理并为每个渲染任务组分别分配一处理线程,以使每一处理线程依次将所分配到的渲染任务组中的渲染任务对应的渲染指令,传递至图形处理器的图形api。从而在将各个渲染任务的渲染指令传递至图形api中时,可以并行地将各个分组中的渲染任务的渲染指令传递至图形api中。相较于现有技术中按照串行方式,将各个渲染指令依次传递至图形api而言,本方案提高了渲染指令传递至图形api的效率,从而提高了三维场景的渲染效率。并且,并行传递渲染指令的方式降低了指令传递时所占用的cpu时间,从而在一定程度上减轻了串行传递渲染指令时,cpu的大量资源浪费在阻塞等待上的问题,进而提高了cpu的资源利用率。
58.当然,实施本发明的任一产品或方法并不一定需要同时达到以上所述的所有优点。
附图说明
59.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的实施例。
60.图1为本发明实施例提供的一种三维场景渲染方法的流程图;
61.图2为实现本发明实施例提供的三维场景渲染方法的步骤s101的流程图;
62.图3为实现本发明实施例提供的三维场景渲染方法的步骤s103的流程图;
63.图4为本发明实施例提供一种生成器生成“渲染数据集结构”的示意图;
64.图5为本发明实施例提供一种有向无环图的示意图;
65.图6为本发明实施例提供的一种指令录入流程的示意图;
66.图7为本发明实施例提供的一种三维场景渲染装置的结构示意图;
67.图8为实现本发明实施例所提供的三维场景渲染方法的电子设备的框图。
具体实施方式
68.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员基于本技术所获得的所有其他实施例,都属于本发明保护的范围。
69.下面,首先对本发明实施例所提供的一种三维场景渲染方法进行介绍。
70.需要说明的,本发明实施例所提供的三维场景渲染方法可以应用于电子设备,该电子设备可以为个人电脑、服务器、或者其他具有数据处理能力的设备。另外,可以理解的
是,本发明实施例提供的三维场景渲染方法可以通过软件、硬件或软硬件结合的方式实现。
71.其中,本发明实施例所提供的一种三维场景渲染方法,可以包括如下步骤:
72.构建针对待渲染的三维场景的至少一个渲染数据集;其中,每一渲染数据集中包含有所述三维场景中的元素的、对应于同一渲染通道的待渲染数据;
73.确定对所述三维场景进行渲染时所需利用的各个目标渲染通道,并从至少一个渲染数据集中,确定各个目标渲染通道各自对应的渲染数据集;
74.针对每一目标渲染通道,基于该目标渲染通道对应的渲染数据集中的各待渲染数据,生成各待渲染数据分别对应的渲染任务;
75.将所生成的渲染任务进行分组处理,得到多个渲染任务组;
76.为每个渲染任务组分别分配一处理线程,以使每一处理线程依次将所分配到的渲染任务组中的渲染任务对应的渲染指令,传递至图形处理器的图形api,以指示图形处理器响应于所接收到的渲染指令,进行渲染。
77.本发明实施例所提供的方案,可以构建针对待渲染的三维场景的至少一个渲染数据集,然后确定该三维场景进行渲染时所需利用的各个目标渲染通道各自对应的渲染数据集,并生成各个目标渲染通道对应的渲染数据集中的各待渲染数据对应的渲染任务。然后,将所生成的渲染任务进行分组处理并为每个渲染任务组分别分配一处理线程,以使每一处理线程依次将所分配到的渲染任务组中的渲染任务对应的渲染指令,传递至图形处理器的图形api。从而在将各个渲染任务的渲染指令传递至图形api中时,可以并行地将各个分组中的渲染任务的渲染指令传递至图形api中。相较于现有技术中按照串行方式,将各个渲染指令依次传递至图形api而言,本方案提高了渲染指令传递至图形api的效率,从而提高了三维场景的渲染效率。并且,并行传递渲染指令的方式降低了指令传递时所占用的cpu时间,从而在一定程度上减轻了串行传递渲染指令时,cpu的大量资源浪费在阻塞等待上的问题,进而提高了cpu的资源利用率。
78.下面结合附图,对本发明实施例所提供的三维场景渲染方法进行介绍。
79.如图1所示,本发明实施例所提供的三维场景渲染方法,可以包括步骤s101-s104:
80.s101,构建针对待渲染的三维场景的至少一个渲染数据集;其中,每一渲染数据集中包含有该三维场景中的元素的、对应于同一渲染通道的待渲染数据;
81.本实施例中,待渲染的三维场景可以是游戏类应用程序中的待渲染的3d(三维)游戏场景,此时,该待渲染的三维场景中的元素可以包括游戏人物、水、树木等各个3d对象。针对待渲染的三维场景中的每一元素,可以为该元素准备对应于各个渲染通道的待渲染数据,并将各个元素对应于同一渲染通道的待渲染数据作为一渲染数据集,从而构建得到针对该三维场景的至少一个渲染数据集。其中,每一元素对应于一渲染通道的待渲染数据,为针对该元素进行该渲染通道的渲染时,所需利用的数据。示例性的,该待渲染数据中可以包括元素的材质、纹理等数据。
82.需要说明的是,在实际应用中,可以获得待渲染的三维场景中的元素的描述信息,并基于该描述信息,构建针对待渲染的三维场景的至少一个渲染数据集;或者,由相关工作人员根据经验手动构建针对待渲染的三维场景的至少一个渲染数据集,这都是合理的。其中,基于该三维场景中的元素的描述信息,构建针对该三维场景的至少一个渲染数据集的方式,将在下述实施例中进行介绍,这里不再赘述。
83.s102,确定对该三维场景进行渲染时所需利用的各个目标渲染通道,并从至少一个渲染数据集中,确定各个目标渲染通道各自对应的渲染数据集;
84.本实施例中,在构建出至少一个渲染数据集后,可以为各个目标渲染通道筛选该目标渲染通道对应的渲染数据集,从而确定各个目标渲染通道各自对应的渲染数据集。示例性的,在实际应用中,在构建至少一个渲染数据集时可以对各个渲染数据集进行标记,且针对各个目标渲染通道可以预先设置所需的渲染数据集的标记。从而针对每一目标渲染通道,可以从至少一个渲染数据集中,确定与该目标渲染通道所设置的标记相同的渲染数据集,作为该目标渲染通道对应的渲染数据集,从而得到各个目标渲染通道各自对应的渲染数据集。其中,各个目标渲染通道为该三维场景进行渲染时,所需利用的渲染通道。在实际应用中,该各个目标渲染通道可以由相关工作人员根据该三维场景的渲染需求所预先设置。示例性的,若针对该三维场景所设置的渲染通道包括阴影渲染通道、延迟渲染通道和抗锯齿渲染通道,则该阴影渲染通道、延迟渲染通道和抗锯齿渲染通道为该三维场景的各个目标渲染通道。
85.可以理解的是,在实际应用中,该三维场景中的各个元素可以经过多次渲染,即通过多个目标渲染通道进行渲染,得到最终的渲染结果。在本实施例中,可以首先构建针对待渲染的三维场景的至少一个渲染数据集,然后,从至少一个渲染数据集中确定各个目标渲染通道各自对应的渲染数据集。每一目标渲染通道对应的渲染数据集中包括该三维场景中的元素的、对应于该目标渲染通道的待渲染数据。示例性的,若待渲染的三维场景中包括元素a和元素b,目标渲染通道包括通道1和通道2;且针对元素a准备对应于各个目标渲染通道的渲染数据时,得到对应于通道1的待渲染数据a1以及对应于通道2的待渲染数据a2;针对元素b准备对应于各个目标渲染通道的渲染数据时,得到对应于通道1的待渲染数据b1以及对应于通道2的待渲染数据b2;则可以将通道1对应的待渲染数据a1和待渲染数据b1构建为通道1对应的渲染数据集,将通道2对应的待渲染数据a2和待渲染数据b2构建为通道2对应的渲染数据集。
86.s103,针对每一目标渲染通道,基于该目标渲染通道对应的渲染数据集中的各待渲染数据,生成各待渲染数据分别对应的渲染任务;
87.本实施例中,在确定各个目标渲染通道对应的渲染数据集后,可以根据每一目标渲染通道对应的渲染数据集中所包括的、属于各个元素的待渲染数据,生成对应于各待渲染数据的各个渲染任务。示例性的,若一目标渲染通道对应的渲染数据集中包括元素a的待渲染数据和元素b的待渲染数据,则针对该目标渲染通道,可以生成对元素a的待渲染数据进行渲染的渲染任务a,以及对元素b的待渲染数据进行渲染的渲染任务b。
88.s104,将所生成的渲染任务进行分组处理,得到多个渲染任务组;
89.本实施例中,在生成各个目标渲染通道对应的渲染任务后,可以对所生成的渲染任务进行分组,以便于后续对该多个渲染任务组进行并行处理。在实际应用中,可以根据负载均衡的原则对该所生成的渲染任务进行分组处理,使得各个渲染任务组中所分配的渲染任务具有接近的任务量。从而使得后续利用多个处理线程处理该多个渲染任务组时,每一线程处理完所分配的渲染任务的时间相近,使得总耗时最小。
90.另外,由于不同的目标渲染通道之间可能存在依赖关系,即某一渲染通道的输入依赖于其他渲染通道的输出,因此,在负载均衡的原则下,还可以根据各个目标渲染通道之
间的依赖关系,尽量将不具有依赖关系的目标渲染通道对应的渲染任务分为不同组。示例性的,若渲染通道c依赖于渲染通道a和渲染通道b,而渲染通道a和渲染通道b之间不具有依赖关系,则该渲染通道a和渲染通道b对应的渲染任务可以分为不同组,而渲染通道c对应的渲染任务既可以与渲染通道a对应的渲染任务分为一组,也可以与渲染通道b对应的渲染任务分为一组。
91.可以理解的是,通过尽量将不具有依赖关系的目标渲染通道对应的渲染任务分为不同组,后续在将各个渲染任务的渲染指令传递至图形api中时,可以并行地将各个分组中的渲染任务的渲染指令传递至图形api中。
92.s105,为每个渲染任务组分别分配一处理线程,以使每一处理线程依次将所分配到的渲染任务组中的渲染任务对应的渲染指令,传递至图形处理器的图形api,以指示图形处理器响应于所接收到的渲染指令,进行渲染。
93.本领域技术人员可以知晓,线程是指cpu中可以独立运行的最小单位,一个线程是cpu上的一个单独的执行序列,每个线程都可以同时执行一个独立的指令序列。因此,通过为每个渲染任务组分别分配一处理线程,使得后续可以利用多个处理线程并行对该多个渲染任务组中的渲染任务对应的渲染指令进行处理。从而,降低了指令传递时所占用的cpu时间,在一定程度上减轻了串行传递渲染指令时,cpu的大量资源浪费在阻塞等待上的问题,进而提高了cpu的资源利用率。相较于现有技术中按照串行方式,将各个渲染指令依次传递至图形api而言,本方案通过多线程的方式提高了将渲染指令传递至图形api的效率,从而提高了三维场景的渲染效率。
94.可以理解的是,由于图形api为图形处理器gpu的图形库接口,因此,在将各个渲染任务的渲染指令传递到图形api中后,可以使图形处理器响应于渲染指令,进行渲染。其中,渲染指令传递至图形api的过程也可以称之为渲染指令的录入过程。
95.本发明实施例所提供的方案,可以构建针对待渲染的三维场景的至少一个渲染数据集,然后确定该三维场景进行渲染时所需利用的各个目标渲染通道各自对应的渲染数据集,并生成各个目标渲染通道对应的渲染数据集中的各待渲染数据对应的渲染任务。然后,将所生成的渲染任务进行分组处理并为每个渲染任务组分别分配一处理线程,以使每一处理线程依次将所分配到的渲染任务组中的渲染任务对应的渲染指令,传递至图形处理器的图形api。从而在将各个渲染任务的渲染指令传递至图形api中时,可以并行地将各个分组中的渲染任务的渲染指令传递至图形api中。相较于现有技术中按照串行方式,将各个渲染指令依次传递至图形api而言,本方案提高了渲染指令传递至图形api的效率,从而提高了三维场景的渲染效率。并且,并行传递渲染指令的方式降低了指令传递时所占用的cpu时间,从而在一定程度上减轻了串行传递渲染指令时,cpu的大量资源浪费在阻塞等待上的问题,进而提高了cpu的资源利用率。
96.可选地,在本发明的另一实施例中,如图2所示,上述步骤s101中构建针对待渲染的三维场景的至少一个渲染数据集,可以包括步骤s1011-s1012:
97.s1011,获得待渲染的三维场景中的元素的描述信息;
98.本实施例中,待渲染的三维场景中的元素的描述信息可以包括元素的位置信息、网格信息、材质、尺寸,等等。其中,位置信息用于表征该元素在该三维场景中的位置,网格信息可以为元素的三维mesh模型。需要说明的是,该三维场景中的元素的描述信息可以是
人工设置的描述信息,也可以是根据该三维场景对应的应用程序的程序逻辑所确定的描述信息。该描述信息可以预先存储在指定存储位置,以在准备待渲染数据时从该指定存储位置中获得该三维场景中的元素的描述信息;或者,该描述信息也可以从该三维场景对应的应用程序中实时获取,这都是合理的。示例性的,在实际应用中,若待渲染的三维场景为游戏类应用程序中的待渲染的3d游戏场景,则可以从该游戏类应用程序的服务端或客户端中获得该三维场景中的元素的描述信息。该所获取的元素的描述信息可以跟该游戏的游戏逻辑相关,即和该游戏类应用程序的客户端的玩家视角和操作有关,从而可以从该游戏的逻辑层获取待渲染的三维场景中的元素的描述信息。
99.s1012,基于所获得的描述信息,构建该三维场景的至少一个渲染数据集。
100.本实施例中,根据所获得的描述信息,可以构建针对不同渲染通道的渲染数据集,得到该三维场景的至少一个渲染数据集。可以理解的是,由于该三维场景中的每一元素可以经过多个渲染通道的渲染,因此,可以为每一元素准备对应于多个渲染通道的待渲染数据,将各个元素对应于同一渲染通道的待渲染数据构建为一渲染数据集,从而构建该三维场景的至少一个渲染数据集。
101.示例性的,在实际应用中,可以利用渲染数据生成器生成该三维场景的至少一个渲染数据集,其中,该渲染数据生成器的输入为各个元素的描述信息,输出为各个元素对应于不同渲染通道的待渲染数据,从而得到对应于各个渲染通道的渲染数据集。需要说明的是,每一元素对应一渲染通道的待渲染数据,为该渲染通道对该元素进行渲染所需利用的所有数据,包括该元素的描述信息以及该渲染通道对该元素进行渲染所需的额外的渲染资源。示例性的,该额外的渲染资源可以包括纹理资源、深度资源、贴图资源、蒙版资源,等等。渲染数据生成器在输入各个元素的描述信息后,会主动去获取对该元素进行渲染所需的额外的渲染资源,通过将各个元素的描述信息以及各个渲染资源进行打包,生成各个数据结构,每一数据结构中存储有对应一渲染通道的待渲染数据,该各个数据结构即为各个渲染数据集。
102.可选地,在一种实现方式中,基于所获得的描述信息,构建该三维场景的至少一个渲染数据集,可以包括步骤a1-a2:
103.a1,确定待渲染的三维场景中的元素的类别;
104.a2,针对所确定的每一类别,将待渲染的三维场景中的、属于该类别的元素的描述信息,作为输入内容,输入至该类别的元素所对应的渲染数据生成器,得到包含有该类别的元素的待渲染数据的至少一个渲染数据集。
105.本实现方式中,通过确定待渲染的三维场景中的元素的类别,然后调用对应于各个类别的元素的渲染数据生成器,生成包含有该类别的元素的待渲染数据的至少一个渲染数据集。示例性的,每一类别的元素可以对应一元素属性,该元素属性可以包括静态物、动态物、水、毛发,等等。且元素的描述信息中可以包括元素的属性信息,使得可以根据元素的描述信息中的属性信息,确定元素的类别,从而调用与该类别相对应的渲染数据生成器。可以理解的是,由于对于不同属性的元素而言,同一渲染通道渲染该元素时所需利用的渲染资源具有差异,例如,阴影渲染通道针对各个元素进行渲染时,属于动态物的阴影渲染相较于静态物而言,还需要考虑到动态物的运动信息;因此,可以针对每一类别的元素,调用与该类别的元素相对应的渲染数据生成器,生成包含有该类别的元素的待渲染数据的至少一
个渲染数据集。
106.另外,可以理解的是,针对待渲染的三维场景中的各类别的元素,通过调用与各个类别相对应的渲染数据生成器去生成渲染数据集,可以并行地完成该渲染数据集的生成过程,提高了渲染数据集的生成效率,从而进一步提高了三维场景的渲染效率。需要说明的是,构建渲染数据集的方式,还可以是相关工作人员根据各个渲染通道所需的输入数据的数据结构,构建各个渲染通道对应的渲染数据集,得到该待三维场景的至少一个渲染数据集。本发明实施例对该渲染数据集的构建方式并不限定。
107.另外,任一类别的元素对应的渲染数据生成器在基于该类别的元素的描述信息,生成包含有该类别的元素的待渲染数据的至少一个渲染数据集时,在该渲染数据生成器的内部,还可以根据描述信息的数据量的大小,分成多个任务进行并行处理,从而提高了渲染数据集的构建效率,进一步提高了三维场景的渲染效率。
108.可见,通过本方案,可以基于待渲染的三维场景中的元素的描述信息,构建该三维场景的至少一个渲染数据集,从而完成针对待渲染的三维场景的至少一个渲染数据集的构建。
109.可选地,在本发明的另一实施例中,如图3所示,上述步骤s103将所生成的渲染任务进行分组处理,得到多个渲染任务组,可以包括步骤s1031-s1034:
110.s1031,以各个目标渲染通道作为节点,构建有向无环图,得到当前待分析的有向无环图;其中,该有向无环图用于表征各个目标渲染通道之间的渲染顺序关系;
111.本领域技术人员可以知晓,有向无环图指的是一个无回路的有向图,由于计算过程很多时会有先后顺序,受制于某些任务必须比另一些任务较早执行的限制,必须对任务进行排队,形成一个队列的任务集合,这个队列的任务集合就是有向无环图。由于目标渲染通道之间可能存在依赖关系,即某一渲染通道的输入依赖于其他渲染通道的输出,因此,可以根据各个目标渲染通道之间的渲染顺序关系,以各个目标渲染通道作为节点,构建有向无环图,作为当前待分析的有向无环图。
112.s1032,确定当前待分析的有向无环图中、目标节点所表征的目标渲染通道;其中,该目标节点为入度为零的节点;
113.s1033,按照负载均衡的方式,将所确定出的目标渲染通道对应的渲染任务,划分至指定数量个预设组别内;
114.s1034,删除当前待分析的有向无环图中的目标节点,得到新的有向无环图,作为当前待分析的有向无环图,返回该确定当前待分析的有向无环图中、目标节点所表征的目标渲染通道的步骤,直至遍历完当前待分析的有向无环图中的所有节点,得到多个渲染任务组。
115.本实施例中,该预设组别的指定数量可以由相关工作人员预先设置,且该预设组别的初始内容为空。
116.可以理解的是,在有向无环图中,入度为零的节点为不被其他边指向的节点,即该入度为零的节点不依赖于该图中的任一节点。例如在图5所示的有向无环图中,阴影渲染通道和gbuffer渲染通道对应的节点为入度为零的节点。通过确定当前待分析的有向无环图中、目标节点所表征的目标渲染通道,并按照负载均衡的方式,将所确定出的目标渲染通道对应的渲染任务,划分至指定数量个预设组别内。然后删除该目标节点,得到新的有向无环
图作为当前待分析的有向无环图,并返回确定该当前待分析的有向无环图中的目标节点所表征的目标渲染通道的步骤,可以按照该有向无环图所表征的渲染顺序关系,将各个目标渲染通道对应的渲染任务依次划分至该指定数量个预设组别中,得到多个渲染任务组。由于有向无环图是一个无回路的有向图,通过根据该有向无环图所表征的渲染顺序关系对渲染任务进行分组,使得后续针对每个渲染任务组中所分配到的渲染任务的渲染指令依次传递时,可以保证各个渲染任务组中的指令传递顺序符合该各个目标渲染通道之间的渲染顺序关系,从而使得后续图形处理器按照所接收的渲染指令的顺序进行渲染时,可以得到正确的渲染结果。
117.可见,通过本方案,构建有向无环图,并根据有向无环图所表征的各个目标渲染通道之间的渲染顺序关系,对各个目标渲染通道对应的渲染任务进行分组,得到多个渲染任务组。使得针对各个渲染任务组中的渲染任务进行指令传递时,可以保证各个渲染任务组中的指令传递顺序符合该各个目标渲染通道之间的渲染顺序关系,从而使得后续图形处理器按照所接收的渲染指令的顺序进行渲染时,可以得到正确的渲染结果。
118.可选地,在本发明的另一实施例中,每一处理线程依次将所分配到的渲染任务组中的渲染任务对应的渲染指令,传递至图形处理器的图形api,可以包括步骤b1-b3:
119.b1,每一处理线程从所分配到的渲染任务组中,依次选取待处理的渲染任务;
120.b2,若所选取到的待处理的渲染任务存在上游渲染任务,则在该上游渲染任务对应的渲染指令,已传递至图形处理器的图形api后,将所选取的待处理的渲染任务对应的渲染指令,传递至图形处理器的图形api;
121.b3,若所选取到的待处理的渲染任务未存在上游渲染任务,则将所选取的待处理的渲染任务对应的渲染指令,传递至图形处理器的图形api。
122.在本实施例中,每一处理线程从所分配到的渲染任务组中,依次选取待处理的渲染任务,进行该待处理的渲染任务的渲染指令的传递。在传递该待处理的渲染任务的渲染指令之前,可以先检测该待处理的渲染任务是否存在上游渲染任务。若存在,则在该上游渲染任务的渲染指令传递至图形api后,进行该待处理的渲染任务的渲染指令的传递。,若不存在,将该待处理的渲染任务的渲染指令传递至图形api中。
123.可以理解的是,由于目标渲染通道之间具有依赖关系,属于依赖关系中的被依赖方的目标渲染通道对应的渲染任务完成后,属于依赖方的目标渲染通道对应的渲染任务才可以进行渲染;因此,属于被依赖方的渲染任务的渲染指令的传递顺序,应该排在属于依赖方的渲染任务的渲染指令的传递顺序之前。因此,针对每一渲染任务组,当从该组中依次选取的待处理渲染任务的渲染指令为当前待传递指令时,可以在检测到该待处理的渲染任务的上游渲染任务的渲染指令传递完成时,将该待处理的渲染任务的渲染指令传递至图形api中。通过这样的方式实现了插入组内和组间的同步点,可以保证渲染指令的传递顺序的正确性。
124.可选地,在一种实现方式中,任一渲染任务的上游渲染任务的确定方式可以包括:
125.针对与该渲染任务对应同一元素的其他渲染任务,若该渲染任务所对应的目标渲染通道,依赖于该其他渲染任务对应的目标渲染通道进行渲染,则将该其他渲染任务确定为该渲染任务的上游渲染任务。
126.本实施例中,任一渲染任务为针对一目标渲染通道对应的渲染数据集中的一元素
的待渲染数据进行渲染的任务。可以理解的是,由于待渲染的三维场景中的每一元素需要经过多个目标渲染通道进行渲染,且该多个目标渲染通道之间具有依赖关系,因此,任一渲染任务的上游渲染任务为与该渲染任务对应同一元素的其他渲染任务中、属于该渲染任务所对应目标渲染通道所依赖的目标渲染通道对应的其他渲染任务。
127.示例性的,若针对该三维场景中元素a需要经过通道1和通道2的渲染,且通道2依赖于通道1,则通道2针对元素a的待渲染数据进行渲染的渲染任务2,依赖于通道1针对元素a的待渲染数据进行渲染的渲染任务1,即该渲染任务1为该渲染任务2的上游渲染任务。
128.可见,通过本方案,可以保证渲染指令的传递顺序的正确性,从而保证渲染结果的正确性。
129.为了更好的理解本方案,下面对本发明实施例的一个具体示例进行介绍。
130.现有技术中,三维场景的渲染过程中,渲染指令串行传递到图形api中占用了大量的cpu时间,在游戏逻辑和渲染流程没有分开的情况下更为明显,导致三维场景的渲染效率低下,且cpu的大量资源浪费在阻塞等待上,导致cpu的资源利用率低。
131.为了解决上述问题,本示例对原有的渲染指令传递流程进行重构,并引入了“渲染数据集结构”和“渲染任务关系图”这两个概念。
132.其中,“渲染数据集结构”(对应于上文中的渲染数据集)用于存储一渲染通道渲染时所需输入的待渲染数据。
133.如图4所示,可以采用多种生成器(对应于上文中的渲染数据生成器)生成“渲染数据集结构”。该生成器的种类可以包括静态物生成器、动态物生成器,等等。若待渲染的三维场景为游戏类应用程序的待渲染的3d游戏场景,则游戏类应用程序的逻辑层可以往该各种生成器中传入逻辑数据(对应于上文中的描述信息),该各种生成器可以并行地对逻辑数据进行处理,生成由各个静态物对应于各个渲染通道的待渲染数据构成的静态物“渲染数据集结构”集合、由各个动态物对应于各个渲染通道的待渲染数据构成的动态物“渲染数据集结构”集合,等等。其中,静态物“渲染数据集结构”集合中包括多个“渲染数据集结构”,每一“渲染数据集结构”中存储属于静态物元素的、对应于一渲染通道的待渲染数据;动态物“渲染数据集结构”集合中包括多个“渲染数据集结构”,每一“渲染数据集结构”中存储属于动态物元素的、对应于一渲染通道的待渲染数据。并且,各个生成器的内部可以根据所输入的逻辑数据的数据量,分成多个子任务并行处理,从而进一步提高“渲染数据集结构”的生成效率。
134.在生成器生成“渲染数据集结构”集合后,可以根据各个目标渲染通道的需求筛选所需的“渲染数据集结构”,形成各个目标渲染通道对应的“渲染数据集结构”集合,并生成各个目标渲染通道对应的各个渲染任务。这一步由于有多个目标渲染通道,因此是支持并行处理的。在生成各个目标渲染通道对应的各个渲染任务后,根据各个目标渲染通道之间的依赖关系,确定有向无环图,根据生成的有向无环图指定各个渲染任务的任务执行顺序(对应于上文中的渲染顺序关系),即可得到“渲染任务关系图”。如图5所示,为根据各个目标渲染通道之间的依赖关系,所确定的有向无环图。图中的箭头方向为依赖方向,即延迟渲染通道依赖阴影渲染通道和gbuffer渲染通道,抗锯齿渲染通道依赖延迟渲染通道。其中,“渲染任务关系图”用来为渲染通道或者渲染任务生成依赖关系图,用来管理共享资源,包括资源创建,销毁以及重用。
135.其中,有向无环图根据渲染通道的依赖关系所生成,渲染通道之间的依赖主要涉及的是资源的依赖。生成有向无环图之后,对“渲染数据集结构”集合进行分组处理,并且根据各集合间的关系插入组内和组间的同步点,即可确定各个渲染任务的渲染指令的传递顺序。
136.最后将这些分过组的渲染任务,按顺序丢到任务分配器中进行多线程的任务调度来生成和录入渲染指令。图6展示了现有技术和本示例对应的指令录入及提交流程。现有技术中,依次生成各个渲染通道对应的渲染任务的渲染指令,得到各个渲染通道对应的指令列表,例如生成gbuffer渲染通道对应的渲染任务的渲染指令,得到gbuffer渲染通道对应的指令列表。然后将各个指令列表提交到主线程中,使得主线程执行各个指令列表;本示例中,各个渲染通道对应的渲染任务根据“渲染任务关系图”对应的任务执行顺序,按顺序丢到任务分配器中进行多线程的任务调度,来生成各个渲染任务的渲染指令,得到指令列表0-n(n为正整数),并将各个指令列表提交到主线程中,使得得主线程执行各个指令列表。
137.最后,根据同步点能够确保录入渲染指令的顺序,是符合”渲染任务关系图“中的有向无环图的执行顺序,从而能够保证渲染结果的正确性。
138.可见,通过本方案,通过“渲染数据集结构”结构的引入和流程的拆解,cpu的利用率得到了充分的利用,大大提高了渲染指令录入的并发程度,从而提高了cpu的使用效率;通过提前准备渲染数据实现了逻辑层和渲染层的有效分离,缩短了准备一帧渲染数据和指令所需要的时间,解决了cpu的瓶颈问题;提高了三维场景渲染效率,从而明显提高了帧率,能通过游戏引擎开发更加复杂的游戏场景。
139.相应上述方法的实施例,本发明实施例还提供了一种三维场景渲染装置,如图7所示,所述装置包括:
140.构建模块710,用于构建针对待渲染的三维场景的至少一个渲染数据集;其中,每一渲染数据集中包含有所述三维场景中的元素的、对应于同一渲染通道的待渲染数据;
141.确定模块720,用于确定对所述三维场景进行渲染时所需利用的各个目标渲染通道,并从至少一个渲染数据集中,确定各个目标渲染通道各自对应的渲染数据集;
142.生成模块730,用于针对每一目标渲染通道,基于该目标渲染通道对应的渲染数据集中的各待渲染数据,生成各待渲染数据分别对应的渲染任务;
143.分组模块740,用于将所生成的渲染任务进行分组处理,得到多个渲染任务组;
144.渲染模块750,用于为每个渲染任务组分别分配一处理线程,以使每一处理线程依次将所分配到的渲染任务组中的渲染任务对应的渲染指令,传递至图形处理器的图形api,以指示图形处理器响应于所接收到的渲染指令,进行渲染。
145.可选地,所述构建模块,包括:
146.获取子模块,用于获得待渲染的三维场景中的元素的描述信息;
147.第一构建子模块,用于基于所获得的描述信息,构建所述三维场景的至少一个渲染数据集。
148.可选地,所述构建子模块,具体用于:
149.确定待渲染的三维场景中的元素的类别;
150.针对所确定的每一类别,将待渲染的三维场景中的、属于该类别的元素的描述信息,作为输入内容,输入至该类别的元素所对应的渲染数据生成器,得到包含有该类别的元
素的待渲染数据的至少一个渲染数据集。
151.可选地,所述分组模块,包括:
152.第二构建子模块,用于以各个目标渲染通道作为节点,构建有向无环图,得到当前待分析的有向无环图;其中,所述有向无环图用于表征各个目标渲染通道之间的渲染顺序关系;
153.确定子模块,用于确定当前待分析的有向无环图中、目标节点所表征的目标渲染通道;其中,所述目标节点为入度为零的节点;
154.划分子模块,用于按照负载均衡的方式,将所确定出的目标渲染通道对应的渲染任务,划分至指定数量个预设组别内;
155.遍历子模块,用于删除当前待分析的有向无环图中的目标节点,得到新的有向无环图,作为当前待分析的有向无环图,返回所述确定当前待分析的有向无环图中、目标节点所表征的目标渲染通道的步骤,直至遍历完当前待分析的有向无环图中的所有节点,得到多个渲染任务组。
156.可选地,所述每一处理线程依次将所分配到的渲染任务组中的渲染任务对应的渲染指令,传递至图形处理器的图形api,包括:
157.每一处理线程从所分配到的渲染任务组中,依次选取待处理的渲染任务;
158.若所选取到的待处理的渲染任务存在上游渲染任务,则在所述上游渲染任务对应的渲染指令,已传递至图形处理器的图形api后,将所选取的待处理的渲染任务对应的渲染指令,传递至图形处理器的图形api;
159.若所选取到的待处理的渲染任务未存在上游渲染任务,则将所选取的待处理的渲染任务对应的渲染指令,传递至图形处理器的图形api。
160.可选地,任一渲染任务的上游渲染任务的确定方式包括:
161.针对与该渲染任务对应同一元素的其他渲染任务,若该渲染任务所对应的目标渲染通道,依赖于该其他渲染任务对应的目标渲染通道进行渲染,则将该其他渲染任务确定为该渲染任务的上游渲染任务。
162.本发明实施例还提供了一种电子设备,如图8所示,包括处理器801、通信接口802、存储器803和通信总线804,其中,处理器801,通信接口802,存储器803通过通信总线804完成相互间的通信,
163.存储器803,用于存放计算机程序;
164.处理器801,用于执行存储器803上所存放的程序时,实现上述任一三维场景渲染方法的步骤。
165.上述电子设备提到的通信总线可以是外设部件互连标准(peripheral component interconnect,pci)总线或扩展工业标准结构(extended industry standard architecture,eisa)总线等。该通信总线可以分为地址总线、数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
166.通信接口用于上述电子设备与其他设备之间的通信。
167.存储器可以包括随机存取存储器(random access memory,ram),也可以包括非易失性存储器(non-volatile memory,nvm),例如至少一个磁盘存储器。可选的,存储器还可以是至少一个位于远离前述处理器的存储装置。
168.上述的处理器可以是通用处理器,包括中央处理器(central processing unit,cpu)、网络处理器(network processor,np)等;还可以是数字信号处理器(digital signal processor,dsp)、专用集成电路(application specific integrated circuit,asic)、现场可编程门阵列(field-programmable gate array,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
169.在本发明提供的又一实施例中,还提供了一种计算机可读存储介质,该计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现上述任一三维场景渲染方法的步骤。
170.在本发明提供的又一实施例中,还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述实施例中任一三维场景渲染方法。
171.在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(dsl))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,dvd)、或者半导体介质(例如固态硬盘solid state disk(ssd))等。
172.需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
173.本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
174.以上所述仅为本发明的较佳实施例,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。
技术特征:
1.一种三维场景渲染方法,其特征在于,所述方法包括:构建针对待渲染的三维场景的至少一个渲染数据集;其中,每一渲染数据集中包含有所述三维场景中的元素的、对应于同一渲染通道的待渲染数据;确定对所述三维场景进行渲染时所需利用的各个目标渲染通道,并从至少一个渲染数据集中,确定各个目标渲染通道各自对应的渲染数据集;针对每一目标渲染通道,基于该目标渲染通道对应的渲染数据集中的各待渲染数据,生成各待渲染数据分别对应的渲染任务;将所生成的渲染任务进行分组处理,得到多个渲染任务组;为每个渲染任务组分别分配一处理线程,以使每一处理线程依次将所分配到的渲染任务组中的渲染任务对应的渲染指令,传递至图形处理器的图形api,以指示图形处理器响应于所接收到的渲染指令,进行渲染。2.根据权利要求1所述的方法,其特征在于,所述构建针对待渲染的三维场景的至少一个渲染数据集,包括:获得待渲染的三维场景中的元素的描述信息;基于所获得的描述信息,构建所述三维场景的至少一个渲染数据集。3.根据权利要求2所述的方法,其特征在于,所述基于所获得的描述信息,构建所述三维场景的至少一个渲染数据集,包括:确定待渲染的三维场景中的元素的类别;针对所确定的每一类别,将待渲染的三维场景中的、属于该类别的元素的描述信息,作为输入内容,输入至该类别的元素所对应的渲染数据生成器,得到包含有该类别的元素的待渲染数据的至少一个渲染数据集。4.根据权利要求1-3任一项所述的方法,其特征在于,所述将所生成的渲染任务进行分组处理,得到多个渲染任务组,包括:以各个目标渲染通道作为节点,构建有向无环图,得到当前待分析的有向无环图;其中,所述有向无环图用于表征各个目标渲染通道之间的渲染顺序关系;确定当前待分析的有向无环图中、目标节点所表征的目标渲染通道;其中,所述目标节点为入度为零的节点;按照负载均衡的方式,将所确定出的目标渲染通道对应的渲染任务,划分至指定数量个预设组别内;删除当前待分析的有向无环图中的目标节点,得到新的有向无环图,作为当前待分析的有向无环图,返回所述确定当前待分析的有向无环图中、目标节点所表征的目标渲染通道的步骤,直至遍历完当前待分析的有向无环图中的所有节点,得到多个渲染任务组。5.根据权利要求1-3任一项所述的方法,其特征在于,所述每一处理线程依次将所分配到的渲染任务组中的渲染任务对应的渲染指令,传递至图形处理器的图形api,包括:每一处理线程从所分配到的渲染任务组中,依次选取待处理的渲染任务;若所选取到的待处理的渲染任务存在上游渲染任务,则在所述上游渲染任务对应的渲染指令,已传递至图形处理器的图形api后,将所选取的待处理的渲染任务对应的渲染指令,传递至图形处理器的图形api;若所选取到的待处理的渲染任务未存在上游渲染任务,则将所选取的待处理的渲染任
务对应的渲染指令,传递至图形处理器的图形api。6.根据权利要求5所述的方法,其特征在于,任一渲染任务的上游渲染任务的确定方式包括:针对与该渲染任务对应同一元素的其他渲染任务,若该渲染任务所对应的目标渲染通道,依赖于该其他渲染任务对应的目标渲染通道进行渲染,则将该其他渲染任务确定为该渲染任务的上游渲染任务。7.一种三维场景渲染装置,其特征在于,所述装置包括:构建模块,用于构建针对待渲染的三维场景的至少一个渲染数据集;其中,每一渲染数据集中包含有所述三维场景中的元素的、对应于同一渲染通道的待渲染数据;确定模块,用于确定对所述三维场景进行渲染时所需利用的各个目标渲染通道,并从至少一个渲染数据集中,确定各个目标渲染通道各自对应的渲染数据集;生成模块,用于针对每一目标渲染通道,基于该目标渲染通道对应的渲染数据集中的各待渲染数据,生成各待渲染数据分别对应的渲染任务;分组模块,用于将所生成的渲染任务进行分组处理,得到多个渲染任务组;渲染模块,用于为每个渲染任务组分别分配一处理线程,以使每一处理线程依次将所分配到的渲染任务组中的渲染任务对应的渲染指令,传递至图形处理器的图形api,以指示图形处理器响应于所接收到的渲染指令,进行渲染。8.根据权利要求7所述的装置,其特征在于,所述分组模块,包括:第二构建子模块,用于以各个目标渲染通道作为节点,构建有向无环图,得到当前待分析的有向无环图;其中,所述有向无环图用于表征各个目标渲染通道之间的渲染顺序关系;确定子模块,用于确定当前待分析的有向无环图中、目标节点所表征的目标渲染通道;其中,所述目标节点为入度为零的节点;划分子模块,用于按照负载均衡的方式,将所确定出的目标渲染通道对应的渲染任务,划分至指定数量个预设组别内;遍历子模块,用于删除当前待分析的有向无环图中的目标节点,得到新的有向无环图,作为当前待分析的有向无环图,返回所述确定当前待分析的有向无环图中、目标节点所表征的目标渲染通道的步骤,直至遍历完当前待分析的有向无环图中的所有节点,得到多个渲染任务组。9.一种电子设备,其特征在于,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;存储器,用于存放计算机程序;处理器,用于执行存储器上所存放的程序时,实现权利要求1-6任一所述的方法步骤。10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现权利要求1-6任一所述的方法步骤。
技术总结
本发明实施例提供了一种三维场景渲染方法、装置、设备以及存储介质,涉及图像处理技术领域。具体实现方案为:构建待渲染的三维场景的至少一个渲染数据集;确定对三维场景进行渲染时所需的各个目标渲染通道,并确定各个目标渲染通道各自对应的渲染数据集;针对每一目标渲染通道,基于该目标渲染通道对应的各待渲染数据,生成各待渲染数据对应的渲染任务;将所生成的渲染任务进行分组处理,得到多个渲染任务组;为每个渲染任务组分配一处理线程,以使每一处理线程将所分配到的渲染任务对应的渲染指令,传递至图形处理器的图形API,以指示图形处理器响应于所接收到的渲染指令,进行渲染。可见,通过本方案,可以提高三维场景的渲染效率。效率。效率。
技术研发人员:党占威 杜双泓 韦洪宇
受保护的技术使用者:不鸣科技(杭州)有限公司
技术研发日:2023.06.29
技术公布日:2023/8/13
版权声明
本文仅代表作者观点,不代表航空之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)
飞行汽车 https://www.autovtol.com/
上一篇:一种钢衔架单元拼装胎架的制作方法 下一篇:一种防倾倒式辅助定位型轮椅的制作方法
