CN115375821A - 一种图像渲染方法、装置及服务器 - Google Patents
一种图像渲染方法、装置及服务器 Download PDFInfo
- Publication number
- CN115375821A CN115375821A CN202110534167.6A CN202110534167A CN115375821A CN 115375821 A CN115375821 A CN 115375821A CN 202110534167 A CN202110534167 A CN 202110534167A CN 115375821 A CN115375821 A CN 115375821A
- Authority
- CN
- China
- Prior art keywords
- instruction
- instructions
- image rendering
- rendering
- image
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000009877 rendering Methods 0.000 title claims abstract description 705
- 238000000034 method Methods 0.000 title claims abstract description 136
- 238000012545 processing Methods 0.000 claims description 115
- 230000015654 memory Effects 0.000 claims description 46
- 238000004590 computer program Methods 0.000 claims description 17
- 230000008569 process Effects 0.000 abstract description 32
- 238000004891 communication Methods 0.000 description 33
- 230000006870 function Effects 0.000 description 18
- 230000009471 action Effects 0.000 description 17
- 239000000872 buffer Substances 0.000 description 17
- 238000010586 diagram Methods 0.000 description 16
- 230000002194 synthesizing effect Effects 0.000 description 9
- 238000005457 optimization Methods 0.000 description 6
- 230000001360 synchronised effect Effects 0.000 description 6
- 238000012986 modification Methods 0.000 description 5
- 230000004048 modification Effects 0.000 description 5
- 230000003068 static effect Effects 0.000 description 5
- 239000012634 fragment Substances 0.000 description 4
- 241000220225 Malus Species 0.000 description 3
- 230000008878 coupling Effects 0.000 description 3
- 238000010168 coupling process Methods 0.000 description 3
- 238000005859 coupling reaction Methods 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 238000005286 illumination Methods 0.000 description 3
- 230000003190 augmentative effect Effects 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 2
- 230000015572 biosynthetic process Effects 0.000 description 2
- 238000004364 calculation method Methods 0.000 description 2
- 230000001419 dependent effect Effects 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 238000003786 synthesis reaction Methods 0.000 description 2
- 238000004148 unit process Methods 0.000 description 2
- 230000000007 visual effect Effects 0.000 description 2
- 239000002699 waste material Substances 0.000 description 2
- 230000004075 alteration Effects 0.000 description 1
- 235000021016 apples Nutrition 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 238000013473 artificial intelligence Methods 0.000 description 1
- 239000003086 colorant Substances 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000018109 developmental process Effects 0.000 description 1
- 239000011521 glass Substances 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000011218 segmentation Effects 0.000 description 1
- XLYOFNOQVPJJNP-UHFFFAOYSA-N water Substances O XLYOFNOQVPJJNP-UHFFFAOYSA-N 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T7/00—Image analysis
- G06T7/90—Determination of colour characteristics
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/20—Processor architectures; Processor configuration, e.g. pipelining
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/04—Texture mapping
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Computer Graphics (AREA)
- Image Generation (AREA)
Abstract
本申请公开了一种图像渲染方法、装置及服务器。在图像渲染过程中,电子设备获取到用于生成渲染图像的指令流后,可以将该指令流中包含的多个指令发送到多个图像渲染设备,以使多个图像渲染设备并行执行所接收到的指令。其中,发送至不同的图像渲染设备的指令是不同的,即任一图像渲染设备所接收到的指令为指令流中的部分指令。通过该方法,多个图像渲染设备可以并行进行图像渲染,可以提高图像渲染的效率。并且多个图像渲染设备只执行接收到的指令,即执行指令流中的部分指令,减少了任一图像渲染设备所需执行的指令的数量,减少了多个图像渲染设备的负载。
Description
技术领域
本申请涉及图像渲染技术领域,尤其涉及一种图像渲染方法、装置及服务器。
背景技术
目前,渲染技术得到了广泛的应用。在虚拟现实(virtual reality,VR),增强现实(augmented reality,AR)等大型虚拟场景中,为了避免渲染图像生成过慢造成终端上显示的画面卡顿等情况,对生成渲染图像的效率有较高的要求。基于此,如何提高图像渲染效率是需要解决的技术问题。
发明内容
本申请提供了一种图像渲染方法、装置及服务器,用以提高图像渲染效率。
第一方面,本申请提供了一种图像渲染方法,该图像渲染方法应用于具有中央处理器的电子设备(例如,笔记本电脑、服务器、智能手机等)。在该方法中,电子设备可以获取用于生成渲染图像的指令流。其中,不同的指令流用于生成不同的渲染图像,且该指令流中包括多个指令。电子设备获取到该指令流后,可以将该指令流中包含的多个指令发送至多个图像渲染设备,以使多个图像渲染设备可以并行执行所接收到的指令。其中,发送至不同的图像渲染设备的指令是不同的,即任一图像渲染设备接收到的指令是指令流中的部分指令。该多个图像渲染设备可以位于该电子设备中,也可以独立于电子设备之外。
在第一方面中,将指令流中的多个指令发送至多个图像渲染设备执行,多个图像渲染设备可以并行(同时)进行图像渲染,提高了图像渲染的效率。并且发送至不同的图像渲染设备的指令是不同的,使得任一图像渲染设备所接收到的指令为指令流中的部分指令(而不是全部指令),减少任一图像渲染设备所需执行的指令的数量,减少了多个图像渲染设备的负载。在一些情况下,由于电子设备负责确定指令流中发送给每个图像渲染设备的指令,多个图像渲染设备只需并行执行接收到的指令,减少了多个图像渲染设备对接收到的指令进行划分所耗费的资源,进一步减少了多个图像渲染设备的负载。
在一种可能的实施方式中,发送至不同的图像渲染设备的指令之间不存在交集。
通过上述的方法,可以令多个图像渲染设备所执行的指令是完全不同的,避免出现某两个或更多个图像渲染设备重复执行同一指令的情况,减少图像渲染设备的负载和计算量,进而提高图像渲染的效率。
在一种可能的实施方式中,发送至不同的图像渲染设备的指令用于渲染不同的渲染对象,所述渲染对象包含于所述渲染图像中。也就是电子设备将指令流中包含的多个指令发送至多个图像渲染设备时,考虑到了每个指令用于渲染的渲染对象。
其中,渲染对象由渲染图像中包含的一个或多个三维图形确定。三维图形例如为球体、长方体等图形。
由于用于渲染同一个渲染对象的多个指令一般是按照一定的执行顺序执行的,也就是这些指令中的某些指令的输出参数值,需要作为其它指令的输入参数值。通过上述的方法,发送至不同的图像渲染设备的指令用于渲染不同的渲染对象,可以令不同的图像渲染设备所执行的指令之间是相互独立的,使得多个图像渲染设备可以并行执行所接收到的指令,不需要互相等待。
在一种可能的实施方式中,所述指令流包括的多个指令包括:允许被多个图像渲染设备并行运行的第一指令,该第一指令通常为多个,多个所述第一指令被发送至不同的图像渲染设备上。可选的,所述指令流包括的多个指令,还可以包括:不允许被多个图像渲染设备并行运行的第二指令。第二指令可以是一个,也可以是多个;一个或多个所述第二指令被发送至同一个图像渲染设备上。
此处的“允许被多个图像渲染设备并行运行”可以理解为,不存在依赖关系或无需按照一定的顺序执行,或者可以被并行(同时)执行。“不允许被多个图像渲染设备并行运行”可以理解为,这些指令存在依赖关系或者需要按照一定的顺序执行,或者不可以被并行(同时)执行。
在一种可能的实施方式中,如果指令流中包含的多个指令无需按照一定的执行顺序执行,即该多个指令之间不存在依赖关系,也可以理解为所述多个指令为允许被多个图像渲染设备并行运行的第一指令,则可以将该多个指令发送至多个图像渲染设备。
在一种可能的实施方式中,如果指令流中包括的多个指令包括第一指令和第二指令,则可以先把第一指令和第二指令区分开来,将多个第一指令发送至多个图像渲染设备上,将所有的第二指令(一个或多个第二指令)共同发送至一个图像渲染设备。用于接收第二指令的图像渲染设备可以与接收第一指令的图像渲染设备相同或不同。
通过上述的方法,可以实现多个图像渲染设备并行执行接收到的第一指令,不需要等待其它图像渲染设备的渲染结果,提高了多个图像渲染设备的工作效率,进而提高图像渲染的效率。并且在指令流包含的多个指令中存在一个或多个第二指令时,把该一个或多个第二指令发送至一个图像渲染设备上,让该图像渲染设备在执行第二指令时,无需等待其它图像渲染设备的执行结果。
在一种可能的实施方式中,基于上述“允许被多个图像渲染设备并行运行”的理解,多个所述第一指令的执行顺序不固定。
在一种可能的实施方式中,所述指令流中包括所述第一指令的深度标识,所述深度标识用于指示所述第一指令用于渲染的渲染对象存在深度值;和/或,在所述指令流中,所述第一指令对应的输入参数值与其它指令的输出参数值不同;其中,所述输入参数值用于指示所述第一指令对渲染对象进行渲染时所需的参数值(例如,渲染对象的纹理颜色等),所述输出参数值用于指示所述其它指令对渲染对象渲染后得到的参数值(例如对渲染对象进行渲染后得到的纹理颜色等)。基于上述第一指令的特性,电子设备可以判断指令流包含的每个指令是否满足上述特性。然后根据判断结果,将满足上述特性的指令确定为第一指令,将不满足上述特性的指令确定为第二指令。
通过上述的方法,可以快速且准确地将指令流中包含的第一指令和第二指令区分开来。
在一种可能的实施方式中,针对所述渲染图像中的至少一个渲染对象(例如苹果):在所述指令流中,所述渲染对象所采用的所述输入参数类型(例如颜色)对应多个输入参数值(例如黄色、红色);发送给每个图像渲染设备的多个指令中,渲染对象所采用的所述输入参数类型对应一个输入参数值(红色)。例如,某一渲染对象所采用的输入参数类型对应k个输入参数值,k为大于等于2的整数。电子设备可以将k个输入参数值中,设置时间较早的k-1个输入参数值删除,这种优化方式适用于k个输入参数值为部分或完全相同的情况,也适用于k个输入参数值完全不同的情况。或者将k个输入参数值中,任意k-1个输入参数值删除,这种优化方式适用于k个输入参数值均相同的情况。
当图像渲染设备在执行某一渲染对象对应的多个指令时,如果该指令中包括该渲染对象所采用的输入参数类型对应的多个输入参数值,图像渲染设备会耗费大量的运算资源。例如,针对输入参数类型为颜色,该输入参数类型对应的输入参数值分别为:红色、红色、红色的情况,对于图像渲染设备来说,只需执行一次“红色”即可,另外的两次“红色”无需执行。再例如,针对输入参数类型为颜色,该输入参数类型对应的输入参数值分别为:红色、绿色、黄色的情况,对于图像渲染设备来说,“红色”的执行结果会被“绿色”的执行结果覆盖,“绿色”的执行结果会被“黄色”的执行结果覆盖,则“红色”、“绿色”为两次无效操作。
通过上述的方法,可以有效避免出现图像渲染设备根据某一渲染对象的渲染参数类型对应的多个输入参数值,重复执行该渲染对象对应的多个指令的情况,减少了图像渲染设备的负载和计算量,提高了多个图像渲染设备的工作效率,进而提高图像渲染的效率。
在一种可能的实施方式中,电子设备可以根据指令流中包括的第一信息,将该指令流中的多个指令划分为多个指令集合。其中,所述第一信息用于生成渲染对象,任一渲染对象所对应的所有指令属于同一指令集合,不同的指令集合包括的指令不同,所述指令集合包括至少一个指令。然后电子设备将获取到的多个指令集合发送至多个图像渲染设备,以使多个图像渲染设备并行执行接收到的指令集合。其中,发送至不同的图像渲染设备的指令集合不同。
由于用于渲染相同渲染对象的多个指令的第一信息一般是相同的,通过上述的方法,可以将用于渲染相同渲染对象的多个指令划分到一个指令集合中,避免将用于生成相同渲染对象的多个指令划分到不同的图像渲染设备上执行,降低后续合成多个图像渲染设备的渲染结果的难度。并且由于发送至不同的图像渲染设备的指令集合用于渲染不同的渲染对象,可以保证多个指令集合之间是相互独立的,多个图像渲染设备在执行接收到的指令集合中的指令时,不需要互相等待。在一些情况中,由于电子设备可以根据指令流中包含的第一信息,将多个指令划分为了多个指令集合,然后将多个指令集合发送到多个图像渲染设备,后续多个图像渲染设备并行执行接收到的指令集合中的指令即可,减少了多个图像渲染设备对接收到的指令进行划分所耗费的资源,进一步减少了多个图像渲染设备的负载。
在一种可能的实施方式中,所述第一信息包括但不限于以下的一个或多个:输入参数信息(包括输入参数类型以及输入参数值)、渲染方法信息、存储区域信息;其中,所述存储区域用于存储输出参数信息。
在一种可能的实施方式中,电子设备可以根据所述指令流中的部分第一信息,先将所述多个指令划分为多个指令集合。然后确定将该划分的指令集合分配给多个图像渲染设备执行时,多个图像渲染设备是否负载均衡。如果确定所述多个图像渲染设备负载不均衡的情况下,则电子设备可以根据所述指令集合中的另外的部分第一信息,将每个所述指令集合划分为多个指令集合。
通过上述的方法,可以实现尽可能准确地对多个图像渲染设备的负载进行控制,使得多个图像渲染设备在执行接收到的指令集合时,可以负载均衡。
在一种可能的实施方式中,如果确定所述多个图像渲染设备负载均衡的情况下,则电子设备可以直接将划分的多个指令集合发送至多个指令集合。
在一种可能的实施方式中,所述指令集合的负载是根据所述指令集合中包含的每个指令所需的计算量和/或渲染对象的复杂度确定。有利于准确地确定指令集合的负载。
在一种可能的实施方式中,所述渲染对象(例如苹果)的复杂度用于指示以下的一项或多项:所述渲染对象对应的三维模型的顶点数量、所述渲染对象包含的平面数量、所述渲染对象的纹理数量。有利于准确地确定渲染对象的复杂度。
在一种可能的实施方式中,生成所述指令流的应用与保存的直接进行图像渲染的应用不相同。电子设备可以获取生成该指令流的应用,确定该应用是否与保存的直接进行图像渲染的应用相同。如果确定该应用与保存的直接进行图像渲染的应用不相同,则可以对该指令流中的多个指令发送至多个图像渲染设备,以使多个图像渲染设备并行执行所接收到的指令。
由于直接进行图像渲染的应用生成的指令流中,该指令流包含的多个指令之间存在依赖性,需要按照一定的执行顺序执行,无法被多个图像渲染设备并行执行。通过上述的方法,电子设备在确定生成该指令流的应用与保存的直接进行图像渲染的应用不相同时,才执行后续地将该指令流中多个指令发送至多个图像渲染设备的步骤,避免浪费资源和时间用于将直接渲染的应用生成的指令流中的多个指令发送至多个图像渲染设备。
在一种可能的实施方式中,如果确定该应用与保存的直接进行图像渲染的应用相同,电子设备可以将该指令流发送至一个图像渲染设备,以通过该图像渲染设备执行该指令流中包含的多个指令。
第二方面,本申请实施例还提供了一种图像渲染装置,该图像渲染装置部署在具有中央处理器的电子设备上。具有实现上述第一方面的方法实例中行为的功能。所述功能可以通过硬件实现,也可以通过硬件执行相应的软件实现。所述硬件或软件包括一个或多个与上述功能相对应的单元(或模块)。如包括接收单元和处理单元。
第三方面,本申请实施例还提供了一种服务器。该服务器具有实现上述第一方面的方法实例中行为的功能。在一种可能的实施方式中,该服务器包括处理器。
第四方面,本申请提供一种芯片系统,该芯片系统包括一个或多个处理器(也可以称为处理电路),所述处理器与存储器(也可以称为存储介质)之间电耦合;所述存储器可以位于所述芯片系统中,也可以不位于所述芯片系统中;所述存储器,用于存储计算机程序或指令;所述处理器,用于执行所述存储器中的部分或者全部计算机程序或指令,当所述部分或者全部计算机程序或指令被执行时,用于实现上述第一方面及第一方面任一可能的实现的方法中图像渲染的功能。
在一种可能的实现中,所述芯片系统还可以包括输入输出接口(也可以称为通信接口),所述输入输出接口,用于输出所述处理器处理后的信号,或者接收输入给所述处理器的信号。所述输入输出接口可以执行第一方面及第一方面任一可能的实现中执行的发送动作或接收动作。具体的,输出接口执行发送动作,输入接口执行接收动作。
在一种可能的实现中,该芯片系统,可以由芯片构成,也可以包括芯片和其他分立器件。
第五方面,本申请提供了一种图像渲染系统,包括服务器和多个图像渲染设备。该服务器具有实现上述第一方面的方法实例中行为的功能。在一种可能的实施方式中,该服务器包括处理器。该多个图像渲染设备用于并行执行所接收到的指令。
第六方面,本申请提供了一种计算机可读存储介质,用于存储计算机程序,所述计算机程序包括用于实现第一方面及第一方面任一可能的实现中的功能的指令。
第七方面,本申请提供了一种计算机程序产品,包括计算机程序或指令,当计算机程序或指令被执行时,可以实现上述第一方面或者第一方面的任一种可能的设计中所述的方法。
上述第二方面至第七方面所能达到的技术效果请参照上述第一方面所能达到的技术效果,这里不再重复赘述。
附图说明
图1为本申请实施例提供的云游戏系统的结构示意图;
图2为本申请实施例提供的一种画面分割渲染法生成渲染图像的流程示意图;
图3为本申请实施例提供的渲染系统的结构示意图;
图4为本申请实施例提供的电子设备的结构示意图;
图5为本申请实施例提供的一种图像渲染过程示意图;
图6为本申请实施例提供的一种图像渲染过程示意图;
图7为本申请实施例提供的图像渲染流程示意图;
图8为本申请实施例提供的一种划分指令集合的场景示意图;
图9为本申请实施例提供的一种将多个指令集合发送至多个GPU的场景示意图;
图10为本申请实施例提供的一种将多个指令集合发送至多个GPU的场景示意图;
图11为本申请实施例提供的图像渲染方法的实现模式示意图;
图12为本申请实施例提供的一种图像渲染装置结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行描述。
首先,对本申请涉及相关术语进行相应的解释,以便于本领域技术人员理解。
1、本申请涉及的应用程序(application,APP),可以简称应用,为能够实现某项或多项特定功能的软件程序。通常,电子设备中可以安装多个应用,例如,运动类应用,音乐类应用,词典类应用等。可以理解的是,应用可以是电子设备出厂时已安装的应用,也可以是在使用电子设备的过程中从网络下载或从其他电子设备获取的应用。
2、渲染管线:图形处理器(graphic processing unit,GPU)在绘制目标或渲染图像的过程中顺序执行的一些列操作,典型的操作包括:顶点处理(vertex processing)、图元处理(primitive processing)、光栅化(rasterization)、片段处理(fragmentprocessing)等等。
3、三维模型(model):三维模型是用语言或者数据结构进行严格定义的三维图形或虚拟场景的描述,它包括几何、视点、纹理、照明和阴影等渲染信息。该三维模型由一个或多个三维图像确定。
4、渲染(render):是指根据三维模型生成渲染图像的过程。
5、场景(scene):场景是由三维模型组成的虚拟世界。
6、指令流(job):应用基于某种图形应用程序接口(application programinterface,API)产生的绘制指令序列,用于生成渲染图像。指令流中可以包括一个或多个指令。不同的指令流用于生成不同的渲染图像。本申请的一个指令流可以生成一帧或多帧渲染图像,本申请中,对于一个指令流生成的渲染图像的数量不进行限制。
7、绘制(draw)指令,可以简称指令:用于渲染(也称生成)渲染图像中的渲染对象的指令,例如开放图形库(open graphics library,OpenGL)的绘制调用(draw call)(即CPU对底层图形绘制接口的调用命令)。该渲染对象由渲染图像中包含的一个或多个三维图形(例如,球体、长方体等)确定。对渲染对象渲染后得到的输出参数信息可以存储在存储区域(比如,内存)中。相应的,根据该指令流获取到的输出参数信息的集合,可以组成对应渲染图像。示例地,假设某个渲染图像包括两个渲染对象,分别为人物A和人物B,该渲染图像的指令流可以包括用于渲染人物A这一渲染对象的一个或多个指令,及渲染人物B这一渲染对象的一个或多个指令。相应的,GPU通过运行这些指令即可得到对该人物A和人物B分别渲染后得到的输出参数值。可以理解的是,GPU通过运行这些指令可以获取到渲染后的人物A和渲染后的人物B。可选的,用于存储输出参数信息的存储区域可以简称为存储区域,该存储区域可以为寄存器,比如,渲染缓冲区(如后备缓冲区(back buffer)、颜色缓冲区(colorbuffer)等),也可以为存储器,比如,高速缓冲存储器(CACHE)、静态随机读取存储器(SRAM)等。
其中,指令在指令流中对应有输入参数信息。GPU在执行指令时,根据指令流中该指令对应的输入参数信息,对渲染对象进行渲染,获取对渲染对象渲染后得到的输出参数值,将该输出参数值存储到对应的存储区域中。
8、任一指令在指令流中对应的输入参数信息包括:GPU在绘制渲染对象时的配置参数信息(如存储区域的大小、存储对渲染对象进行渲染后的输出参数值的数据格式等)以及该渲染对象的形状所满足的特征参数信息(如纹理、光照、视点等)。GPU在执行指令时,根据指令流中该指令对应的输入参数信息,对渲染对象进行渲染,获取渲染后的渲染对象。该渲染后的渲染对象的形状满足渲染对象的特征参数信息。
举例来说,以渲染对象为球体的三维模型为例,某一指令所对应的输入参数信息中包括该球体的三维模型的特征参数信息,该球体的三维模型的特征参数信息用于指示该球体的三维模型在该渲染图像中的光照和纹理等特征信息,则GPU执行该指令时,根据该球体对应的输入参数信息,对该球体进行渲染,可以得到被添加了光照和纹理的球体。
9、本申请中所述的“指令”可以是一条指令,例如一个API调用函数;也可以是多条指令的集合,例如在openGL中,一个draw call通常包含多个API调用函数,这一个drawcall可以认为是一个指令,完成一次绘制动作。可以一个draw call对应一个存储区域,将执行draw call所获取到的输出参数值,存储在该draw call对应的存储区域中;也可以多个draw call对应同一个存储区域,将执行该多个draw call所获取到的输出参数值,均存储在同一个存储区域中;还可以一个draw call对应多个存储区域,将执行该draw call所获取到的输出参数值,分别存储在该draw call所对应的多个存储区域中。
为便于理解本申请实施例,接下来对本请的应用场景进行介绍,本申请实施例描述的网络架构以及业务场景是为了更加清楚的说明本申请实施例的技术方案,并不构成对于本申请实施例提供的技术方案的限定,本领域普通技术人员可知,随着新业务场景的出现,本申请实施例提供的技术方案对于类似的技术问题,同样适用。
随着图像处理技术的发展,越来越多的应用采用渲染技术生成多帧渲染图像并发送至终端的显示屏上进行显示,以提高用户的视觉体验。在云游戏、虚拟现实等渲染场景下,为了避免渲染图像生成过慢造成终端上显示的画面卡顿等情况,对生成每帧渲染图像的效率有较高的要求。
需要说明的是,本申请实施例提供的技术方案包括但不限于适用于对渲染图像生成效率要求较高的场景。为了方便描述,下文以应用场景为云游戏为例进行介绍。
示例性的,如图1所示,为云游戏系统的结构示意图。云游戏系统包括终端和服务器。终端上安装了游戏APP,该服务器可以是该游戏APP的服务器。终端与服务器连接(有线连接或无线连接)。服务器可以是具有较大计算能力的设备。例如,服务器可以是云服务器等。示例性的,终端可以是头戴式设备(Head Mounted Display,HMD),比如眼镜、头盔等,也可以是手机、平板电脑、笔记本电脑等设备。
在该应用场景下,用户通过操作安装了游戏APP的终端玩游戏,终端根据用户操作向该游戏APP的服务器发送请求以开始游戏。
其中,用户输入操作的方式有很多。例如,可以通过在终端的显示器上输入触发操作的方式输入,比如,单击,双击,滑动等触发操作。当然还可以是通过其他控制设备输入,比如,鼠标、AR设备、键盘等其他控制设备输入。具体实施过程中,可以根据实际需求,进行灵活设置,在此不做具体限定。
为了保证用户在通过终端玩游戏的过程中的视觉体验,可以通过该游戏APP的服务器生成该游戏的渲染图像并下发渲染图像至终端进行显示,也可以是通过终端生成该游戏的渲染图像并发送至用户操作的终端进行显示。其中,该终端与上述用户操作的终端可以相同,也可以不同。
后续为了方便描述,将进行图像渲染的设备称为电子设备,该电子设备可以为具有图像处理功能的便携式终端,比如手机、平板电脑、可穿戴设备、增强现实/虚拟现实设备等,或者是具有图像处理功能的服务器等。具体的,电子设备的示例性实施例包括但不限于搭载或者其它操作系统。在另一些实施例中,电子设备还可以为智慧屏、笔记本电脑、车载终端等。
下文主要以服务器进行图像渲染为例进行介绍:
为了生成渲染图像,服务器需要获取用于生成渲染图像的指令流。然后服务器采用以下的方法对获取到的指令流进行处理:
一种方式为,服务器的中央处理器获取用于生成渲染图像的指令流后,将该指令流通过通信接口发送至一个图像渲染设备。该图像渲染设备可以位于服务器中,也可以独立于服务器外,该图像渲染设备可以是图像处理器GPU,或者其它的能够进行图像渲染的设备。图像渲染设备获取到该指令流后,通过渲染管线对该指令流进行处理,获取渲染图像。在使用该种方法生成一帧或多帧渲染图像时,由于单个图像渲染设备的算力有限,只通过单个图像渲染设备无法短时间内生成一帧或多帧渲染图像。
因此,为了提高生成渲染图像的效率,一般会采用通过多个图像渲染设备,并行化生成渲染图像的解决方式。
可选的,一种解决方式为:服务器通过画面分割渲染(split frame render,SFR)法以及多个GPU,并行化生成渲染图像。
如图2所示的画面分割渲染(split frame render,SFR)法生成任一帧渲染图像,服务器的中央处理器通过通信接口获取到用于生成一帧渲染图像的指令流后,将获取到的指令流通过通信接口分别发送至多个GPU进行渲染,不同的GPU接收到的指令流是相同的。对于任一GPU,均需要对接收到的指令流进行以下处理:
首先,获取该指令流对应的二维画面。然后,对该二维画面进行分割,获取该GPU所需渲染的区域并只对该区域进行后续的渲染。当GPU对该区域渲染完成后,该GPU会将获取到的渲染结果发送至用于渲染结果合成的GPU。
后续该用于渲染结果合成的GPU根据每个GPU所发送的渲染结果进行合成,生成渲染图像。
例如,如图3所示,以具有两个GPU的渲染系统为例,该渲染系统中包括服务器以及两个GPU,两个GPU分别为GPU1和GPU2,该服务器分别与两个GPU连接(有线连接或无线连接)。服务器的中央处理器会通过通信接口将用于生成一帧渲染图像的指令流分别发送至两个GPU进行处理,比如,服务器的中央处理器通过通信接口,将用于生成第n帧渲染图像的指令流发送至GPU1和GPU2,n为大于等于1的整数,然后服务器的中央处理器通过通信接口,将用于生成第n+1帧渲染图像的指令流发送至GPU1和GPU2,依次类推。为了方便说明,以GPU1和GPU2接收到用于生成第n帧渲染图像的指令流为例,GPU1接收到用于生成第n帧渲染图像的指令流后,对该指令流进行处理,获取该指令流对应的二维画面。然后将该二维画面垂直划分成两个区域,GPU1只对划分出的第一个区域进行后续的渲染。同样的,GPU2接收到用于生成第n帧渲染图像的指令流后,对该指令流进行处理,获取该指令流对应的二维画面。然后将该二维画面垂直划分成两个区域,GPU 2只对划分出的第二个区域进行后续的渲染。
对于该种渲染方法,虽然每个GPU只需对渲染图像中的部分区域进行渲染,但GPU根据接收到的指令流生成二维画面、将该二维画面划分成多个区域等过程,均需要耗费GPU大量的资源和时间,使得GPU对接收到的指令流进行处理的过程非常复杂,难以保障生成渲染图像的效率。
基于此,本申请提供了多种图像渲染方法。这些图像渲染方法可以提高生成渲染图像的效率的问题。本申请进行图像渲染的设备可以是电子设备。接下来,对该电子设备的结构进行介绍:
图4示出了电子设备的结构示意图。如图4所示,电子设备400可以包括:中央处理器(CPU)401,还可以包括以下的一项或多项:多个图像渲染设备(例如GPU)402、显示设备403、存储器404和通信接口406(图4中未示出)。可选地,该服务器400还可以包括至少一个通信总线410(图4中未示出),用于实现各个组件之间的连接通信。
应当理解,服务器400中的各个组件还可以通过其他连接器相耦合,其他连接器可包括各类接口、传输线或总线等。服务器400中的各个组件还可以是以中央处理器401为中心的放射性连接方式。在本申请的各个实施例中,耦合是指通过相互电连接或连通,包括直接相连或通过其他设备间接相连。
中央处理器401和图像渲染设备402的连接方式也有多种,不局限于图4所示的方式。服务器400中的中央处理器401和图像渲染设备402可以位于同一个芯片上,也可以分别为独立的芯片。
下面对中央处理器401、图像渲染设备402、显示设备403和存储器404的作用进行简单的介绍。
中央处理器401:用于运行操作系统405和应用407。应用407可以为图形类应用程序,比如游戏、视频播放器等等。操作系统405提供了系统图形库接口,应用407通过该系统图形库接口,以及操作系统405提供的驱动程序,比如图形库用户态驱动和/或图形库内核态驱动,生成用于生成渲染图像的指令流。其中,系统图形库包括但不限于:嵌入式开放图形库(open graphics library for embeddedsystem,OpenGL ES)、柯罗诺斯平台图形界面(the khronos platform graphicsinterface)或Vulkan(一个跨平台的绘图应用程序接口)等系统图形库。
可选地,中央处理器401可以包括以下至少一种类型的处理器:应用处理器、一个或多个微处理器、数字信号处理器(digital signal processor,DSP)、微控制器(microcontroller unit,MCU)或人工智能处理器等。处理器401可以被耦合到一个或多个数据总线,用于在服务器400的各个组件之间传输数据和指令。
图形渲染设备402:用于接收处理器401发送的指令,通过渲染管线(pipeline)生成渲染结果,和/或将多个图形渲染设备402生成的每个渲染结果合成,生成渲染图像。
可选地,图像渲染设备402可以包括执行软件的通用图像渲染设备,如GPU或其他类型的专用图像渲染设备等。
显示设备403:用于显示由服务器400生成的各种图像,该图像可以为操作系统的图形用户界面(graphical user interface,GUI)或由多个图像渲染设备402生成的渲染图像。
可选地,显示设备403可以包括任何合适类型的显示屏。例如液晶显示器(liquidcrystal display,LCD)或等离子显示器或有机发光二极管(organic light-emittingdiode,OLED)显示器等。
存储器404,是中央处理器401和图像渲染设备402之间的传输通道,可以为双倍速率同步动态随机存储器(double data rate synchronous dynamic random accessmemory,DDR SDRAM)或者其它类型的缓存。可以用于存储程序代码,如将指令流中包含的多个指令发送至多个图像渲染设备的程序代码。处理器210可以执行上述程序代码,以实现本申请实施例中将指令流中包含的多个指令发送至多个图像渲染设备。
可选的,存储器也可以集中在中央处理器401中。
渲染管线是图像渲染设备402在渲染过程中顺序执行的一系列操作,典型的操作包括:顶点处理(vertex processing)、图元处理(primitive processing)、光栅化(rasterization)、片段处理(fragment processing)等等。
通信接口406,用于与其他服务器或终端进行数据通信。
可以理解的是,本申请实施例示意的结构并不构成对电子设备的具体限定。该电子设备可以具有比图4中所示出的更多的或者更少的部件,可以组合两个或更多的部件,或者可以具有不同的部件配置。
下面结合本申请实施例中的附图,对本申请实施例提供的技术方案进行详细地描述。附图中以虚线标识的特征或内容可理解为本申请实施例的可选操作或者可选结构。
图5为本申请实施例提供的一种图像渲染过程示意图,该过程可以应用于电子设备,该电子设备可以是图4所示的电子设备。如图5所示,该方法包括以下步骤:
S501:获取指令流;其中,所述指令流用于生成渲染图像,不同的指令流用于生成不同的渲染图像,所述指令流包括多个指令。
S502:将所述多个指令发送至多个图像渲染设备,以使所述多个图像渲染设备并行执行所接收到的指令;其中,发送至不同的图像渲染设备的指令不同。
其中,上述S501~S502后续会进行详细地介绍。
在图像渲染过程中,电子设备获取到用于生成渲染图像的指令流后,可以将该指令流中包含的多个指令发送到多个图像渲染设备,以使多个图像渲染设备并行执行所接收到的指令。其中,发送至不同的图像渲染设备的指令是不同的。
比如,指令流中包含的多个指令分别为指令1到指令10,多个图像渲染设备分别有GPU1、GPU2和GPU3。将指令1到指令3发送至GPU1进行处理,将指令7到指令9发送至GPU2进行处理,将指令4到指令6、以及指令10发送至GPU3进行处理。GPU1、GPU2和GPU3并行执行所接收到的指令。
由于将指令流中的多个指令发送至多个图像渲染设备执行,多个图像渲染设备可以并行(同时)进行图像渲染,可以提高图像渲染的效率。并且发送至不同的图像渲染设备的指令是不同的,使得任一图像渲染设备所接收到的指令为指令流中的部分指令(而不是全部指令),不仅可以减少任一图像渲染设备所需执行的指令的数量,减少了多个图像渲染设备的负载,也可以减少将指令流中的多个指令发送至多个图像渲染设备所占用的通信资源。
在一些情况下,由于电子设备负责确定指令流中发送给每个图像渲染设备的指令,多个图像渲染设备只需并行执行接收到的指令,减少了多个图像渲染设备对接收到的指令进行划分所耗费的资源,进一步减少了多个图像渲染设备的负载。
在一种可选的示例中,发送至不同的图像渲染设备的指令用于渲染不同的渲染对象,所述渲染对象包含于所述渲染图像中。
其中,渲染对象可以由渲染图像中的一个或多个三维图形确定。例如,该三维图形可以是球体、长方体等。
这些用于渲染同一个渲染对象的多个指令一般是按照一定的执行顺序执行的,这些指令中的某些指令的输出参数值,需要作为其它指令的输入参数值。如果将用于渲染同一个渲染对象的多个指令发送至多个图像渲染设备上,这多个图像渲染设备之间需要相互等待。本申请中,将用于渲染同一个渲染对象的多个指令发送至一个图像渲染设备上,不同的图像渲染设备所执行的指令之间是相互独立的,使得多个图像渲染设备之间不需要互相等待。
接下来结合附图,对本申请提供的一种图像渲染过程进行详细地介绍:
图6为本申请实施例提供的一种图像渲染过程示意图,该过程可以应用于电子设备,该电子设备可以是图4所示的电子设备。以下涉及的中央处理器,可以是图4中中央处理器401,存储器可以是图4中的存储器404,通信接口可以是图4中的通信接口406,图像渲染设备可以是图4中的图像渲染设备402,中央处理器所运行的应用可以是图4中的应用407。
如图6所示,该方法包括以下步骤:
步骤601:电子设备获取指令流。
其中,所述指令流用于生成渲染图像,不同的指令流用于生成不同的渲染图像,所述指令流包含有多个指令。
在一种示例中,电子设备的中央处理器通过通信接口获取指令流。
比如,用户在终端上输入操作。终端接收到用户的操作后,便基于该操作生成请求或命令。用户操作的终端通过运行安装的应用,对生成的请求或指令进行处理,确定用于生成渲染图像的指令流,并将该指令流发送至电子设备。该电子设备的中央处理器通过通信接口可以接收到用户操作的终端发送的指令流。其中,用户操作的终端与该电子设备不同。
再比如,用户在终端上输入操作。用户操作的终端接收到用户的操作后,便将基于该操作生成的请求或命令,发送至服务器1的通信接口。服务器1的中央处理器通过通信接口接收到该请求或命令后,便通过运行安装的应用,对接收到的请求或命令进行处理,以确定用于生成渲染图像的指令流,并将该指令流发送至电子设备。该电子设备的中央处理器通过通信接口可以接收到服务器1发送的指令流。其中,服务器1与电子设备不同。
在另一种示例中,电子设备的中央处理器通过运行安装的应用,对获取到的请求或命令进行处理,生成指令流。
例如,若电子设备不为用户操作的终端,用户在终端上输入操作。用户操作的终端接收到用户的操作后,便将基于该操作生成的请求或命令发送至电子设备。该电子设备的中央处理器通过通信接口获取到请求或命令后,通过运行安装的应用,对该请求或命令进行处理,生成指令流。
再例如,若电子设备不为用户操作的终端,用户在终端上输入操作。用户操作的终端接收到用户的操作后,便将基于该操作生成的请求或命令通过服务器1转发的方式,将该请求或命令转发至电子设备。该电子设备的中央处理器通过通信接口获取到服务器1转发的请求或命令后,可以通过运行安装的应用,对该请求或命令进行处理,生成指令流。
再例如,若电子设备为用户操作的终端,用户在电子设备上输入操作。电子设备接收到用户的操作后,便基于该操作生成请求或命令。电子设备通过运行安装的应用,对该请求或指令进行处理,确定用于生成渲染图像的指令流。
可选的,步骤602:电子设备判断生成指令流的应用是否与直接进行图像渲染的应用相同。
该判断动作可以是电子设备中的中央处理器执行。直接进行图像渲染的应用的标识可以保存在存储器中。其中,该标识可以为应用的名称、编号等。例如,电子设备的中央处理器判断生成指令流的应用的编号,是否与存储器保存的直接进行图像渲染的应用的编号相同。
在一种示例中,直接进行图像渲染的应用可以是历史接收到的指令流所来自的应用,且这些指令流中包含的大多数指令均需要发送至一个图像渲染设备执行,或,指令流中包含的多个指令发送至多个图像渲染设备后,多个图像渲染设备之间需要互相等待。可以理解的是,这些指令流中包含的大多数指令之间存在依赖关系或需要按照一定的顺序执行。基于这些指令流中包含的多个指令的特性,可以将满足该特性的指令流定义为需要直接进行图像渲染的指令流,而生成该指令流的应用为直接进行图像渲染的应用。
例如,假设电子设备的中央处理器第一次获取到的指令流1来自于应用a,中央处理器第二次获取到的指令流2来自于应用b。中央处理器对该指令流1中包含的多个指令进行处理,确定发送至不同的图像渲染设备的指令。根据发送至不同的图像渲染设备的指令的数量或所需负载,确定该指令流1中包含的大多数指令是否均需要发送至一个图像渲染设备执行。或,根据发送至任一的图像渲染设备的指令在指令流1中对应的输入参数值,是否与发送至其他图像渲染设备的指令在指令流1中对应的输出参数值相同,确定将指令流1中包含的多个指令发送至多个图像渲染设备后,多个图像渲染设备之间是否需要互相等待。
比如,指令流1中包含的指令的总数量为10,预设的比例阈值为0.4。若发送至任一图像渲染设备的指令的数量为5,该数量5与指令流1中包含的指令的总数量10的比值为5/10=0.5。该比值0.5大于预设比例阈值0.4,则确定该指令流1中包含的大多数指令均需要发送至一个图像渲染设备执行。
比如,预设负载阈值为0.7,确定发送至任一图像渲染设备的指令所需的负载为0.8。该负载0.8大于预设负载阈值0.7,则确定该指令流1中包含的大多数指令均需要发送至一个图像渲染设备执行。
再比如,发送至某一的图像渲染设备的指令m在指令流1中对应的输入参数值为p,发送至其他图像渲染设备的指令n在指令流1中对应的输出参数值为p。确定指令m在指令流1中对应的输入参数值p与指令n在指令流1中对应的输出参数值p相同,则确定将指令流1中包含的多个指令发送至多个图像渲染设备后,多个图像渲染设备之间需要互相等待。其中,输入参数信息包括输入参数类型和输入参数值,比如,输入参数类型为颜色,输入参数值为红色;输入参数类型为形状,输入参数值为球体等。可以理解的是,输入参数值为输入参数类型的具体内容,输入参数值p用于指示所述指令m对渲染对象进行渲染时所需的参数值,所述输出参数值p用于指示所述指令n对渲染对象渲染后得到的参数值。
若确定该指令流1中包含的大多数指令均需要发送至一个图像渲染设备执行,或,确定将指令流1中包含的多个指令发送至多个图像渲染设备后,多个图像渲染设备之间需要互相等待,说明该指令流1中包含的多个指令中,大多数指令之间存在依赖关系或需要按照一定的顺序执行,则将生成指令流1的应用a确定为直接进行图像渲染的应用并保存在存储器中。
中央处理器对该指令流2中包含的多个指令进行处理,确定发送至不同的图像渲染设备的指令。基于上述实施例中的方法,确定该指令流2中包含的大多数指令是否需要发送至一个图像渲染设备执行。或基于上述实施例中的方法,确定将指令流2中包含的多个指令发送至多个图像渲染设备后,多个图像渲染设备之间是否需要互相等待。若确定该指令流2中包含的大多数指令不需要发送至一个图像渲染设备执行,或,确定将指令流2中包含的多个指令中,大多数指令之间不存在依赖关系或不需要按照一定的顺序执行,可以将该指令流2中包含的多个指令发送至多个图像渲染设备执行,则中央处理器可以将生成的指令流2的应用b确定为无需直接进行图像渲染的应用。
依次类推,存储器中可以保存一个或多个直接进行图像渲染的应用的标识。其中,该存储器可以与中央处理器位于同一个芯片上,也可以与中央处理器分别位于不同的芯片上。
后续,中央处理器再次获取到指令流时,就可以将生成该指令流的应用的标识与存储器中保存的直接进行图像渲染的应用的标识进行比对,判断生成指令流的应用与保存的直接进行图像渲染的应用是否相同。
如果中央处理器确定生成该指令流的应用与保存的直接进行图像渲染的应用不相同,说明该指令流中包含的多个指令中,大多数指令之间不存在依赖关系或不需要按照一定的顺序执行,则可以执行后续步骤。
如果中央处理器确定生成该指令流的应用与保存的直接进行图像渲染的应用相同,说明该指令流中包含的多个指令中,大多数指令之间存在依赖关系或需要按照一定的顺序执行,则直接通过通信接口将该指令流发送至某一图像渲染设备,该图像渲染设备直接执行该指令流中所包含的多个指令,即直接进行图像渲染。
在另一种示例中,直接进行图像渲染的应用还可以是管理人员预存的。
可选的,存储器中保存的直接进行图像渲染的应用,包括但不限于管理人员预存的应用以及历史接收到的指令流所来自的应用。
由于直接进行图像渲染的应用生成的指令流中,该指令流包含的大多数指令之间存在依赖性,需要按照一定的执行顺序执行,无法被多个图像渲染设备并行执行。通过上述的方法,电子设备在确定生成该指令流的应用与保存的直接进行图像渲染的应用不相同时,才执行后续地将该指令流中多个指令发送至多个图像渲染设备的步骤,避免浪费资源和时间用于将直接渲染的应用生成的指令流中的多个指令发送至多个图像渲染设备。
步骤603:电子设备确定第一指令和第二指令,第一指令为允许被多个图像渲染设备并行运行的指令,第二指令为不允许被多个图像渲染设备并行运行的指令。
步骤603为可选的步骤,一种应用场景中,指令流中的指令均为第一指令,则电子设备无需执行步骤603。
步骤603中的确定动作可以是电子设备的中央处理器执行的,例如,电子设备的中央处理器确定第一指令和第二指令。
电子设备获取的指令流包括的多个指令中包括:允许被多个图像渲染设备并行运行的第一指令,该第一指令通常为多个,多个所述第一指令被发送至不同的图像渲染设备上。可选的,指令流包括的多个指令中还可以包括:不允许被多个图像渲染设备并行运行的第二指令。该第二指令可以是一个,也可以是多个;一个或多个所述第二指令被发送至同一个图像渲染设备上。
其中,此处的“允许被多个图像渲染设备并行运行”可以理解为,不存在依赖关系或无需按照一定的顺序执行,也就是多个指令中的任一第一指令不需要在另一个第一指令执行完成后才执行(即两个第一指令的执行顺序不进行限定),或者可以被并行(同时)执行。“不允许被多个图像渲染设备并行运行”可以理解为,这些指令存在依赖关系或者需要按照一定的顺序执行,或者不可以被并行(同时)执行。
接下来对第一指令和第二指令的特性进行详细介绍。
例如,第一指令满足以下特性:
指令流中包括所述第一指令的深度标识;所述深度标识用于指示所述第一指令用于渲染的渲染对象存在深度值;和/或
在所述指令流中,所述第一指令对应的输入参数值与其它指令的输出参数值无关,例如,所述第一指令对应的输入参数值与其它指令的输出参数值不同。其中,所述输入参数值用于指示所述第一指令对渲染对象进行渲染时所需的参数值,所述输出参数值用于指示所述其它指令对渲染对象渲染后得到的参数值。
该第一指令满足的特性可以理解为“允许被多个图像渲染设备并行运行”所满足的特性。
该深度标识可以表示为数字、字符串等,也可以表示为其他形式的,只要可以唯一标识第一指令用于渲染的渲染对象存在深度值的方式均可以用于本申请实施例中的深度标识。
例如,第二指令满足以下特性:
指令流中包括所述第二指令的无深度值的标识;所述无深度值的标识用于指示所述第二指令用于渲染的渲染对象不存在深度值;和/或
在所述指令流中,所述第二指令对应的输入参数值与其它指令的输出参数值有关,例如,所述第二指令对应的输入参数值与其它指令的输出参数值相同。
该第二指令满足的特性可以理解为“不允许被多个图像渲染设备并行运行”所满足的特性。
该无深度值的标识可以表示为数字、字符串等,也可以表示为其他形式的,只要可以唯一标识第二指令用于渲染的渲染对象不存在深度值的方式均可以用于本申请实施例中的无深度值的标识。
为了方便理解第二指令,以下结合指令流中包含的几种指令进行说明:
根据指令在指令流中所对应的存储区域信息,可以将指令流中包含的多个指令分为以下几种:
深度缓冲区(depth buffer)对应的指令、颜色缓冲器(color buffer)对应的指令、灯光缓冲器(light buffer)对应的指令、着色缓冲器(shader buffer)对应的指令等。
其中,深度缓冲区(depth buffer)对应的指令所用于渲染的渲染对象是存在深度值的,并且在指令流中,会包含深度缓冲区对应的指令的深度标识。如果这些深度缓冲区对应的指令被发送至多个图像渲染设备执行,后续可以基于这些指令所用于渲染的渲染对象的深度值,将多个图像渲染设备的渲染结果合成。
指令流中也可能存在一些指令所用于渲染的渲染对象是不存在深度值的,并且在指令流中,会包含这些指令的无深度值的标识。如果这些指令被发送至多个图像渲染设备执行,则后续无法基于每个渲染对象对应的深度值,将多个图像渲染设备的渲染结果进行合成,以获取渲染图像,导致获取渲染图像的过程非常的复杂。因此,为了保证可以生成渲染图像,或提高生成的渲染图像的效率,可以将所渲染的渲染对象不存在深度值的指令发送至一个图像渲染设备执行。可以理解的是,将在指令流中包括无深度值的标识的指令发送至一个图像渲染设备执行。这一个图像渲染设备可以按照一定的执行顺序(例如,指令的设置时间的顺序,指令在指令流中的位置的顺序)执行,以保证生成渲染图像。
由于指令流中color buffer、light buffer、shader buffer分别对应的指令的输入参数值要根据指令流中其它指令的输出参数值确定。例如,对应的输入参数值与其他指令的输出参数值相同。因此,指令流中color buffer、light buffer、shader buffer分别对应的指令也是需要按照一定的执行顺序执行的指令,这些指令不允许与其它指令同时运行在不同的图像渲染设备上的。可以理解的是,将对应的输入参数值与指令流中其它指令的输出参数值相同的指令,发送至一个图像渲染设备执行。
基于此,可以将上述实施例中的需要按照一定的执行顺序执行的指令(即指令流中未包括该指令的深度标识,和/或,指令流中对应的输入参数值与指令流中其它指令的输出参数值相同的指令),确定为不允许被多个图像渲染设备并行运行的第二指令。可以理解的是,在指令流中,第二指令与其他指令之间存在依赖关系。
例如,将指令流中需要顺序执行的m个指令确定为第二指令,或,将指令流中需要顺序执行的m个指令中执行顺序靠后的m-1个指令,确定为第二指令,其中,m为大于等于2的整数。
再例如,指令流中包含有指令1、指令2和指令3,其中,指令3需要在指令2之后执行,指令2需要在指令1之后执行,则可以将指令2和指令3确定为不允许被多个图像渲染设备并行运行的第二指令,也可以将指令1、指令2和指令3确定为不允许被多个图像渲染设备并行运行的第二指令。
进一步地,可以将上述第一指令所需满足的特性保存在存储器中。后续在图像渲染过程中,中央处理器获取到指令流后,可以针对指令流中所包含的每个指令,判断该指令是否满足存储器中所保存的特性。如果满足,则确定该指令为允许被多个图像渲染设备并行运行的第一指令;如果不满足,则确定该指令为不允许被多个图像渲染设备并行运行的第二指令。
可选的,步骤604:电子设备优化指令流中指令所采用的输入参数值。
步骤604中的优化动作可以是电子设备的中央处理器执行的。例如,电子设备的中央处理器优化指令流中指令所采用的输入参数值。
在一种示例中,对于渲染图像中的某一渲染对象,对于该渲染对象所采用的某一输入参数类型,步骤601获取的指令流中可能会出现重复设置该输入参数类型的输入参数值的情况。渲染对象例如可以是一个或多个三维模型(如,苹果、房子、球体等),输入参数类型例如可以是颜色、纹理等,输入参数值例如可以是红色、水波纹等。
此处的重复设置的多个输入参数值中,可以部分或全部输入参数值相同。也可以所有输入参数值均不同。
比如,渲染对象为球体,输入参数类型为颜色,指令流中针对该球体所采用的颜色,包括的输入参数值分别为:红色、红色、红色。
比如,渲染对象为球体,输入参数类型为颜色,指令流中针对该球体所采用的颜色,包括的输入参数值分别为:红色、绿色、黄色。
比如,渲染对象为球体,输入参数类型为颜色,指令流中针对该球体所采用的颜色,包括的输入参数值分别为:红色、红色、黄色。
当图像渲染设备在执行某一渲染对象对应的多个指令时,如果该指令中包括该渲染对象所采用的输入参数类型对应的多个输入参数值,图像渲染设备会耗费大量的运算资源。例如,针对输入参数类型为颜色,该输入参数类型对应的输入参数值分别为:红色、红色、红色的情况,对于图像渲染设备来说,只需执行一次“红色”即可,另外的两次“红色”无需执行。再例如,针对输入参数类型为颜色,该输入参数类型对应的输入参数值分别为:红色、绿色、黄色的情况,对于图像渲染设备来说,“红色”的执行结果会被“绿色”的执行结果覆盖,“绿色”的执行结果会被“黄色”的执行结果覆盖,则“红色”、“绿色”为两次无效操作。
为了节省进行图像渲染时所耗费的资源,中央处理器可以将渲染图像中包含的至少一个渲染对象所采用的输入参数值进行优化。
例如,对于同一输入参数类型对应的k个输入参数值,该k个输入参数值均相同,可以将重复的输入参数值删除,只保留一个输入参数值,即将k-1个输入参数值删除,只保留一个输入参数值。其中,k为大于等于2的整数。
再例如,在同一输入参数类型对应的k个输入参数值中,只保留最后一个输入参数值,将k-1个输入参数值删除。这种优化方式适用于k个输入参数值为部分或完全相同的情况,也适用于k个输入参数值完全不同的情况。
此处的最后一个,可以是在指令流中的位置为最后一个,或者设置时间上是最后一个。
例如,中央处理器可以按照每个输入参数值的设置时间,将渲染对象所采用的输入参数类型对应的k个输入参数值中,设置时间较早的k-1个输入参数值删除,从而实现对渲染对象所采用的输入参数类型对应的多个输入参数值进行优化。其中,k为大于等于2的整数。
比如,渲染对象为球体,指令流中包括该球体所采用的颜色对应的输入参数值分别为:红色、绿色、黄色,中央处理器获取该球体所采用的颜色对应的每个输入参数值的设置时间,确定红色的设置时间早于绿色的设置时间,绿色的设置时间早于黄色的设置时间。按照每个输入参数值的设置时间,将设置时间较早的两个输入参数值删除,即将指令流中该球体所采用的颜色对应的红色和绿色删除,该球体所采用的输入参数类型只对应黄色这一输入参数值。
由于渲染图像中包含一个或多个渲染对象,针对渲染图像中包含的每个渲染对象,该渲染对象所采用的输入参数值均可以采用上述的方式进行优化。
通过上述实施例的优化,可以得到:
针对渲染图像中的至少一个渲染对象:
在所述指令流中,所述渲染对象所采用的所述输入参数类型对应多个输入参数值;
在发送给每个图像渲染设备的多个指令中,该渲染对象所采用的输入参数类型只对应一个输入参数值。
步骤604与步骤603的先后顺序不进行限制。
步骤605:电子设备根据指令流中的第一信息,将多个指令划分为多个指令集合,该第一信息用于生成渲染对象。
步骤605中的划分动作可以是电子设备的中央处理器执行的。例如,电子设备的中央处理器根据指令流中的第一信息,将所述多个指令划分为多个指令集合。
指令流中所包含的第一信息包括但不限于以下一项或多项:输入参数信息、渲染方法信息、存储区域信息。在本申请的第一指令中包括的第一信息可以是其中的一项或多项。
根据指令流中包括的第一信息,将多个指令划分为多个指令集合,后续可以将多个指令集合发送至多个图像渲染设备。其中,不同的指令集合包括的指令不同,任一渲染对象所对应的所有指令(或大部分指令)属于同一个指令集合,任一指令集合中包括一个或多个指令。
在一种示例中,由于指令流中的第一指令允许被多个图像渲染设备并行运行,第二指令不允许被多个图像渲染设备并行运行,可以只将指令流中的多个第一指令划分为多个指令集合,第二指令不进行指令集合的划分,或者,多个第二指令划分到一个指令集合中。
接下来介绍根据指令流中的第一信息,将多个指令(例如第一指令)划分为多个指令集合的几种示例。
示例1:指令流中包括的第一信息为一项,例如为输入参数信息、或渲染方法信息、或存储区域信息。
例如,中央处理器根据指令流中包括的输入参数信息,将多个指令划分为多个指令集合,其中,任一指令集合中的指令对应的输入参数信息是相同的。
例如,中央处理器根据指令流中包括的渲染方法信息,将多个指令划分为多个指令集合,其中,任一指令集合中的指令对应的渲染方法信息是相同的。
再例如,中央处理器根据指令流中包括的存储区域信息,将多个指令划分为多个指令集合,其中,任一指令集合中的指令对应的存储区域信息时相同的。
示例2:指令流中包括的第一信息为两项或更多项,例如第一信息包括输入参数信息、渲染方法信息、存储区域信息中的两项或三项。
例如,中央处理器可以根据指令流中包括的至少两项第一信息(例如输入参数信息和渲染方法信息,或者,输入参数信息和存储区域信息,或者,存储区域信息和渲染方法信息,或者,输入参数信息、渲染方法信息以及存储区域信息),将多个指令划分为多个指令集合,其中,任一指令集合中的指令对应的该至少两种第一信息相同。
再例如,中央处理器根据所述指令流中的部分第一信息,将所述多个指令划分为多个指令集合;在确定所述多个图像渲染设备负载不均衡的情况下,根据所述指令集合中的另外的部分第一信息,将每个所述指令集合划分为多个指令集合。
比如,中央处理器可以先根据指令流包括的渲染方法信息以及存储区域信息,将多个指令划分为多个指令集合。然后中央处理器根据该多个指令集合,确定多个图像渲染设备是否负载均衡。如果中央处理器确定多个图像渲染设备的负载不均衡,则中央处理器再针对每个指令集合,基于该指令集合中所包含的输入参数信息,将该指令集合继续划分多个指令集合。
再比如:假设指令流中有10个指令,中央处理器先根据指令流包括的渲染方法信息,将该10个指令划分为3个指令集合,该3个指令集合分别A、B、C。当中央处理器根据该A、B、C,确定多个图像渲染设备的负载不均衡时,则中央处理器再基于存储区域信息,将A中的指令继续分为a1和a2两个指令集合,其中,a1和a2的并集为A,a1和a2无交集。中央处理器基于存储区域信息,将B中的指令分为b1和b2两个指令集合,其中,b1和b2的并集为B,b1和b2无交集。中央处理器基于存储区域信息,将C中的指令分为c1、c2和c3三个指令集合,其中,c1和c2和c3的并集为C,c1、c2和c3无交集。
在一种示例中,中央处理器根据所述指令流中的部分第一信息,将所述多个指令划分为多个指令集合;在确定多个图像渲染设备负载均衡的情况下,则无需再根据所述指令集合中的另外的部分第一信息,将每个所述指令集合划分为多个指令集合。
在一种示例中,如果根据所有的第一信息进行指令集合的划分,多个图像渲染设备仍然不能达到负载均衡,则确定该指令流是需要直接进行图像渲染的指令流,将该指令流发送至一个图像渲染设备执行。
由于用于渲染相同渲染对象的多个指令的第一信息一般是相同的,通过上述的方法,在根据指令流中包括的第一信息,将多个指令划分为多个指令集合,可以将用于渲染相同渲染对象的多个指令划分到一个指令集合中,避免将用于生成相同渲染对象的多个指令划分到不同的图像渲染设备上运行。并且由于发送至不同的图像渲染设备的指令集合用于渲染不同的渲染对象,可以保证多个指令集合之间是相互独立的,后续多个图像渲染设备在执行接收到的指令集合中的指令时,不需要互相等待。此外,由于电子设备可以根据指令流中包含的第一信息,将多个指令划分为了多个指令集合,然后将多个指令集合发送到多个图像渲染设备,后续多个图像渲染设备并行执行接收到的指令集合中的指令即可,减少了多个图像渲染设备对接收到的指令进行划分所耗费的资源,进一步减少了多个图像渲染设备的负载。
接下来介绍确定多个图像渲染设备的负载是否均衡的方法。
在一种示例中,为了确定多个图像渲染设备是否负载均衡,中央处理器可以根据多个指令集合,确定一个或多个分配方案。该分配方案用于指示预分配给每个图像渲染设备的指令集合是哪个,每个分配方案是不同的。
例如,以获取到指令集合A、B和C,图像渲染设备分别为图像渲染设备1和图像渲染设备2为例,中央处理器根据指令集合A、B和C,确定多个分配方案。比如,一个分配方案为将指令集合A和B分配给图像渲染设备1,将指令集合C分配给图像渲染设备2。或,一个分配方案为将指令集合A分配给图像渲染设备1,将指令集合B和C分配给图像渲染设备2。或,一个分配方案为将指令集合C分配给图像渲染设备1,将指令集合A和B分配给图像渲染设备2等。
中央处理器确定每个图像渲染设备执行该分配方案中预分配的指令集合的负载。基于该分配方案中每个图像渲染设备分别对应的负载,确定多个图像渲染设备是否负载不均衡。
在一种示例中,任一指令集合的负载可以根据该指令集合中包含的每个指令所需的计算量和/或渲染对象的复杂度确定。
可选的,该渲染对象的复杂度包括但不限于以下的一项或多项:
渲染对象对应的三维模型的顶点数量、渲染对象包含的平面数量、渲染对象的纹理数量。
接下来介绍中央处理器基于分配方案中每个图像渲染设备分别对应的负载,确定多个图像渲染设备的负载是否均衡的多种方式,任一分配方案均可以采用如下的方式来确定是否均衡。
方式A、中央处理器从多个图像渲染设备中确定预设数量的图像渲染设备,获取分配方案中该预设数量的图像渲染设备分别对应的负载。若中央处理器确定任一图像渲染设备对应的负载大于或等于设定阈值,则确定该分配方案无法令图像渲染设备负载均衡;若中央处理器确定每个图像渲染设备对应的负载均小于设定阈值,则确定该分配方案可以令图像渲染设备负载均衡。
当确定每个分配方案均无法令图像渲染设备负载均衡,则中央处理器确定多个图像渲染设备负载不均衡;当确定存在令图像渲染设备负载均衡的分配方案,则中央处理器确定多个图像渲染设备负载均衡。
其中,中央处理器可以随机从多个图像渲染设备中确定预设数量的图像渲染设备,也可以基于图像渲染设备的算力从大到小的顺序,确定排序在前的预设数量的图像渲染设备。
在一种示例中,所述预设数量还根据预先设置的比例值和图像渲染设备的总数量确定。例如,预先设置的比例值为4/5,图像渲染设备的总数量为10,则预设数量为10*4/5=8。
方式B、可以根据多个图像渲染设备的算力的不同,预先从多个图像渲染设备中设置第一图像渲染设备(如,主GPU)以及第二图像渲染设备(如,从GPU)。比如,从GPU1、GPU2和GPU3中,GPU1的算力最高,可以将GPU1确定为第一图像渲染设备,将GPU2和GPU3确定为第二图像渲染设备。然后将第一图像渲染设备的标识和第二图像渲染设备的标识保存在电子设备的存储器中。其中,第一图像渲染设备的标识和第二图像渲染设备的标识,均可以用数字、字母等形式进行表示,也可以采用其他形式表示,只要可以唯一标识该第一图像渲染设备和第二图像渲染设备的表示形式均可用于本申请中。后续中央处理器在基于分配方案中每个图像渲染设备分别对应的负载,确定多个图像渲染设备的负载是否均衡时,可以获取分配方案中第一图像渲染设备和第二图像渲染设备分别对应的负载。若中央处理器确定第一图像渲染设备或第二图像渲染设备分别对应的负载大于或等于设定阈值,则确定该分配方案无法令图像渲染设备负载均衡;若中央处理器确定第一图像渲染设备和第二图像渲染设备分别对应的负载均小于设定阈值,则确定该分配方案可以令图像渲染设备负载均衡。
当确定每个分配方案均无法令图像渲染设备负载均衡,则中央处理器确定多个图像渲染设备负载不均衡;当确定存在令图像渲染设备负载均衡的分配方案,则中央处理器确定多个图像渲染设备负载均衡。
其中,第一图像渲染设备可以是一个也可以是多个,第二图像渲染设备也可以是一个或多个,第一图像渲染设备和第二图像渲染设备是不同的。
其中,该设定阈值可以根据人为经验设置的,也可以是中央处理器根据每个图像渲染设备的算力确定的。具体实施过程中,可以根据实际需求进行灵活设置,在此不做具体限定。
步骤606:电子设备将指令流包含的多个指令发送至多个图像渲染设备。
步骤606中的发送动作可以是电子设备的通信接口执行。例如,电子设备的中央处理器通过通信接口将所述多个指令集合发送至多个图像渲染设备。
发送至不同的图像渲染设备的指令不同。
例如,发送至不同的图像渲染设备的指令可以部分不同,即发送至不同的图像渲染设备的指令之间存在交集,且交集不包含发送至任一图像渲染设备的所有指令。比如,发送给GPU1的指令有指令1~指令5,发送给GPU2的指令有指令3~指令7。
再例如,发送至不同的图像渲染设备的指令可以完全不同,即发送至不同的图像渲染设备的指令之间不存在交集。比如,发送给GPU1的指令有指令1~指令5,发送给GPU2的指令有指令6~指令10。
在一种示例中,如果基于步骤605将指令流中包含的多个指令均进行指令集合的划分,则一个图像渲染设备上可以被发送一个或多个指令集合。该指令集合中可以包括一个或多个指令。比如,指令流中包含的多个指令分别为指令1~指令10,存在两个图像渲染设备,将指令1~指令10均进行指令集合的划分,将指令1~指令3划分为指令集合a,将指令4~指令7划分为指令集合b,将指令8~指令10划分为指令集合c。对于任一图像渲染设备,其可以接收到1个或2个指令集合(例如,接收到指令集合a,或,接收到指令集合a和指令集合b等)。
在一种示例中,如果基于步骤605将指令流中包含的部分指令进行指令集合的划分,另一部分指令不进行指令集合的划分,则一个图像渲染设备上可以被发送一个或多个指令集合,和/或,一个或多个指令。比如,指令流中包含的多个指令分别为指令1~指令10,存在两个图像渲染设备,将指令1~指令7均进行指令集合的划分,将指令1~指令3划分为指令集合a,将指令4~指令5划分为指令集合b,将指令6~指令7划分为指令集合c。对于任一图像渲染设备,其可以接收到1个或2个指令集合(例如,接收到指令集合a,或,接收到指令集合a和指令集合b等),和/或,1个或2个指令(例如,接收到指令8,或,接收到指令8和指令9等)。
在一种示例中,如果不基于步骤605将指令流中包含的多个指令进行指令集合的划分,则一个图像渲染设备上可以被发送一个或多个指令。比如,指令流中包含的多个指令分别为指令1~指令10,存在两个图像渲染设备。对于任一图像渲染设备,其可以接收到一个或多个指令(例如,接收到指令1,或,接收到指令2~指令5等)。
可以理解的是,如果电子设备执行了步骤603,确定了指令流中包含的第一指令和第二指令,则此处的将多个指令集合发送至多个图像渲染设备上,可以是将多个第一指令划分的指令集合发送至多个图像渲染设备上。如果有第二指令,则可以将一个或多个第二指令发送至同一个图像渲染设备上。
其中,该用于处理第二指令的图像渲染设备可以是多个图像渲染设备中的任一个图像渲染设备,也可以是与多个图像渲染设备不同的图像渲染设备。比如,可以将用于处理第二指令的GPU确定为主GPU,用于执行第一指令的多个GPU确定为从GPU等。
通过上述的方法,可以实现多个图像渲染设备并行执行接收到的第一指令,不需要等待其它图像渲染设备的渲染结果,提高了多个图像渲染设备的工作效率,进而提高图像渲染的效率。并且在指令流包含的多个指令中存在一个或多个第二指令时,把该一个或多个第二指令发送至一个图像渲染设备上,让该图像渲染设备在执行第二指令时,无需等待其它图像渲染设备的执行结果。
在一种示例中,上文介绍,通过不同的分配方案,确定多个图像渲染设备对应的负载是否均衡。当中央处理器基于某一分配方案a,确定多个图像渲染设备的负载均衡时,中央处理器可以按照分配方案a中预分配给每个图像渲染设备的指令集合,通过通信接口将每个指令集合发送至预分配的图像渲染设备。
在一种示例中,当指令集合是基于指令流中包含的所有第一信息划分得到的,且中央处理器根据该指令集合所获取到的所有分配方案,也无法令多个图像渲染设备负载不均衡时,中央处理器可以按照某一分配方案,将每个指令集合发送至预分配的图像渲染设备,也可以将该指令流发送至某一图像渲染设备,该图像渲染设备直接执行该指令流中所包含的多个指令,即直接进行图像渲染。
多个图像渲染设备接收到指令后,可以并行执行所接收到的指令。其中,此处的“并行执行”可以理解是多个图像渲染设备接收到指令后,在同一时间执行接收到的指令。例如,多个图像渲染设备接收到指令后,均在T1时刻执行接收到的指令。“并行执行”也可以理解是多个图像渲染设备接收到指令后,任意两个图像渲染设备执行接收到的指令的时间之间的时间间隔小于预设的时长阈值。比如,GPU1和GPU2接收到指令后,GPU1在T1时刻执行接收到的指令,GPU2在T2时刻执行接收到的指令,T1时刻和T2时刻之间的时间及间隔小于预设的时长阈值。
下面以图7所示的图像渲染流程,以电子设备的中央处理器获取到应用1生成的指令流3为例,介绍本申请提供的图像渲染过程。
S701:中央处理器获取到应用1生成的指令流3。
S702:中央处理器判断该应用1是否与保存的直接进行图像渲染的应用相同,若是,执行S703,否则,执行S704。
比如,中央处理器可以通过该应用1的标识,是否与存储器中保存的直接进行图像渲染的应用的标识相同,确定该应用1是否与保存的直接进行图像渲染的应用相同。若确定该应用1的标识与存储器中保存的直接进行图像渲染的应用的标识相同,则确定该应用1与保存的直接进行图像渲染的应用相同。若确定该应用1的标识与存储器中保存的直接进行图像渲染的应用的标识不相同,则确定该应用1与保存的直接进行图像渲染的应用不相同。
S703:中央处理器通过通信接口将该指令流3发送至预设的主GPU,以通过该主GPU对该指令流进行处理,生成该指令流3对应的渲染图像。
S704:中央处理器确定指令流3中包含的允许被多个GPU并行运行的第一指令和不允许被多个GPU并行运行的第二指令。
在一种示例中,中央处理器可以通过如下方式,确定指令流3中包含的允许被多个GPU并行运行的第一指令和不允许被多个GPU并行运行的第二指令:
针对指令流3中包含的每个指令,若确定指令流3中包括该指令的深度标识,且,在指令流3中,该指令对应的输入参数值与其他指令的输出参数值不同,则确定该指令为第一指令。若确定该指令流3中未包括该指令的深度标识,或,在指令流3中,该指令对应的输入参数值与其他指令的输出参数值相同,则确定该指令为第二指令。
S705:中央处理器根据指令流3中包括的渲染方法信息和存储区域信息,将确定的多个第一指令划分为多个指令集合。
可选的,图8为本申请实施例提供的一种划分指令集合的场景示意图。如图8所示,指令流3中包括的渲染方法信息分别有着色器(shader)1、着色器2和着色器3,指令流3中包括的存储区域信息分别有目标(Target)A/B、目标A和目标C。中央处理器根据指令流3中包括的渲染方法信息和存储区域信息,将指令流3中包含的第一指令划分为多个指令集合。其中,渲染方法信息为着色器1,且存储区域信息为目标A/B的指令集合1中包括第一指令a1(draw a1)及其对应的第一信息a1(set a1),第一指令b1(draw b1)及其对应的第一信息b1(set b1)。渲染方法信息为着色器2,且存储区域信息为目标A的指令集合2中包括第一指令a2(draw a2)及其对应的第一信息a2(set a2),第一指令c1(draw c1)及其对应的第一信息c1(set c1)。渲染方法信息为着色器3,且存储区域信息为目标C的指令集合3中包括第一指令b2(draw b2)及其对应的第一信息b2(set b2)。
可选的,为了方便后续对获取到的第一指令进行处理,中央处理器可以将归属于同一指令集合的第一指令依次排列在一起。
可选的,为了进一步减少GPU的负载,中央处理器可以优化指令流3中指令所采用的输入参数值。
在一种可能的实施方式中,中央处理器针对渲染图像中的至少一个渲染对象,获取指令流3中该渲染对象所采用的输入参数类型所对应的输入参数值的数量k。若确定该渲染对象所采用的输入参数类型对应的输入参数值的数量k大于等于2,则按照输入参数值的设置时间顺序,从该输入参数类型所对应的k个输入参数值中,将设置时间较早的k-1个输入参数值删除。
S706:中央处理器根据每个指令集合,确定一个或多个第一分配方案。
其中,该第一分配方案中包括预分配给每个GPU的指令集合,每个第一分配方案是不同的。
比如,以多个GPU分别为GPU1和GPU2为例,获取到的多个指令集合如图8所示分别为:渲染方法信息为着色器1,且存储区域信息为目标A/B的指令集合1、渲染方法信息为着色器2,且存储区域信息为目标A的指令集合2、以及渲染方法信息为着色器3,且存储区域信息为目标C的指令集合3。中央处理器根据指令集合1、指令集合2和指令集合3,确定多个第一分配方案。比如,一个第一分配方案为将指令集合1和2分配给GPU1,将指令集合3分配给GPU2。或,一个第一分配方案为将指令集合1分配给GPU1,将指令集合2和3分配给GPU2。或,一个第一分配方案为将指令集合3分配给GPU1,将指令集合1和2分配给GPU2等。
S707:中央处理器确定是否存在可以令多个GPU负载均衡的第一分配方案,若存在,则执行S708,否则,执行S709。
S708:中央处理器按照该令多个GPU负载均衡的第一分配方案,通过通信接口将预分配给每个GPU的指令集合发送至对应的GPU。
如图9为本申请实施例提供的一种将多个指令集合发送至多个GPU的场景示意图。在获取到图8所示的多个指令集合后,若中央处理器确定存在可以令多个GPU负载均衡的第一分配方案a,则中央处理器可以按照第一分配方案a中预分配给每个图像渲染设备的指令集合,通过通信接口将每个指令集合发送至预分配的图像渲染设备。比如,将图9所示的指令集合1和指令集合2发送至GPU1,将图8所示的指令集合3发送至GPU2。
S709:中央处理器针对每个指令集合,基于指令流3中包括的输入参数信息,将该指令集合划分为多个指令集合。
S710:中央处理器根据S709划分后的每个指令集合,确定一个或多个第二分配方案。
S711:中央处理器确定是否存在可以令多个GPU负载均衡的第二分配方案,若存在,执行S712,否则,执行S703。
S712:中央处理器按照该令多个GPU负载均衡的划分后的分配方案,通过通信接口将预分配给每个GPU的指令集合发送至对应的GPU。
图10为本申请实施例提供的一种将多个指令集合发送至多个GPU的场景示意图。在基于指令流3中包含的输入参数信息,将图8所示的三个指令集合继续划分为5个指令集合后,将第一指令a1及其对应的第一信息a1,以及第一指令a2及其对应的第一信息a2发送至GPU1。将第一指令b1及其对应的第一信息b1,第一指令b2及其对应的第一信息b2、以及第一指令c1及其对应的第一信息c1发送至GPU2。
可选的,如果指令流3中包含有一个或多个第二指令,则可以将该第一或多个第二指令发送至同一个图像渲染设备执行。
S713:用于合成渲染结果的GPU获取到每个GPU的渲染结果后,将每个渲染结果合成,以生成渲染图像。
将多个指令集合发送至多个GPU后,每个GPU执行接收到的指令,得到渲染结果。每个GPU均将得到的渲染结果发送至用于合成渲染结果的GPU。该用于合成渲染结果的GPU可以是多个GPU中的任一个,也可以是除多个GPU之外的其他GPU。用于合成渲染结果的GPU获取到每个GPU的渲染结果后,将每个渲染结果合成,以生成渲染图像。
例如,如图9所示,用于合成渲染结果的GPU为GPU1,GPU1通过执行获取到的指令,得到渲染结果A和C。GPU2通过执行获取到的指令,得到渲染结果B并将该渲染结果发送至GPU1。GPU1基于渲染结果A、B和C,获取渲染图像。
可选的,如果每个GPU所接收到的指令集合是根据输入参数信息划分的,用于合成渲染结果的GPU获取到每个GPU的渲染结果后,可以基于渲染结果中携带的深度信息,将每个渲染结果合成,以生成渲染图像。
其中,基于该指令流3对应的深度信息,将每个渲染结果进行合成属于现有技术,在此不做具体赘述。
例如,如图10所示,用于合成渲染结果的GPU为GPU1,GPU1通过执行获取到的指令,得到渲染结果A1、B1和A1、B1对应的深度信息。GPU2通过执行获取到的指令,得到渲染结果A2、B2、C和A2、B2、C对应的深度信息,并将该渲染结果发送至GPU1。GPU1根据A1、B1对应的深度信息以及A2、B2、C对应的深度信息,将A1、B1、A2、B2和C合成,获取A、B和C。后续基于A、B和C,获取渲染图像。
由于用于合成渲染结果的GPU可以直接基于指令流对应的深度信息,便可以将每个渲染结果进行合成,与多个GPU的架构和算力无关。因此,该多个GPU的架构和算力可以相同也可以不同。比如,该多个GPU的型号不同,或者算力不同。
图11为本申请实施例提供的图像渲染方法的实现模式示意图。如图11所示,本申请提供的多种图像渲染方法,可以在中央处理器运行的操作系统中的图形用户态驱动(如GPU驱动)执行,或者,在中央处理器运行的操作系统之上的图形hook层执行,也可通过中央处理器安装的应用(如通过应用图像接口层)执行。
前文介绍了本申请实施例的方法,下文中将介绍本申请实施例中的装置。方法、装置是基于同一技术构思的,由于方法、装置解决问题的原理相似,因此装置与方法的实施可以相互参见,重复之处不再赘述。
本申请实施例可以根据上述方法示例,对装置进行功能模块的划分,例如,可以对应各个功能划分为各个功能模块,也可以将两个或两个以上的功能集成在一个模块中。这些模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。需要说明的是,本申请实施例中对模块的划分是示意性的,仅仅为一种逻辑功能划分,具体实现时可以有另外的划分方式。
基于与上述方法的同一技术构思,参见图12,提供了一种图像渲染装置1200结构示意图,该装置1200可以包括:处理模块1201,可选的,还包括接收模块1202a、发送模块1202b、存储模块1203。处理模块1201可以分别与存储模块1203和接收模块1202a和发送模块1202b相连,所述存储模块1203也可以与接收模块1202a和发送模块1202b相连。
在一种示例中,上述的接收模块1202a和发送模块1202b也可以集成在一起,定义为收发模块。
在一种示例中,该装置1200可以为电子设备,也可以为应用于电子设备中的芯片或功能单元。该装置1200具有上述方法中电子设备的任意功能,例如,该装置1200能够执行上述图5、图6和图7的方法中由电子设备执行的各个步骤。
所述接收模块1202a,可以执行上述方法实施例中电子设备执行的接收动作。
所述发送模块1202b,可以执行上述方法实施例中电子设备执行的发送动作。
所述处理模块1201,可以执行上述方法实施例中电子设备执行的动作中,除发送动作和接收动作外的其它动作。
在一种示例中,所述处理模块1201,用于通过所述接收模块1202a获取指令流;其中,所述指令流用于生成渲染图像,不同的指令流用于生成不同的渲染图像,所述指令流包括多个指令;通过所述发送模块1202b将所述多个指令发送至多个图像渲染设备,以使所述多个图像渲染设备并行执行所接收到的指令;其中,发送至不同的图像渲染设备的指令不同。
在一种示例中,发送至不同的图像渲染设备的指令用于渲染不同的渲染对象,所述渲染对象包含于所述渲染图像中。
在一种示例中,所述处理模块1201,还用于通过所述发送模块1202b将所述多个指令发送至多个图像渲染设备之前,确定所述指令流包括的多个指令为允许被多个图像渲染设备并行运行的第一指令。
在一种示例中,所述指令流包括的多个指令包括:允许被多个图像渲染设备并行运行的第一指令和不允许被多个图像渲染设备并行运行的第二指令;
多个所述第一指令被发送至不同的图像渲染设备上执行;
一个或多个所述第二指令被发送至同一个图像渲染设备上执行。
在一种示例中,多个所述第一指令的执行顺序不固定。
在一种示例中,所述指令流中包括所述第一指令的深度标识,所述深度标识用于指示所述第一指令用于渲染的渲染对象存在深度值;和/或,在所述指令流中,所述第一指令对应的输入参数值与其它指令的输出参数值不同;其中,所述输入参数值用于指示所述第一指令对渲染对象进行渲染时所需的参数值,所述输出参数值用于指示所述其它指令对渲染对象渲染后得到的参数值。
在一种示例中,针对所述渲染图像中的至少一个渲染对象:
在所述指令流中,所述渲染对象所采用的所述输入参数类型对应多个输入参数值;
发送给每个图像渲染设备的多个指令中,渲染对象所采用的所述输入参数类型对应一个输入参数值。
在一种示例中,所述处理模块1201,具体用于根据所述指令流中的第一信息,将所述多个指令划分为多个指令集合;其中,所述第一信息用于生成渲染对象,任一渲染对象所对应的所有指令属于同一指令集合,不同的指令集合包括的指令不同;通过所述发送模块1202b将多个指令集合发送至多个图像渲染设备;其中,发送至不同的图像渲染设备的指令集合不同。
在一种示例中,所述第一信息包括以下的一个或多个:
输入参数信息、渲染方法信息、存储区域信息;其中,所述存储区域用于存储输出参数信息。
在一种示例中,所述处理模块1201,具体用于根据所述指令流中的部分第一信息,将所述多个指令划分为多个指令集合;在确定所述多个图像渲染设备负载不均衡的情况下,根据所述指令集合中的另外的部分第一信息,将每个所述指令集合划分为多个指令集合。
在一种示例中,所述指令集合的负载是根据所述指令集合中包含的每个指令所需的计算量和/或渲染对象的复杂度确定。
在一种示例中,所述渲染对象的复杂度用于指示以下的一项或多项:所述渲染对象对应的三维模型的顶点数量、所述渲染对象包含的平面数量、所述渲染对象的纹理数量。
在一种示例中,生成所述指令流的应用与保存的直接进行图像渲染的应用不相同。
在一种示例中,所述存储模块1203,可以存储电子设备执行的方法的计算机执行指令,以使处理模块1201和接收模块1202a和发送模块1202b执行上述示例中电子设备执行的方法。
示例的,存储模块可以包括一个或者多个存储器,存储器可以是一个或者多个设备、电路中用于存储程序或者数据的器件。存储模块可以是寄存器、缓存或者RAM等,存储模块可以和处理模块集成在一起。存储模块可以是ROM或者可存储静态信息和指令的其他类型的静态存储设备,存储模块可以与处理模块相独立。
所述收发模块可以是输入或者输出接口、管脚或者电路等。
作为一种可能的产品形态,装置可以由通用处理器(通用处理器也可以称为芯片或芯片系统)来实现。
一种可能的实现方式中,实现应用于电子设备的装置的通用处理器包括:处理电路(处理电路也可以称为处理器);可选的,还包括:与所述处理电路内部连接通信的输入输出接口、存储介质(存储介质也可以称为存储器),所述存储介质用于存储处理电路执行的指令,以执行上述示例中电子设备执行的方法。
图12中的处理模块1201可以通过处理电路来实现。
图12中的接收模块1202a和发送模块1202b可以通过输入输出接口来实现。或者,输入输出接口分为输入接口和输出接口,输入接口执行接收模块的功能,输出接口执行发送模块的功能。
图12中的存储模块1203可以通过存储介质来实现。
作为一种可能的产品形态,本申请实施例的装置,还可以使用下述来实现:一个或多个FPGA(现场可编程门阵列)、PLD(可编程逻辑器件)、控制器、状态机、门逻辑、分立硬件部件、任何其它适合的电路、或者能够执行本申请通篇所描述的各种功能的电路的任意组合。
本申请实施例还提供了一种计算机可读存储介质,存储有计算机程序,该计算机程序被计算机执行时,可以使得所述计算机用于执行上述图像渲染的方法。或者说:所述计算机程序包括用于实现上述图像渲染的方法的指令。
本申请实施例还提供了一种计算机程序产品,包括:计算机程序代码,当所述计算机程序代码在计算机上运行时,使得计算机可以执行上述提供的图像渲染的方法。
本申请实施例还提供了一种图像渲染系统,所述图像渲染系统包括:执行上述图像渲染的方法的电子设备和多个图像渲染设备。
另外,本申请实施例中提及的存储器可以是易失性存储器或非易失性存储器,或可包括易失性和非易失性存储器两者。其中,非易失性存储器可以是只读存储器(Read-Only Memory,ROM)、可编程只读存储器(Programmable ROM,PROM)、可擦除可编程只读存储器(Erasable PROM,EPROM)、电可擦除可编程只读存储器(Electrically EPROM,EEPROM)或闪存。易失性存储器可以是随机存取存储器(Random Access Memory,RAM),其用作外部高速缓存。通过示例性但不是限制性说明,许多形式的RAM可用,例如静态随机存取存储器(Static RAM,SRAM)、动态随机存取存储器(Dynamic RAM,DRAM)、同步动态随机存取存储器(Synchronous DRAM,SDRAM)、双倍数据速率同步动态随机存取存储器(Double Data RateSDRAM,DDR SDRAM)、增强型同步动态随机存取存储器(Enhanced SDRAM,ESDRAM)、同步连接动态随机存取存储器(Synchlink DRAM,SLDRAM)和直接内存总线随机存取存储器(DirectRambus RAM,DR RAM)。应注意,本申请描述的存储器旨在包括但不限于这些和任意其它适合类型的存储器。
本申请实施例中提及的收发器中可以包括单独的发送器,和/或,单独的接收器,也可以是发送器和接收器集成一体。收发器可以在相应的处理器的指示下工作。可选的,发送器可以对应物理设备中发射机,接收器可以对应物理设备中的接收机。
本领域普通技术人员可以意识到,结合本文中所公开的实施例中描述的各方法步骤和单元,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各实施例的步骤及组成。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。本领域普通技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另外,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口、装置或单元的间接耦合或通信连接,也可以是电的,机械的或其它的形式连接。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本申请实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以是两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分,或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(read-only memory,ROM)、随机存取存储器(random access memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
本申请中的“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。字符“/”一般表示前后关联对象是一种“或”的关系。本申请中所涉及的多个,是指两个或两个以上。另外,需要理解的是,在本申请的描述中,“第一”、“第二”等词汇,仅用于区分描述的目的,而不能理解为指示或暗示相对重要性,也不能理解为指示或暗示顺序。
尽管已描述了本申请的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请范围的所有变更和修改。
显然,本领域的技术人员可以对本申请实施例进行各种改动和变型而不脱离本申请实施例的精神和范围。这样,倘若本申请实施例的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包括这些改动和变型在内。
Claims (17)
1.一种图像渲染方法,其特征在于,所述方法包括:
获取指令流;其中,所述指令流用于生成渲染图像,不同的指令流用于生成不同的渲染图像,所述指令流包括多个指令;将所述多个指令发送至多个图像渲染设备,以使所述多个图像渲染设备并行执行所接收到的指令;其中,发送至不同的图像渲染设备的指令不同。
2.如权利要求1所述的方法,其特征在于,发送至不同的图像渲染设备的指令用于渲染不同的渲染对象,所述渲染对象包含于所述渲染图像中。
3.如权利要求1或2所述的方法,其特征在于,所述将所述多个指令发送至多个图像渲染设备之前,包括:
确定所述指令流包括的多个指令为允许被多个图像渲染设备并行运行的第一指令。
4.如权利要求1-3任一项所述的方法,其特征在于,所述指令流包括的多个指令包括:允许被多个图像渲染设备并行运行的第一指令和不允许被多个图像渲染设备并行运行的第二指令;
多个所述第一指令被发送至不同的图像渲染设备上执行;
一个或多个所述第二指令被发送至同一个图像渲染设备上执行。
5.如权利要求4所述的方法,其特征在于,多个所述第一指令的执行顺序不固定。
6.如权利要求4或5所述的方法,其特征在于,所述指令流中包括所述第一指令的深度标识,所述深度标识用于指示所述第一指令用于渲染的渲染对象存在深度值;和/或,
在所述指令流中,所述第一指令对应的输入参数值与其它指令的输出参数值不同;其中,所述输入参数值用于指示所述第一指令对渲染对象进行渲染时所需的参数值,所述输出参数值用于指示所述其它指令对渲染对象渲染后得到的参数值。
7.如权利要求1-6任一项所述的方法,其特征在于,针对所述渲染图像中的至少一个渲染对象:
在所述指令流中,所述渲染对象所采用的所述输入参数类型对应多个输入参数值;
发送给每个图像渲染设备的多个指令中,渲染对象所采用的所述输入参数类型对应一个输入参数值。
8.如权利要求1-7任一项所述的方法,其特征在于,所述将所述多个指令发送至多个图像渲染设备,包括:
根据所述指令流中的第一信息,将所述多个指令划分为多个指令集合;其中,所述第一信息用于生成渲染对象,任一渲染对象所对应的所有指令属于同一指令集合,不同的指令集合包括的指令不同;
将多个指令集合发送至多个图像渲染设备;其中,发送至不同的图像渲染设备的指令集合不同。
9.如权利要求8所述的方法,其特征在于,所述第一信息包括以下的一个或多个:
输入参数信息、渲染方法信息、存储区域信息;其中,所述存储区域用于存储输出参数信息。
10.如权利要求8或9所述的方法,其特征在于,所述根据所述指令流中的第一信息,将所述多个指令划分为多个指令集合,包括:
根据所述指令流中的部分第一信息,将所述多个指令划分为多个指令集合;
在确定所述多个图像渲染设备负载不均衡的情况下,根据所述指令集合中的另外的部分第一信息,将每个所述指令集合划分为多个指令集合。
11.如权利要求10所述的方法,其特征在于,所述指令集合的负载是根据所述指令集合中包含的每个指令所需的计算量和/或渲染对象的复杂度确定。
12.如权利要求11所述的方法,其特征在于,所述渲染对象的复杂度用于指示以下的一项或多项:所述渲染对象对应的三维模型的顶点数量、所述渲染对象包含的平面数量、所述渲染对象的纹理数量。
13.根据权利要求1-10任一项所述的方法,其特征在于,生成所述指令流的应用与保存的直接进行图像渲染的应用不相同。
14.一种图像渲染装置,其特征在于,包括:实现如权利要求1-13任一项所述的方法的功能模块。
15.一种服务器,其特征在于,包括中央处理器;所述中央处理器与存储器耦合;
所述存储器,用于存储计算机程序或指令;
所述中央处理器,用于执行所述存储器中的部分或者全部计算机程序或指令,当所述部分或者全部计算机程序或指令被执行时,用于实现如权利要求1-13任一项所述的方法。
16.一种芯片系统,其特征在于,所述芯片系统包括:处理电路;所述处理电路与存储介质耦合;
所述处理电路,用于执行所述存储介质中的部分或者全部计算机程序或指令,当所述部分或者全部计算机程序或指令被执行时,用于实现如权利要求1-13任一项所述的方法。
17.一种计算机可读存储介质,其特征在于,用于存储计算机程序,所述计算机程序包括用于实现权利要求1-13任一项所述的方法的指令。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110534167.6A CN115375821A (zh) | 2021-05-17 | 2021-05-17 | 一种图像渲染方法、装置及服务器 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110534167.6A CN115375821A (zh) | 2021-05-17 | 2021-05-17 | 一种图像渲染方法、装置及服务器 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115375821A true CN115375821A (zh) | 2022-11-22 |
Family
ID=84059041
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110534167.6A Pending CN115375821A (zh) | 2021-05-17 | 2021-05-17 | 一种图像渲染方法、装置及服务器 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115375821A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116033065A (zh) * | 2022-12-29 | 2023-04-28 | 维沃移动通信有限公司 | 播放方法、装置、电子设备及可读存储介质 |
-
2021
- 2021-05-17 CN CN202110534167.6A patent/CN115375821A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116033065A (zh) * | 2022-12-29 | 2023-04-28 | 维沃移动通信有限公司 | 播放方法、装置、电子设备及可读存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP7000643B2 (ja) | 異種3次元回路スタック、システム、方法および装置 | |
US10210651B2 (en) | Allocation of tiles to processing engines in a graphics processing system | |
WO2022116759A1 (zh) | 图像渲染方法、装置、计算机设备和存储介质 | |
JP6271768B2 (ja) | 共有されるデータチャネルを用いるシェーダパイプライン | |
US11010858B2 (en) | Mechanism to accelerate graphics workloads in a multi-core computing architecture | |
US11908039B2 (en) | Graphics rendering method and apparatus, and computer-readable storage medium | |
US11550632B2 (en) | Facilitating efficient communication and data processing across clusters of computing machines in heterogeneous computing environment | |
EP3353746B1 (en) | Dynamically switching between late depth testing and conservative depth testing | |
EP2946364A1 (en) | Rendering graphics data using visibility information | |
KR20160130629A (ko) | 양안 시차 영상에 대한 렌더링 방법 및 장치 | |
US20170140570A1 (en) | Facilitating efficeint centralized rendering of viewpoint-agnostic graphics workloads at computing devices | |
US10565670B2 (en) | Graphics processor register renaming mechanism | |
US20170154403A1 (en) | Triple buffered constant buffers for efficient processing of graphics data at computing devices | |
CN111667542B (zh) | 适用于人工神经网络的用于处理压缩数据的解压缩技术 | |
CN114972607B (zh) | 加速图像显示的数据传输方法、装置及介质 | |
WO2017039865A1 (en) | Facilitating efficient scheduling of graphics workloads at computing devices | |
US10319068B2 (en) | Texture not backed by real mapping | |
CN110728616A (zh) | 图形处理单元内处理核心的图块分配 | |
CN111737019A (zh) | 一种显存资源的调度方法、装置及计算机存储介质 | |
CN107392836A (zh) | 使用图形处理管线实现的立体多投影 | |
US8907979B2 (en) | Fast rendering of knockout groups using a depth buffer of a graphics processing unit | |
CN117058288A (zh) | 图形处理器及方法、多核图形处理系统、电子装置及设备 | |
CN112423111A (zh) | 图形引擎和适用于播放器的图形处理方法 | |
CN115375821A (zh) | 一种图像渲染方法、装置及服务器 | |
WO2018057091A1 (en) | Static data sharing mechanism for a heterogeneous processing environment |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |