CN114247138B - 图像渲染方法、装置、设备及存储介质 - Google Patents
图像渲染方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN114247138B CN114247138B CN202210176827.2A CN202210176827A CN114247138B CN 114247138 B CN114247138 B CN 114247138B CN 202210176827 A CN202210176827 A CN 202210176827A CN 114247138 B CN114247138 B CN 114247138B
- Authority
- CN
- China
- Prior art keywords
- rendering
- main
- target
- task
- resource
- 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.)
- Active
Links
- 238000009877 rendering Methods 0.000 title claims abstract description 1617
- 238000000034 method Methods 0.000 title claims abstract description 104
- 238000003860 storage Methods 0.000 title claims abstract description 32
- 230000015654 memory Effects 0.000 claims abstract description 35
- 230000004888 barrier function Effects 0.000 claims description 66
- 230000008859 change Effects 0.000 claims description 52
- 230000008569 process Effects 0.000 claims description 25
- 238000004590 computer program Methods 0.000 claims description 24
- 230000005540 biological transmission Effects 0.000 claims description 15
- 230000002829 reductive effect Effects 0.000 abstract description 10
- 238000005516 engineering process Methods 0.000 abstract description 5
- 238000007726 management method Methods 0.000 description 66
- 239000000872 buffer Substances 0.000 description 27
- 230000006870 function Effects 0.000 description 18
- 238000012546 transfer Methods 0.000 description 18
- 238000010586 diagram Methods 0.000 description 17
- 239000000463 material Substances 0.000 description 13
- 238000012545 processing Methods 0.000 description 10
- 238000004891 communication Methods 0.000 description 9
- 239000012634 fragment Substances 0.000 description 7
- 238000013519 translation Methods 0.000 description 6
- 230000009286 beneficial effect Effects 0.000 description 4
- 238000004364 calculation method Methods 0.000 description 3
- 239000000306 component Substances 0.000 description 3
- 239000002184 metal Substances 0.000 description 3
- 238000013473 artificial intelligence Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 238000005286 illumination Methods 0.000 description 2
- 230000008676 import Effects 0.000 description 2
- 230000006872 improvement Effects 0.000 description 2
- 238000013507 mapping Methods 0.000 description 2
- 230000036961 partial effect Effects 0.000 description 2
- 239000000047 product Substances 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- 230000009466 transformation Effects 0.000 description 2
- 230000001131 transforming effect Effects 0.000 description 2
- 230000007704 transition Effects 0.000 description 2
- 230000003139 buffering effect Effects 0.000 description 1
- 238000004422 calculation algorithm Methods 0.000 description 1
- 239000003086 colorant Substances 0.000 description 1
- 238000004040 coloring Methods 0.000 description 1
- 239000008358 core component Substances 0.000 description 1
- 238000005520 cutting process Methods 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 239000012467 final product Substances 0.000 description 1
- 230000002452 interceptive effect Effects 0.000 description 1
- 230000000670 limiting effect Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000005070 sampling Methods 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/005—General purpose rendering architectures
-
- A—HUMAN NECESSITIES
- A63—SPORTS; GAMES; AMUSEMENTS
- A63F—CARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
- A63F13/00—Video games, i.e. games using an electronically generated display having two or more dimensions
- A63F13/50—Controlling the output signals based on the game progress
- A63F13/52—Controlling the output signals based on the game progress involving aspects of the displayed game scene
-
- A—HUMAN NECESSITIES
- A63—SPORTS; GAMES; AMUSEMENTS
- A63F—CARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
- A63F13/00—Video games, i.e. games using an electronically generated display having two or more dimensions
- A63F13/60—Generating or modifying game content before or while executing the game program, e.g. authoring tools specially adapted for game development or game-integrated level editor
- A63F13/63—Generating or modifying game content before or while executing the game program, e.g. authoring tools specially adapted for game development or game-integrated level editor by the player, e.g. authoring using a level editor
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/02—Non-photorealistic rendering
-
- 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
-
- A—HUMAN NECESSITIES
- A63—SPORTS; GAMES; AMUSEMENTS
- A63F—CARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
- A63F2300/00—Features of games using an electronically generated display having two or more dimensions, e.g. on a television screen, showing representations related to the game
- A63F2300/60—Methods for processing data by generating or executing the game program
- A63F2300/66—Methods for processing data by generating or executing the game program for rendering three dimensional images
Landscapes
- Engineering & Computer Science (AREA)
- Computer Graphics (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Multimedia (AREA)
- Image Generation (AREA)
Abstract
本申请实施例公开了一种图像渲染方法、装置、设备及存储介质,应用于云技术,其中,该方法包括:获取关于待渲染的目标图像的N个主渲染任务,以及用于描述执行N个所述主渲染任务分别所需的执行参数的主参数描述信息;调用N个主录制线程,并行将N个所述主参数描述信息分别录制到对应的主渲染命令列表中,得到N个录制后的主渲染命令列表;将N个所述录制后的主渲染命令列表提交至所述渲染平台;所述渲染平台用于根据N个所述录制后的主渲染命令列表,并行执行N个所述主渲染任务,得到所述目标图像。通过本申请能够降低内存和处理器的开销。
Description
技术领域
本申请涉及云技术领域,尤其涉及一种图像渲染方法、装置、设备及存储介质。
背景技术
游戏引擎是指一些已编写好的可编辑游戏系统或者一些交互式实时图像应用程序的核心组件,这些系统为游戏设计者提供各种编写游戏所需的各种工具,其目的在于让游戏设计者能容易和快速地做出游戏程式而不用由零开始。游戏引擎一般包含渲染引擎(即“渲染器”,含二维图像引擎和三维图像引擎)、物理引擎、碰撞检测系统、音效、脚本引擎、电脑动画、人工智能、网络引擎以及场景管理等功能或模块。目前的游戏引擎需要通过生成多层渲染命令列表,来实现对游戏场景中的游戏图像进行渲染,增加了内存和处理器的开销。
发明内容
本申请实施例提供一种图像渲染方法、装置、设备及存储介质,能够降低内存和处理器的开销。
本申请实施例一方面提供一种图像渲染方法,包括:
获取关于待渲染的目标图像的N个主渲染任务,以及用于描述执行N个所述主渲染任务分别所需的执行参数的主参数描述信息; N为正整数;
确定执行N个所述主渲染任务分别所需的主渲染命令列表;所述主渲染命令列表与用于执行所述N个主渲染任务的渲染平台相关联;
调用N个主录制线程,并行将N个所述主参数描述信息分别录制到对应的主渲染命令列表中,得到N个录制后的主渲染命令列表;一个所述录制线程与一个所述主渲染命令列表相对应;
将N个所述录制后的主渲染命令列表提交至所述渲染平台;所述渲染平台用于根据N个所述录制后的主渲染命令列表,并行执行N个所述主渲染任务,得到所述目标图像。
本申请实施例一方面提供一种图像渲染装置,包括:
获取模块,用于获取关于待渲染的目标图像的N个主渲染任务,以及用于描述执行N个所述主渲染任务分别所需的执行参数的主参数描述信息; N为正整数;
确定模块,用于确定执行N个所述主渲染任务分别所需的主渲染命令列表;所述主渲染命令列表与用于执行所述N个主渲染任务的渲染平台相关联;
调用模块,用于调用N个主录制线程,并行将N个所述主参数描述信息分别录制到对应的主渲染命令列表中,得到N个录制后的主渲染命令列表;一个所述录制线程与一个所述主渲染命令列表相对应;
提交模块,用于将N个所述录制后的主渲染命令列表提交至所述渲染平台;所述渲染平台用于根据N个所述录制后的主渲染命令列表,并行执行N个所述主渲染任务,得到所述目标图像。
本申请实施例一方面提供了一种计算机可读存储介质,上述计算机可读存储介质存储有计算机程序,上述计算机程序包括程序指令,上述程序指令当被处理器执行时,以执行上述方法。
本申请实施例一方面提供了一种计算机程序产品,包括计算机程序/指令,所述计算机程序/指令被处理器执行时实现上述方法。
本申请中,计算机设备可以获取待渲染的目标图像的N个主渲染任务,以及用于描述执行N个该主渲染任务分别所需的执行参数的主参数描述信息;该渲染对象是指人物、物品、植物等等,该对象属性信息包括渲染对象的材质、颜色、位置信息等等信息。进一步,计算机设备可以确定执行N个该主渲染任务分别所需的主渲染命令列表,该主渲染命令列表与用于执行该N个主渲染任务的渲染平台相关联,即该主渲染命令列表中的渲染命令能够被渲染平台执行;然后,调用N个主录制线程,并行将N个该主参数描述信息分别录制到对应的主渲染命令列表中,得到N个该主渲染任务分别对应的录制后的主渲染命令列表。进一步,将N个该录制后的主渲染命令列表提交至渲染平台中,该渲染平台用于指示根据N个该录制后的主渲染命令列表,并行执行N个该主渲染任务,得到该目标图像。也就是说,通过将主渲染任务的主参数描述信息录制到与渲染平台相关的主渲染命令列表中,得到录制后的主渲染命令列表,即录制后的主渲染命令列表与渲染平台相关联,录制后的主渲染命令列表能够直接被渲染平台执行,即不需要生成多层主渲染命令列表,不需要对主渲染命令列表执行翻译操作,降低内存和处理器的开销。同时,通过调用N个主录制线程,并行对主渲染命令列表进行录制,可以实现多线程录制,提高对主渲染命令列表的录制效率。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请提供的第一种图像渲染系统的架构示意图;
图2是本申请提供的第二种图像渲染系统的架构示意图;
图3是本申请提供的第一种图像渲染方法的流程示意图;
图4是本申请提供的第二种图像渲染方法的流程示意图;
图5是本申请提供的一种目标主渲染命令列表和次级渲染命令列表的示意图;
图6是本申请提供的一种执行录制后的目标主渲染命令列表的场景示意图;
图7是本申请提供的一种目标主渲染命令列表的示意图;
图8是本申请提供的一种图像渲染方法的场景示意图;
图9是本申请实施例提供的一种图像渲染装置的结构示意图;
图10是本申请实施例提供的一种计算机设备的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
本申请可应用于图像渲染场景,图像渲染场景可以是指游戏应用场景、直播场景以及音视频播放场景等等,其中,游戏场景可以包括云游戏场景,云游戏(Cloud gaming)又可称为游戏点播(gaming on demand),是一种以云计算技术为基础的在线游戏技术。云游戏技术使图形处理与数据运算能力相对有限的轻端设备(thin client)能运行高品质游戏。在云游戏场景下,游戏并不在玩家游戏终端,而是在云端服务器中运行,并由云端服务器将游戏场景渲染为音视频流,通过网络传输给玩家游戏终端。玩家游戏终端无需拥有强大的图形运算与数据处理能力,仅需拥有基本的流媒体播放能力与获取玩家输入指令并发送给云端服务器的能力即可;本申请中的目标图像为音视频流中的任一视频帧。
本申请主要以游戏应用场景为例,对本申请中的图像渲染方法进行说明。目前在对戏场景中的游戏图像进行渲染的过程中,需要游戏引擎生成多层渲染命令列表,来实现对游戏场景中的游戏图像进行渲染,增加了内存和处理器的开销。例如,游戏引擎需要生成两层渲染命令列表,第一层渲染命令列表与渲染平台相关,第二层渲染命令列表与渲染平台无关,第一层渲染命令列表用于将第二渲染命令列表翻译成与渲染平台相关的渲染命令列表,得到翻译后的渲染命令列表,该翻译后的渲染命令列表用于对游戏场景中的游戏图像进行渲染,增加了内存和处理器的开销。基于此问题,本申请提出一种图像渲染方法,该方法具体包括:当需要对游戏应用场景中的某一帧图像进行渲染时,该图像帧可以称为目标图像,计算机设备可以根据渲染对象的对象属性信息,确定待渲染的目标图像的N个主渲染任务,以及用于描述执行N个该主渲染任务分别所需的执行参数的主参数描述信息;该渲染对象是指人物、物品、植物等等,该对象属性信息包括渲染对象的材质、颜色、位置信息等等信息;该主要参数描述信息可以包括执行N个主渲染任务所需要的渲染资源的资源类型、任务属性信息、资源状态变更信息等等信息,任务属性信息包括渲染任务(即渲染对象)的位置信息、材质、尺寸等等,渲染资源包括纹理资源、像素资源、深度资源、贴图资源、蒙版资源等等,资源状态变更信息包括用于对渲染资源进行资源状态变更的信息。
进一步,计算机设备可以确定执行N个该主渲染任务分别所需的主渲染命令列表,该主渲染命令列表与用于执行该N个主渲染任务的渲染平台相关联,即该主渲染命令列表中的渲染命令能够被渲染平台执行;渲染平台可以是指用于执行录制后的主渲染命令列表的平台,然后,调用N个主录制线程,并行将N个该主参数描述信息分别录制到对应的主渲染命令列表中,得到N个该主渲染任务分别对应的录制后的主渲染命令列表;一个该录制线程与一个所述主渲染命令列表相对应。进一步,将N个该录制后的主渲染命令列表提交至渲染平台中,该渲染平台用于指示根据N个该录制后的主渲染命令列表,并行执行N个该主渲染任务,得到该目标图像。也就是说,通过将主渲染任务的主参数描述信息录制到与渲染平台相关的主渲染命令列表中,得到录制后的主渲染命令列表,即录制后的主渲染命令列表与渲染平台相关联,该渲染平台能够直接执行录制后的主渲染命令列表,即不需要生成多层主渲染命令列表,不需要对主渲染命令列表执行翻译操作,降低内存和处理器的开销。同时,通过调用N个主录制线程,并行对主渲染命令列表进行录制,可以实现多线程录制,提高对主渲染命令列表的录制效率。
为了便于更清楚理解本申请,首先介绍实现本申请的图像渲染方法的图像渲染系统,如图1所示,图像渲染系统中包括如图1所示,该图像渲染系统中包括服务器10和终端集群,终端集群可以包括一个或者多个终端,这里将不对终端的数量进行限制。如图1所示,终端集群具体可以包括终端1、终端2、…、终端n;可以理解的是,终端1、终端2、终端3、…、终端n均可以与服务器10进行网络连接,以便于每个终端均可以通过网络连接与服务器10之间进行数据交互。
其中,服务器10可以是指用于为应用程序提供后端服务的设备,如,该服务器可以是指运行或维护应用程序的后端设备。具体的,该服务器10可以用于对渲染命令列表进行录制,执行录制后的渲染命令列表,以实现对图像进行渲染的设备。各个终端可以是指面向用户的设备,终端可以是指用于应用程序提供前端服务的设备,该终端可以用于显示渲染得到的目标图像。此处的应用程序可以是指游戏应用程序、视频播放应用程序、直播应用程序等等用于图像处理的应用程序。
其中,服务器可以是独立的一个物理服务器,也可以是至少两个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、中容分发网络(Content DeliveryNetwork,CDN)、以及大数据和人工智能平台等基础云计算服务的云服务器。终端具体可以是指车载终端、智能手机、平板电脑、笔记本电脑、桌上型电脑、智能音箱、有屏音箱、智能手表等等,但并不局限于此。各个终端以及服务器可以通过有线或无线通信方式进行直接或间接地连接,同时,终端以及服务器的数量可以为一个或至少两个,本申请在此不做限制。
图2为另一种图像渲染系统的结构示意图,如图2中,该图像渲染系统包括多个图像处理器GPU对象管理器,如包括图像管线状态池(Graphics Pipeline State Pool)、命令队列池(Command List Pool)、资源组(Resource Group Pool)和状态管理器(StagingManager),在图像渲染系统中,由各种对象管理器中分配出的GPU资源,由对象管理器维护生命周期,用户创建的GPU资源由用户维护生命周期。
其中,图像管线状态池用于分配出与待渲染的目标图像关联的图像管线状态(Graphics Pipeline State),其中,图像管线状态和计算管线状态(Compute PipelineState)属于图像处理器管线状态,Pipeline State包含了图像渲染管线和计算管线所需的全部状态。图像处理器管线是指数据输入流经的一系列固定阶段;每个阶段都处理传入的数据并将其传递到下一个阶段。最终产品或是一个 2D 栅格绘图图像(图像渲染管线),或是使用计算逻辑和计算操作(计算管线)更新后的资源(缓冲区或图像)。图像处理器管线包括图像渲染管线、计算管线等等,图像渲染管线通过命令缓冲区接收若干染命令(如主渲染命令列表)并绘制 2D / 3D 场景的 2D 光栅化图像。计算管线通过命令缓冲区的待渲染的目标图像相关的渲染命令并处理它们以进行相关的计算工作。
其中,线管布局(Pipeline Layout),用于描述GPU管线绑定的资源,包含了CUP管线用到的所有资源。
其中,GPU资源包括纹理(Texture)、缓存(Buffer)以及状态缓存(StagingBuffer),StagingBuffer继承于Buffer,具备Buffer的所有功能,用于暂存临时数据,可用作命令缓存(Constant Buffer)、临时性的结构缓存(Structured Buffer),用于暂存上传到GPU的数据和从GPU回读的数据等。
其中,GPU资源的视图包括纹理视图(Texture View)和缓存视图(Buffer View),每个视图描述了如何使用资源的全部或某一部分。GPU资源集合:资源组(ResourceGroup),用于减少绑定资源的调用。
其中,GPU渲染过程的描述:渲染通道(RenderPass),GPU渲染过程绑定的输出的集合:帧缓存(Framebuffer)。GPU命令缓冲:主渲染命令列表(Command List)和次级渲染命令列表(Bundle Command List),主渲染命令列表(Command List)和次级渲染命令列表(Bundle Command List)从命令队列池中分配得到。
基于图2中的上述图像渲染系统,图像渲染过程可以包括如下三个阶段:应用程序阶段和几何阶段、光栅化阶段等等。
其中,应用程序阶段包括:A. 获取主渲染任务的场景数据(即任务属性信息),例如摄像机的位置、材质、纹理、视锥体、场景中的模型(渲染对象)以及使用的光源等,B. 为了提高渲染性能,通常需要做一个粗粒度剔除(culling)工作,把那些在场景中不可见的物体剔除出去,这样这些物体就不需要再移交给几何阶段处理;C. 需要设置好每个主渲染任务的所需要的渲染资源以及资源状态变更信息,渲染资源包括但不限于它使用的材质、纹理、着色器shader等;如图2中,着色器包括顶点着色器、表面着色器、域着色器、几何着色器、像素着色器以及计算着色器等等;顶点着色器:主要功能是渲染对象进行坐标变换,将输入渲染对象的局部坐标变换到世界坐标、观察坐标和裁剪坐标。表面着色器和域着色器用于渲染对象进行三角面细分处理,使得离摄像机越近的物体具有更加丰富的细节,而远离摄像机的物体具有较少的细节。几何着色器的输入是完整的图元(比如,点),输出可以是一个或多个其他的图元(比如,三角面),或者不输出任何的图元。像素着色器用来决定屏幕上像素的最终颜色。在这个阶段会进行光照计算以及阴影处理;计算着色器用于对像素进行计算,决定哪些像素需要显示在屏幕上。场景数据和渲染资源、以及资源状态变更信息可以称为主参数描述信息。D、获取执行各个主渲染任务所需的主渲染命令列表,该主渲染命令列表包括多个渲染命令(即绘制命令),将每个主渲染任务对应的主参数描述信息录制到对应主渲染命令列表,也即将主参数描述信息传递给主渲染命令列表中的渲染命令,得到录制后的主渲染命令列表。
其中,几何阶段用于处理所有和我们需要渲染的几何相关的工作。例如:决定需要绘制的图元是什么,怎样绘制,在哪绘制。执行基于录制后的主渲染命令列表,对主渲染任务的顶点坐标变换、光照、裁剪、投影以及屏幕映射,该阶段基于GPU进行运算,在该阶段的末端得到了经过变换和投影之后的顶点坐标、颜色、以及纹理坐标。简而言之,几何阶段的主要工作就是“变换三维顶点坐标”和“光照计算”。
其中,光栅化阶段:主要是决定每个渲染图元中的哪些像素应该被绘制到屏幕上。执行录制后的主渲染命令列表,对上一个阶段得到的逐顶点数据进行插值,然后再进行逐像素处理。即光栅化其实是一种将几何图元变为二维目标图像的过程,该过程主要包含了两部分的工作,光栅化和片元着色。光栅化:决定窗口坐标中的哪些整型栅格区域被基本图元占用,这一部分主要对应着三角形设置和三角形遍历两个阶段通过插值计算完成,这一阶段输出一个片元序列,之后的片元着色器就会对该片元序列进行处理。片元着色:分配一个颜色值和一个深度值到各个区域。
图像渲染过程中的三个阶段可以由服务器来执行,渲染得到目标图像,服务器将目标图像发送至终端,终端对目标图像进行显示。或者,上述图像渲染过程中的三个阶段也可以由终端来执行,渲染得到目标图像,在终端中显示该目标图像。或者,图像渲染过程中的三个阶段可以由服务器和终端共同来执行,服务器将渲染得到的信息发送至终端,终端根据自身渲染得到信息和接收到的信息,确定出目标图像,并显示目标图像。
进一步地,请参见图3,是本申请实施例提供的一种图像渲染方法的流程示意图。如图3所示,该方法可由图1中的终端来执行,也可以由图1中的服务器来执行,还可以由图1中的终端和服务器共同执行,本申请中用于执行该方法的设备可以统称为计算机设备。其中,该图像渲染方法可以包括如下步骤S101~S104:
S101、获取关于待渲染的目标图像的N个主渲染任务,以及用于描述执行N个该主渲染任务分别所需的执行参数的主参数描述信息; N为正整数。
计算机设备可以根据渲染对象的对象属性信息,确定待渲染的目标图像的N个主渲染任务,该渲染对象是指人物、物品、植物等等,该对象属性信息包括渲染对象的尺寸、材质、颜色、位置信息等等信息;例如,可以将具有相同颜色的渲染对象作为同一个主渲染任务,或者,将具有相同材质的渲染对象作为同一个渲染任务,或者,属于同一对象类型的渲染对象作为同一个渲染任务,或者,可以将具有相邻位置关系的渲染对象作为同一个渲染任务。进一步,可以获取N主渲染任务分别对应的着色器源码,着色器源码为执行主渲染任务所需要的代码;对N主渲染任务分别对应的着色器源码进行预编译处理,得到用于描述执行N个该主渲染任务分别所需的执行参数的主参数描述信息。该主要参数描述信息可以包括执行N个主渲染任务所需要的渲染资源的资源类型、任务属性信息、资源状态变更信息等等信息,任务属性信息包括渲染任务(即渲染对象)的位置信息、材质、尺寸等等,渲染资源包括纹理资源、像素资源、深度资源、贴图资源、蒙版资源等等,资源状态变更信息包括用于对渲染资源进行资源状态变更的信息。
S102、确定执行N个该主渲染任务分别所需的主渲染命令列表;该主渲染命令列表与用于执行该N个主渲染任务的渲染平台相关联。
计算机设备可以确定执行N个该主渲染任务分别所需的主渲染命令列表;该主渲染命令列表与用于执行该N个主渲染任务的渲染平台相关联,该主渲染命令列表包括多条渲染命令,以及一个或多个图像应用接口,例如,图像应用接口可以包括资源状态管理接口、开始渲染通道接口、结束渲染通道接口、子渲染通道接口等等,资源状态管理接口用于管理渲染资源的资源状态,开始渲染通道接口用于导入执行主渲染任务所需的外部资源(External Resource),是External Resource的初始生产者且如果一个渲染通道没有其他的依赖,则依赖开始渲染通道接口,结束渲染通道接口用于导出External Resource,是External Resource的最后消费者。子渲染通道接口用于导入子渲染通道所需要的资源,渲染通道(Render Pass)一组图像处理器GPU执行渲染子过程的集合,子渲染通道(Subpass)为一个Render Pass中的子渲染过程,通常表示游戏场景中对一类物体的渲染。
S103、调用N个主录制线程,并行将N个该主参数描述信息分别录制到对应的主渲染命令列表中,得到N个录制后的主渲染命令列表;一个该录制线程与一个该主渲染命令列表相对应。
计算机设备可以调用与N个主渲染任务分别对应的N个主录制线程,并行将N个该主参数描述信息分别录制到对应的主渲染命令列表中,得到N个录制后的主渲染命令列表;通过N个主录制线程,并行对主渲染命令列表进行录制,可实现多线程录制,提高对主渲染命令列表的录制效率。
S104、将N个该录制后的主渲染命令列表提交至该渲染平台,该渲染平台用于根据N个该录制后的主渲染命令列表,并行执行N个该主渲染任务,得到该目标图像。
计算机设备可以将N个该录制后的主渲染命令列表提交至该渲染平台的渲染命令队列,该渲染平台并行执行该渲染命令队列中N个该录制后的主渲染命令列表,以实现并行行执行N个该主渲染任务,得到该目标图像;通过录制得到N录制后的主渲染命令列表,有利于渲染平台实现多线程渲染,提高图像渲染效率。
需要说明的是,用于对主渲染命令列表进行录制的平台,与用于执行录制后的主渲染命令列表的渲染平台属于相同平台,或者,用于对主渲染命令列表进行录制的平台,与用于执行录制后的主渲染命令列表的渲染平台属于不同平台,即可实现跨平台的图像渲染,提高图像渲染的便捷性。
本申请中,计算机设备可以获取待渲染的目标图像的N个主渲染任务,以及用于描述执行N个该主渲染任务分别所需的执行参数的主参数描述信息;该渲染对象是指人物、物品、植物等等,该对象属性信息包括渲染对象的材质、颜色、位置信息等等信息。进一步,计算机设备可以确定执行N个该主渲染任务分别所需的主渲染命令列表,该主渲染命令列表与用于执行该N个主渲染任务的渲染平台相关联,即该主渲染命令列表中的渲染命令能够被渲染平台执行;然后,调用N个主录制线程,并行将N个该主参数描述信息分别录制到对应的主渲染命令列表中,得到N个该主渲染任务分别对应的录制后的主渲染命令列表。进一步,将N个该录制后的主渲染命令列表提交至渲染平台中,该渲染平台用于指示根据N个该录制后的主渲染命令列表,并行执行N个该主渲染任务,得到该目标图像。也就是说,通过将主渲染任务的主参数描述信息录制到与渲染平台相关的主渲染命令列表中,得到录制后的主渲染命令列表,即录制后的主渲染命令列表与渲染平台相关联,录制后的主渲染命令列表能够直接被渲染平台执行,即不需要生成多层主渲染命令列表,不需要对主渲染命令列表执行翻译操作,降低内存和处理器的开销。同时,通过调用N个主录制线程,并行对主渲染命令列表进行录制,可以实现多线程录制,提高对主渲染命令列表的录制效率。
进一步地,请参见图6,是本申请实施例提供的一种图像渲染方法的流程示意图。如图6所示,该方法可由图1中的终端来执行,也可以由图1中的服务器来执行,还可以由图1中的终端和服务器共同执行,本申请中用于执行该方法的设备可以统称为计算机设备。其中,该图像渲染方法可以包括如下步骤S201~S207:
S201、获取关于待渲染的目标图像的N个主渲染任务,以及用于描述执行N个该主渲染任务分别所需的执行参数的主参数描述信息; N为正整数。
S202、确定执行N个该主渲染任务分别所需的主渲染命令列表;该主渲染命令列表与用于执行该N个主渲染任务的渲染平台相关联。
S203、获取属于目标主渲染任务的任务属性信息;该目标主渲染任务属于N个该主渲染任务。
本申请中,计算机设备可以获取属于目标主渲染任务的任务属性信息,该目标任务属性信息包括该目标主渲染任务的渲染对象对应的对象属性信息,对象属性信息包括颜色信息、材质信息、尺寸信息以及位置信息等等。该目标主渲染任务可以是指N个主渲染任务中的任一主渲染任务。
S204、根据该任务属性信息确定该目标主渲染任务对应的目标主参数描述信息的录制方式。
本申请中,计算机设备可以根据该任务属性信息确定关于该目标主渲染任务的执行信息,执行信息包括执行时长、所需的渲染命令条数、复杂度等等,根据该执行信息确定该目标主渲染任务对应的目标主参数描述信息的录制方式。
可选的,步骤S204可以包括:根据所述任务属性信息确定执行所述目标主渲染任务所需的渲染命令的命令条数,若所述命令条数大于条数阈值,则确定所述目标主参数描述信息的录制方式为并行录制方式;若所述命令条数小于或等于所述条数阈值,则确定所述目标主参数描述信息的录制方式为串行录制方式。
计算机设备可以根据该任务属性信息确定执行该目标主渲染任务所需的渲染命令的命令条数,若该命令条数大于条数阈值,则确定该目标主参数描述信息的录制方式为并行录制方式,并执行步骤S205;通过并行对目标主参数描述信息进行录制,可以提高录制效率。若所述命令条数小于或等于所述条数阈值,则确定所述目标主参数描述信息的录制方式为串行录制方式,并执行步骤S206,即采用一个主录制线程对目标主参数描述信息进行录制,减少调用主录制线程的数量,可节省资源。
可选的,计算机设备可以根据该任务属性信息确定执行该目标主渲染任务的执行时长,若执行时长大于时长阈值,则确定该目标主参数描述信息的录制方式为并行录制方式,并执行步骤S205;通过并行对目标主参数描述信息进行录制,缩短录制时长,可以提高录制效率。若执行时长小于或等于时长阈值,则确定所述目标主参数描述信息的录制方式为串行录制方式,并执行步骤S206,即采用一个主录制线程对目标主参数描述信息进行录制,减少调用主录制线程的数量,可节省资源。
S205、若该目标主参数描述信息的录制方式为并行录制方式,则根据目标主录制线程,并行将该目标主参数描述信息录制至该目标主渲染任务对应的主渲染命令列表中,得到该目标主渲染任务对应的录制后的目标主渲染命令列表;该目标主录制线程为N个该主录制线程中用于对该目标主渲染任务对应的主渲染命令列表进行录制的主录制线程。
本申请中,若该目标主参数描述信息的录制方式为并行录制方式,则根据目标主录制线程,并行将该目标主参数描述信息录制至该目标主渲染任务对应的主渲染命令列表中,得到该目标主渲染任务对应的录制后的目标主渲染命令列表;通过并行录制方式,对主渲染命令列表进行录制,可以提高录制效率。
可选的,上述步骤S205包括:若该目标主参数描述信息的录制方式为并行录制方式,则获取由该目标主渲染任务划分得到的M个子渲染任务,以及执行M个该子渲染任务分别所需要的次级渲染命令列表;该次级渲染命令列表与该目标主渲染任务对应的主渲染命令列表之间具有继承关系,从该目标主参数描述信息中确定出执行M个该子渲染任务所需的次级参数描述信息,根据该目标主录制线程、M个该子渲染任务对应的次级渲染命令列表,并行将M个该子渲染任务对应的次级参数描述信息,录制至该目标主渲染任务对应的主渲染命令列表中,得到该目标主渲染任务对应的录制后的目标主渲染命令列表。
具体的,若该目标主参数描述信息的录制方式为并行录制方式,则计算机设备可以按照目标主渲染任务中的渲染对象,确定由该目标主渲染任务划分得到的M个子渲染任务,如一个渲染对象对应一个子渲染任务,或者,同类型的渲染对象对应一个子渲染任务,或者,可以按照目标主渲染任务的区域尺寸,确定由该目标主渲染任务划分得到的M个子渲染任务,即根据区域尺寸对目标主渲染任务对应渲染区域进行划分,得到M个子渲染区域,一个子渲染区域对应一个子渲染任务,M个子渲染区域的尺寸可以相同,也可以不相同。进一步,计算机设备可以获取执行M个该子渲染任务分别所需要的次级渲染命令列表,该次级渲染命令列表与该目标主渲染任务对应的主渲染命令列表之间具有继承关系,级次渲染命令列表可以包括一条或多条渲染命令,一条或多条渲染命令用于实现子渲染任务。然后,从该目标主参数描述信息中确定出执行M个该子渲染任务所需的次级参数描述信息,根据该目标主录制线程、M个该子渲染任务对应的次级渲染命令列表,并行将M个该子渲染任务对应的次级参数描述信息,录制至该目标主渲染任务对应的主渲染命令列表中,得到该目标主渲染任务对应的录制后的目标主渲染命令列表。通过并行录制方式,对主渲染命令列表进行录制,可以提高录制效率。可选的,M个该子渲染任务对应的次级参数描述信息包括M个该子渲染任务分别对应的子任务属性信息,上述根据目标主录制线程、M个该子渲染任务对应的次级渲染命令列表,并行将M个该子渲染任务对应的次级参数描述信息,录制至该目标主渲染任务对应的主渲染命令列表中,得到该目标主渲染任务对应的录制后的目标主渲染命令列表,包括:获取与该目标主录制线程相关联的M个次级录制线程,调用M个该次级录制线程,并行将M个该子渲染任务对应的子任务属性信息分别录制到对应的次级渲染命令列表中,得到M个该子渲染任务分别对应的录制后的次级渲染命令列表;一个该次级录制线程与一个该次级渲染命令列表相对应,将M个该录制后的次级渲染命令列表与该目标主渲染任务对应的主渲染命令列表进行关联,得到该目标主渲染任务对应的录制后的目标主渲染命令列表。
计算机设备可以获取与该目标主录制线程相关联的M个次级录制线程,该M个次级录制线程为与目标主录制线程具有相同或相似功能的线程;调用M个该次级录制线程,并行将M个该子渲染任务对应的子任务属性信息分别录制到对应的次级渲染命令列表中,得到M个该子渲染任务分别对应的录制后的次级渲染命令列表;一个该次级录制线程与一个该次级渲染命令列表相对应;通过多线程录制方式,M个该子渲染任务对应的子任务属性信息,可以提高录制效率;将M个该录制后的次级渲染命令列表与该目标主渲染任务对应的主渲染命令列表进行关联,得到该目标主渲染任务对应的录制后的目标主渲染命令列表,即将M个录制后的次级渲染命令列表提交至主渲染命令列表,通过主渲染命令列表实现统一执行,可以适配多种渲染平台,例如,可以适配支持多线程录制渲染命令列表的场景,以及适配不支持多线程录制渲染命令列表的场景。
可选的,上述将M个该录制后的次级渲染命令列表与该目标主渲染任务对应的主渲染命令列表进行关联,得到该目标主渲染任务对应的录制后的目标主渲染命令列表,包括:获取该目标主渲染任务对应的主渲染命令列表的参数传递接口,以及列表关联接口,将M个该录制后的次级渲染命令列表传入至该参数传递接口,将该列表关联接口与M个该录制后的次级渲染命令列表进行关联,得到该目标主渲染任务对应的录制后的目标主渲染命令列表。
具体的,计算机设备可以获取该目标主渲染任务对应的主渲染命令列表的参数传递接口,以及列表关联接口,该参数传递接口用于导入录制后的次级渲染命令列表的接口,列表关联接口用于导入空参数,可用于与M个录制后的次级命令列表进行关联,该列表关联接口被调用时,可以从参数传递接口中获取M个录制后的次级命令列表。具体的,计算机设备可以将M个该录制后的次级渲染命令列表作为数组参数传入至该参数传递接口,将该列表关联接口与M个该录制后的次级渲染命令列表进行关联,得到该目标主渲染任务对应的录制后的目标主渲染命令列表。通过通用图像应用接口(参数传递接口以及列表关联接口),实现该录制后的次级渲染命令列表与该目标主渲染任务对应的主渲染命令列表进行关联(即绑定),通过主渲染命令列表统一执行该录制后的次级渲染命令列表中的渲染命令,可实现与多种渲染平台适配,即提供一种跨平台的图像应用接口。也就是说,不需要考虑渲染平台之间的差异,参数传递接口以及列表关联接口为一套通用化的原生多线程渲染接口,也即不需要为不同渲染平台设计不同的渲染接口,提高原生多线程渲染接口的适用性和可扩展性。
例如,如图5所示,目标主渲染命令列表包括参数传递接口(ForkBundleCommandLists),以及列表关联接口(JoinBundleCommandListsNGIBundleCommandList), 次级渲染命令列表中包括多条渲染命令,如包括直接绘制命令drawindexed()、间接绘制命令drawindexedindirect(),计算机设备可以将级次渲染列表作为一个参数,录制至主渲染命令列表中的参数传递接口中,目标主渲染命令列表中的列表关联接口的参数为空,得到录制后的目标主渲染命令列表。如图5中,录制后的目标主渲染命令列表的参数传递接口中包括次级渲染命令列表的数量、列表标识等等。列表标识可以是指列表名称(如RHIBundleCommandList**、ppBundleCommandList)、编号等等。次级渲染命令列表与目标主渲染列表之间具有继承关系是指次级渲染命令列表拥有目标主渲染命令列表的部分功能,次级渲染命令列表可以由多线程并行录制,由目标主渲染命令列表合并执行。
例如,如图6中,假设目标主渲染任务包括3个子渲染任务,3个子渲染任务分别对应的次级渲染命令列表为次级渲染命令列表0、次级渲染命令列表1、次级渲染命令列表2;当将次级渲染命令列表1、次级渲染命令列表2、次级渲染命令列表3均录制到目标主渲染命令列表后,可以调用渲染线程,执行录制后的目标主渲染命令列表中的开始渲染通道接口,进入渲染通道。调用任务线程0、任务线程1、任务线程2并行执行录制后的目标主渲染命令列表的参数传递接口中次级渲染命令列表0(录制后的次级渲染命令列表)、次级渲染命令列表1、次级渲染命令列表2,得到执行结0、执行结果1、执行结果2。调用列表关联接口对将执行结0、执行结果1、执行结果2传递到渲染子通道,这些执行结果可以作为渲染子通道的输入,调用任务线程0、任务线程1、任务线程2再次并行执行录制后的目标主渲染命令列表的参数传递接口中次级渲染命令列表0(录制后的次级渲染命令列表)、次级渲染命令列表1、次级渲染命令列表2,直至次级渲染命令列表0(录制后的次级渲染命令列表)、次级渲染命令列表1、次级渲染命令列表2的渲染命令被执行完成,当执行完成时,调用录制后的目标主渲染命令列表的列表关联接口,对最终执行结果进行合并,调用结束渲染通道接口结束渲染操作。
可选的,通过录制后的目标主渲染命令列表中的参数传递接口,以及列表关联接口,可以适配第一渲染平台,该第一渲染为采用图像命令列表接口执行渲染任务的渲染平台;该录制后的目标主渲染命令列表中的参数传递接口用于执行空实现操作,该录制后的目标主渲染命令列表中的列表关联接口用于调用该第一渲染平台中的图像命令列表接口,根据该录制后的目标主渲染命令列表中的M个该录制后的次级渲染命令列表,并执行M个该子渲染任务。通过录制后的目标主渲染命令列表中的参数传递接口,以及列表关联接口,与第二渲染平台适配,也就是说,这一套原生多渲染接口可用于第一渲染平台,实现多线程渲染,提高渲染效率。
例如,该第一渲染平台为D3D12,录制后的目标主渲染命令列表中的参数传递接口,以及列表关联接口分别为ForkBundleCommandLists和JoinBundleCommandLists,第一渲染平台的图像命令列表接口可以为D3D12GraphicsCommandList。ForkBundleCommandLists用于执行空实现操作,空实现操作是指对渲染任务物意义的操作。JoinBundleCommandLists用于调用第一渲染平台底层的D3D12GraphicsCommandList::ExecuteBundle,即该录制后的目标主渲染命令列表中的列表关联接口用于调用该第一渲染平台中的图像命令列表接口,根据该录制后的目标主渲染命令列表中的M个该录制后的次级渲染命令列表,并执行M个该子渲染任务。
可选的,通过录制后的目标主渲染命令列表中的参数传递接口,以及列表关联接口,可以适配第二渲染平台,该第二渲染平台为采用执行命令接口执行渲染任务的渲染平台。该录制后的目标主渲染命令列表中的参数传递接口用于执行空实现操作,该录制后的目标主渲染命令列表中的列表关联接口用于调用该第二渲染平台中的执行命令接口,根据该录制后的目标主渲染命令列表中的M个该录制后的次级渲染命令列表,执行M个该子渲染任务。通过录制后的目标主渲染命令列表中的参数传递接口,以及列表关联接口,与第二渲染平台适配,也就是说,这一套原生多渲染接口可用于第二渲染平台,实现多线程渲染,提高渲染效率。
例如,该第二渲染平台为Vulkan,录制后的目标主渲染命令列表中的参数传递接口,以及列表关联接口分别为ForkBundleCommandLists和JoinBundleCommandLists,第二渲染平台的执行命令接口可以为vkCmdExecuteCommands。ForkBundleCommandLists用于执行空实现操作,JoinBundleCommandLists用于调用第二渲染平台底层的vkCmdExecuteCommands,即该录制后的目标主渲染命令列表中的列表关联接口用于调用该第二渲染平台中的执行命令接口,根据该录制后的目标主渲染命令列表中的M个该录制后的次级渲染命令列表,并执行M个该子渲染任务。
可选的,通过录制后的目标主渲染命令列表中的参数传递接口,以及列表关联接口,可以适配第三渲染平台,该第三渲染平台为采用渲染命令编码接口执行渲染任务的渲染平台,该录制后的目标主渲染命令列表中的参数传递接口用于调用该第三渲染平台的渲染命令编码接口,生成M个渲染命令编码器, M个该渲染命令编码器用于并行对该录制后的目标主渲染命令列表中的M个该录制后的次级渲染命令列表进行编码,得到M个编码后的次级渲染命令列表,该第三渲染平台根据M个该编码后的次级渲染命令列表,执行M个该子渲染任务;一个该渲染命令编码器与一个该录制后的次级渲染命令列表相对应;录制后的目标主渲染命令列表中的列表关联接口用于执行空实现操作。通过录制后的目标主渲染命令列表中的参数传递接口,以及列表关联接口,与第二渲染平台适配,也就是说,这一套原生多渲染接口可用于第二渲染平台,实现多线程渲染,提高渲染效率。
例如,该第三渲染平台为Metal,录制后的目标主渲染命令列表中的参数传递接口,以及列表关联接口分别为ForkBundleCommandLists和JoinBundleCommandLists,该第三渲染平台中渲染命令编码接口为MTLParallelRenderCommandEncoder,在开始渲染通道接口(BeginRenderPass)中调用第三渲染平台的命令缓存中的命令编码器描述信息(即MTLCommandBuffer:: parallelRenderCommandEncoderWithDescriptor)生成渲染命令编码接口(MTLParallelRenderCommandEncoder)。参数传递接口(ForkBundleCommandList)调用渲染命令编码接口生成M个渲染命令编码器(MTLRenderCommandEncoder),M个渲染命令编码器用于分别对M各录制后的次级渲染命令列表(NGIBundleCommandList)进行编码,得到M个编码后的次级渲染命令列表,该第三渲染平台根据M个该编码后的次级渲染命令列表,执行M个该子渲染任务。最后在结束渲染通道接口(EndRenderPass)中中调用MTLParallelRenderCommandEncoder::endEncoding结束本次多线程调用。JoinBundleCommandLists用于执行空实现操作。
可选的,上述获取执行M个所述子渲染任务分别所需要的次级渲染命令列表,包括:获取与该渲染平台关联的M个命令队列池,从M个该命令队列池中,分配出执行M个该子渲染任务分别所需要的次级渲染命令列表;一个该命令队列池与一个次级渲染命令列表相对应。
计算机设备可以获取与该渲染平台关联的M个命令队列池,该命令队列池包括多个用于执行渲染任务的渲染命令,不同渲染命令用于执行不同的渲染任务;因此,计算设备可以从M个该命令队列池中,分配出执行M个该子渲染任务分别所需要的次级渲染命令列表;一个该命令队列池与一个次级渲染命令列表相对应。
可选的,M个该子渲染任务对应的次级参数描述信息还包括资源状态变更信息,该资源状态变更信息用于指示在执行M个该子渲染任务的执行过程中,对渲染资源进行状态变更,该渲染资源为执行该子渲染任务所需要的资源。
第一子渲染任务对应的资源状态变更信息被录制在第一资源状态管理接口的目标屏障中,该第一资源状态管理接口属于所述目标主渲染任务对应的录制后的目标主渲染命令列表,该第一子渲染任务为M个所述子渲染任务中对应的渲染资源为目标渲染资源的子渲染任务。该目标渲染资源为具有图像显示参数的资源,即目标渲染资源为能够用于显示的资源,如该目标渲染资源包括深度资源、纹理资源、蒙版资源、像素资源等等,该目标屏障为用于记录目标渲染资源的资源状态变更信息的函数。
第二子渲染任务对应的资源状态变更信息被录制在第二资源状态管理接口的第一资源屏障中;该第二资源状态管理接口属于该录制后的目标主渲染命令列表,该第二子渲染任务为M个所述子渲染任务中对应的渲染资源为非目标渲染资源的子渲染任务;该非目标渲染资源为不具有图像显示参数的资源,该非目标渲染资源为不能显示的资源,如该非目标渲染资源包括贴图资源;该第一资源屏障为用于记录非目标渲染资源的资源状态变更信息的函数。通过第一资源状态管理接口和第二资源管理接口可实现对不同渲染通道,以及不同之间资源管理,提供了一种易用且高效的资源依赖管理接口,且可支持子渲染通道,可适配多种渲染平台,不需要考虑渲染平台之间的差异,即第一资源状态管理接口和第二资源管理接口为一套通用的资源依赖管理接口。通过对渲染资源的有序管理,可以实现渲染资源复用,提高渲染效率。
其中,渲染通道可以是指一组图像处理器渲染过程,渲染子通道可以是指一组图像处理器渲染过程中的一个渲染过程,例如,一个主渲染任务可以对应一个渲染通道,一个子渲染任务可以对应一个子渲染通道。目标渲染资源和非目标渲染资源可以是指对目标图像进行渲染得到,或者,可以是指对目标图像的相邻帧进行渲染得到,本申请对此不做限定。
例如,第一资源状态管理接口和第二资源管理接口可以适配如下三种渲染平台:
可选的,第一资源状态管理接口可以适配第四渲染平台,该第四渲染平台为采用全局缓存存储该目标渲染资源的渲染平台;全局缓存可以是指片外存储器,全局缓存包括部分帧缓存,帧缓存也可称帧缓存器,它是屏幕所显示画面的一个直接映象,又称为位映射图(Bit Map)或光栅。帧缓存的每一存储单元对应屏幕上的一个像素,整个帧缓存对应一帧图像。块缓存(Tile Memorys)是指第五渲染平台用于优化带宽的存储空间,也可以称为片上存储,片上存储器通常是静态内存,读写速度非常快,但由于它的价格相对较高,通常仅使用较小的片上存储器。而片外存储器通常要大得多。通常帧缓存Framebuffer中的一块会存放于Tile Memory中,避免每次读写都从全局缓存Global Memory中访问,所有读写操作后根据渲染通道RenderPass的配置决定是否将Tile Memory中的渲染资源写入GlobalMemory中、进行多重采样处理MSAA Resolve操作或直接丢弃。
计算机设备通过第一资源管理器对目标资源状态进行资源状态变更,具体的,在该第四渲染平台进入与该目标主渲染任务关联的渲染通道之后,暂停执行该录制后的目标主渲染命令列表的该第一资源状态管理接口中的目标屏障,在该第四渲染平台执行所述第一子主渲染任务关联的子渲染通道时,执行与该目标渲染资源相关的第二资源屏障,以将该全局缓存中的该目标渲染资源的资源状态从当前资源状态,变更为目标资源状态,通过对目标渲染资源的资源状态进行状态变更,由于子渲染通道之间可以调用目标渲染资源,以执行子渲染任务,可实现不同子渲染通道之间的资源依赖管理。
其中,该当前资源状态是指该目标渲染资源在该第一子渲染任务在被执行之前的资源状态,该当前资源状态被记录在该目标屏障中,该第二资源屏障是在执行所述第一子主渲染任务关联的子渲染通道中所插入的,该目标资源状态为所述目标渲染资源在该子渲染通道中的资源状态。
第四渲染平台为D3D12平台,如图5所示,第一资源管理接口可以为开始渲染通道接口(BeginRenderPass),目标屏障为targetBarriers,计算机设备暂停执行(即会忽视)BeginRenderPass中传入的targetBarriers,但将目标渲染资源(TargetResource)在进入渲染通道RenderPass之前的状态(即当前资源状态)。执行渲染通道(RenderPass)中间插入的第一资源屏障(ResourceBarrier),但会直接从目标渲染资源在RenderPass之前的状态跳过可读可写状态(TargetReadWrite)直接转换到目标状态(即需要的资源状态)。同时,如果该RenderPass会执行多重采样处理(MSAA Resolve),在D3D12平台下,这步操作是在结束渲染通道接口EndRenderPass中执行的。
可选的,第一资源状态管理接口可以适配第五渲染平台,该第五渲染平台为采用块缓存存储该目标渲染资源的渲染平台,在该第五渲染平台进入与该目标主渲染任务关联的渲染通道之后,执行该录制后的目标主渲染命令列表的该第一资源状态管理接口中的目标屏障,以将该块缓存中的该目标渲染资源的资源状态变更为可读可写状态,在该第五渲染平台进入与所述第一子主渲染任务关联的子渲染通道时,暂停执行与该目标渲染资源相关的第二资源屏障,该第二资源屏障是在执行所述第一子主渲染任务关联的子渲染通道中所插入的。通过将该块缓存中的该目标渲染资源的资源状态变更为可读可写状态,这样第一子渲染任务被执行的过程中,可从块缓存中读取目标渲染资源或写入目标渲染资源,这样可以在具有块缓存Tile Memory的渲染平台下充分利用Tile Memory。提高块缓存的利用率,并提高目标渲染资源的读写效率。
例如,第五渲染平台可以是指Vulkan平台,如图5所示,第一资源管理接口可以为开始渲染通道接口(BeginRenderPass),目标屏障为targetBarriers,在Vulkan平台下执行BeginRenderPass中传入的targetBarriers,将目标渲染资源的资源状态转为可读可写状态,忽视所有RenderPass(即子渲染通道)中间插入的第二资源屏障,这部分的同步信息在创建RenderPass时通过子渲染通道依赖关系SubpassDependency表示。
可选的,第一资源状态管理接口可以适配第六渲染平台,该第六渲染平台为采用块缓存存储所述目标渲染资源的渲染平台,在该第六渲染平台进入与该目标主渲染任务关联的渲染通道之后,调用资源状态管理驱动,执行该录制后的目标主渲染命令列表的所述第一资源状态管理接口中的目标屏障,将所述块缓存中的目标渲染资源的资源状态变更为可读可写状态;在该第六渲染平台进入所述第一子主渲染任务关联的子渲染通道时,调用资源状态管理驱动,执行与该目标渲染资源相关的第二资源屏障,以将该块缓存中的所述目标渲染资源的资源状态从可读可写资源状态,变更为目标资源状态;该第二资源屏障是在执行所述第一子主渲染任务关联的子渲染通道中所插入的,该目标资源状态为该目标渲染资源在所述子渲染通道中的资源状态。通过资源状态管理驱动自动管理资源依赖关系,可实现高效的资源依赖管理。
例如,第六渲染平台为Metal或OpenGLES3平台,在Metal和OpenGLES3平台下,所有资源的依赖关系由资源状态管理驱动自动管理,上述的第二资源屏障以及目标资源屏障均无需特别处理。具体的,在该第六渲染平台进入与该目标主渲染任务关联的渲染通道之后,调用资源状态管理驱动,执行该录制后的目标主渲染命令列表的该第一资源状态管理接口中的目标屏障,将所述块缓存中的目标渲染资源的资源状态变更为可读可写状态;这样可以通过该渲染通道块缓存中写入目标渲染资源或读取目标渲染资源,可实现高效的渲染资源依赖管理。在该第六渲染平台进入所述第一子主渲染任务关联的子渲染通道时,调用资源状态管理驱动,执行与该目标渲染资源相关的第二资源屏障,以将该块缓存中的所述目标渲染资源的资源状态从可读可写资源状态,变更为目标资源状态;该第二资源屏障是在执行所述第一子主渲染任务关联的子渲染通道中所插入的,该目标资源状态为该目标渲染资源在所述子渲染通道中的资源状态。通过资源状态管理驱动自动管理资源依赖关系,可实现高效的资源依赖管理。
可选的,在该渲染平台进入与该目标主渲染任务关联的渲染通道之前,执行该录制后的目标主渲染命令列表的第二资源状态管理接口的第一资源屏障,以将该非目标渲染资源的资源状态变更为指定资源状态。此处的指定资源状态可以是指用户指定的资源状态。
S206、若该目标主参数描述信息的录制方式为串行录制方式,则调用该目标主录制线程,串行将该目标主参数描述信息录制至该目标主渲染任务对应的主渲染命令列表中,得到该目标主渲染任务对应的录制后的目标主渲染命令列表。
本申请中,若该目标主参数描述信息的录制方式为串行录制方式,则调用该目标主录制线程,串行将该目标主参数描述信息录制至该目标主渲染任务对应的主渲染命令列表中,得到该目标主渲染任务对应的录制后的目标主渲染命令列表;通过串行录制方式,对主渲染命令列表进行录制,可以降低资源消耗。
可选的,步骤S206包括:该目标主渲染任务对应的主参数描述信息包括该目标主渲染任务的主任务属性信息;若该目标主参数描述信息的录制方式为串行录制方式,则调用该目标主录制线程,将该目标主渲染任务的主任务属性信息录制至该目标主渲染任务对应的主渲染命令列表中,得到该目标主渲染任务对应的录制后的目标主渲染命令列表。
该目标主渲染任务对应的主参数描述信息包括该目标主渲染任务的主任务属性信息;若该目标主参数描述信息的录制方式为串行录制方式,则计算机设备可以调用该目标主录制线程,串行将该目标主渲染任务的主任务属性信息录制至该目标主渲染任务对应的主渲染命令列表中,得到该目标主渲染任务对应的录制后的目标主渲染命令列表;这样不需要调用太多录制线程,可以降低资源消耗。
可选的,当该目标主渲染任务对应的主参数描述信息的录制方式为串行录制方式时,该目标主渲染任务对应的主参数描述信息还包括执行该目标主渲染任务所需要的目标渲染资源的资源状态变更信息,该目标主渲染任务对应的资源状态变更信息被录制在该目标主渲染任务对应的录制后的目标主渲染命令列表的第一资源状态管理接口中。如图7所示,该目标主渲染命令列表包括第一资源状态管理接口,第一资源管理接口可以为开始渲染通道接口(BeginRenderPass)。各个渲染平台在进入渲染通道后,可以通过开始渲染通道接口对目标渲染资源进行状态变更,有利于提高资源依赖管理。特别地,当目标主渲染任务需要非目标渲染资源时,该非目标渲染资源的资源状态更新信息可以被录制至在该目标主渲染任务对应的录制后的目标主渲染命令列表的第二资源状态管理接口中;这样可以通过第二资源管理接口对非目标渲染资源的资源状态进行变更,有利于提高资源依赖管理。
S207、将N个该录制后的主渲染命令列表提交至该渲染平台;该渲染平台用于根据N个该录制后的主渲染命令列表,并行执行N个该主渲染任务,得到该目标图像。
本申请中,计算机设备可以获取待渲染的目标图像的N个主渲染任务,以及用于描述执行N个该主渲染任务分别所需的执行参数的主参数描述信息;该渲染对象是指人物、物品、植物等等,该对象属性信息包括渲染对象的材质、颜色、位置信息等等信息。进一步,计算机设备可以确定执行N个该主渲染任务分别所需的主渲染命令列表,该主渲染命令列表与用于执行该N个主渲染任务的渲染平台相关联,即该主渲染命令列表中的渲染命令能够被渲染平台执行;然后,调用N个主录制线程,并行将N个该主参数描述信息分别录制到对应的主渲染命令列表中,得到N个该主渲染任务分别对应的录制后的主渲染命令列表。进一步,将N个该录制后的主渲染命令列表提交至渲染平台中,该渲染平台用于指示根据N个该录制后的主渲染命令列表,并行执行N个该主渲染任务,得到该目标图像。也就是说,通过将主渲染任务的主参数描述信息录制到与渲染平台相关的主渲染命令列表中,得到录制后的主渲染命令列表,即录制后的主渲染命令列表与渲染平台相关联,录制后的主渲染命令列表能够直接被渲染平台执行,即不需要生成多层主渲染命令列表,不需要对主渲染命令列表执行翻译操作,降低内存和处理器的开销。同时,通过调用N个主录制线程,并行对主渲染命令列表进行录制,可以实现多线程录制,提高对主渲染命令列表的录制效率。
如图8所示,以游戏场景为例,对本申请中的图像渲染方法进行说明,该方法包括如下过程:
s1、获取渲染对象的对象属性信息,此处渲染对象为游戏场景中的物品、建筑、虚拟人物、游戏装备等等,该对象属性信息包括渲染对象的尺寸、材质、颜色、位置信息等等。
s2、根据渲染对象的对象属性信息,确定待渲染的目标图像的N个主渲染任务,如将具有相似或相同颜色的渲染对象划分为同一个主渲染任务,或者,将具有相同对象类型的渲染对象划分为同一个主渲染任务,或者,可以将具有阴影的区域作为一个主渲染任务,即阴影渲染任务,将不具有阴影的区域作为另一个主渲染任务,即物体渲染任务。例如,如图8中,渲染对象包括一个虚拟人物50,该虚拟人物的后方具有光源,因此,该虚拟人物50的前方具有阴影区域,可以将该虚拟人物50的渲染阴影区域的任务作为阴影渲染任务,将渲染该虚拟人物50的任务作为物体渲染任务。
s3、获取关于阴影渲染任务的着色器源码以及获取关于物体渲染任务的着色器源码,着色器源码是根据渲染需求编写的源代码,分别对阴影渲染任务的着色器源码和物体渲染任务的着色器源码进行预编译,得到执行该阴影渲染任务、物体渲染任务分别所需要的二进制着色器文件以及主参数描述信息。此处二进制着色器文件是指计算机设备能够识别的代码文件,主参数描述信息也可以称为元信息,该阴影渲染任务对应的主参数描述信息包括执行该阴影渲染任务所需的执行参数,物体渲染任务对应的主参数描述信息包括执行该物体渲染任务所需的执行参数。例如,如表1所示,阴影渲染任务的着色器源码为的名称为ShadowCaster.hlsl,物体渲染任务的着色器源码的名称为Shading.hlsl,对ShadowCaster.hlsl进行预编译得到执行阴影渲染任务所需要的渲染资源,包括推送常量(PushConst)、该推送常量的资源类型为常量缓存(ConstantBuffer);Shading.hlsl进行预编译,得到执行物体渲染任务所需要的渲染资源,包括阴影采样器(shadowSampler)和阴影纹理贴图(ShadowMapTexture),阴影采样器(shadowSampler)、阴影纹理贴图的资源类型分别为采样器状态、2D纹理资源。
表1
s4、创建图像流水线状态(Graphics Pipeline State),在运行时,第一步是先通过预先生成的元信息(即主参数描述信息)创建流水线布局(PipelineLayout),流水线布局作为描述的一部分,参与创建Graphics Pipeline State。其他的描述信息包括渲染通道的实例,顶点输入的布局(InputLayout)、光栅化阶段(RasterizationState)的描述、片元着色阶段的描述(BlendState)、深度测试和蒙版测试阶段的描述(DepthStencilState),在此阶段会分别为ShadowCaster和Shading阶段创建Grpahics Pipeline State。其中,顶点输入的布局是指输入渲染对象的顶点位置信息的过程;对其他阶段的描述参见图2,重复之处不在赘述。
s5、创建主渲染任务执行时所需的资源,渲染时还需要创建一张用于接收像素信息的阴影纹理贴图(ShadowMapTexture),其类型为Texture2D。这个绘制阴影贴图在执行渲染阴影任务时作为深度目标资源DepthTarget使用;在执行渲染物体任务时作为着色器资源ShaderResource使用。
s6、从交换链中获得后置缓存区Backbuffer,Backbuffer是一种存储纹理资源Texture的存储空间,绘制于其上的纹理资源可通过显示Present机制显示到窗口上;交换链是指能够存储渲染操作的组件。
s7、执行该阴影渲染任务、物体渲染任务。该过程总共分成三个阶段,ShadowCaster阶段(执行渲染阴影任务阶段),Shading阶段(执行渲染物体阶段)和提交命令列表command list和呈现Present阶段。ShadowCaster阶段包括准备渲染阴影任务的主渲染命令列表(ShadowCaster command list),绘制阴影贴图。Shading阶段:准备渲染物体任务的主渲染命令列表(Shading command list),通过阴影纹理贴图判断片元是否在阴影中,绘制场景(即物体的像素信息)到backbuffer中。通过在ShadowCaster阶段和Shading阶段通过分配两个不同的主渲染命令列表command list,可对其进行并行录制以及并行执行,有利于实现原生多线程渲染。提交command list和Present阶段:将backbuffer中的内容(资源)显示到屏幕上,需要说明的是,表2中//后面的内容用于对后一行代码进行解释说明。
表2
ShadowCaster阶段,在这个阶段中,如表2中的伪代码所示,阴影纹理贴图作为非目标渲染资源使用,因此在进入对应的RenderPass之前需要通过第二资源状态管理接口的第二资源屏障(此处为线管屏障PipelineBarrier),将阴影纹理贴图的状态从像素着色器的只读状态PixelShader ShaderResource转为可读可写状态 TargetReadWrite,实现易用且高效的资源依赖管理接口。同时为了提升效率,通过分配多个次级渲染命令列表bundlecommand list的方式进行多线程渲染命令录制,最后通过shadowCasterCmdList统一执行,可实现原生多线程渲染接口。这里用到的shadowCasterCmdList和bundle command list,全部是有命令队列池CommandPool中分配出来,无需手动判断其是否在GPU上执行完成释放,可以大大简化用户的使用。
表3
在Shading阶段,如表3中的伪代码所示,阴影纹理贴图将作为像素着色器PixelShader的着色器资源ShaderResource使用,因此在进入对应RenderPass之前需要从ShadowCaster阶段的TragetReadWrite转换为PixelShaderStageBit | ShaderResource(像素着色器只读状态)。而最终输出到屏幕上的backbuffer,则需要从Present状态转换为TargetReadWrite状态用于往其上绘制内容,ShadowCaster阶段和Shading阶段的资源依赖管理,可实现易用且高效的资源依赖管理接口。同样的,为了提升效率,通过分配多个bundle command list的方式进行多线程渲染命令录制,最后通过主渲染命令列表shadingCmdList统一执行,可实现原生多线程渲染接口。这里用到的shadingCmdList和bundle command list,全部是从命令列表池中分配出来,无需手动判断其是否在GPU上执行完成释放,可以大大简化用户的使用。
其中,提交Command List和Present阶段:如表4中中伪代码所示,在准备好Command List(即录制后的主命令列表)之后,需要通过命令队列Command Queue的接口进行提交和Present,渲染得到游戏场景中的一帧目标图像51。表4中的shadowCasterCmdList、 shadingCmdList分别表示,如图8所示,执行shadowCasterCmdList,得到目标图像的阴影区域53,执行shadingCmdList,得到目标图像51中处阴影区域53以外的区域。
表4
请参见图9,是本申请实施例提供的一种图像渲染装置的结构示意图。上述图像渲染装置可以是运行于计算机设备中的一个计算机程序(包括程序代码),例如该图像渲染装置为一个应用软件;该装置可以用于执行本申请实施例提供的方法中的相应步骤。如图9所示,该图像渲染装置可以包括:获取模块901、确定模块902、调用模块903以及提交模块904。
获取模块,用于获取关于待渲染的目标图像的N个主渲染任务,以及用于描述执行N个所述主渲染任务分别所需的执行参数的主参数描述信息; N为正整数;
确定模块,用于确定执行N个所述主渲染任务分别所需的主渲染命令列表;所述主渲染命令列表与用于执行所述N个主渲染任务的渲染平台相关联;
调用模块,用于调用N个主录制线程,并行将N个所述主参数描述信息分别录制到对应的主渲染命令列表中,得到N个录制后的主渲染命令列表;一个所述录制线程与一个所述主渲染命令列表相对应;
提交模块,用于将N个所述录制后的主渲染命令列表提交至所述渲染平台;所述渲染平台用于根据N个所述录制后的主渲染命令列表,并行执行N个所述主渲染任务,得到所述目标图像。
可选的,所述调用N个主录制线程,并行将N个所述主参数描述信息分别录制到对应的主渲染命令列表中,得到N个录制后的主渲染命令列表,包括:
获取属于目标主渲染任务的任务属性信息;所述目标主渲染任务属于N个所述主渲染任务;
根据所述任务属性信息确定所述目标主渲染任务对应的目标主参数描述信息的录制方式;
若所述目标主参数描述信息的录制方式为并行录制方式,则根据目标主录制线程,并行将所述目标主参数描述信息录制至所述目标主渲染任务对应的主渲染命令列表中,得到所述目标主渲染任务对应的录制后的目标主渲染命令列表;所述目标主录制线程为N个所述主录制线程中用于对所述目标主渲染任务对应的主渲染命令列表进行录制的主录制线程;
若所述目标主参数描述信息的录制方式为串行录制方式,则调用所述目标主录制线程,串行将所述目标主参数描述信息录制至所述目标主渲染任务对应的主渲染命令列表中,得到所述目标主渲染任务对应的录制后的目标主渲染命令列表。
可选的,所述若所述目标主参数描述信息的录制方式为并行录制方式,则根据目标主录制线程,并行将所述目标主参数描述信息录制至所述目标主渲染任务对应的主渲染命令列表中,得到所述目标主渲染任务对应的录制后的主渲染命令列表,包括:
若所述目标主参数描述信息的录制方式为并行录制方式,则获取由所述目标主渲染任务划分得到的M个子渲染任务,以及执行M个所述子渲染任务分别所需要的次级渲染命令列表;所述次级渲染命令列表与所述目标主渲染任务对应的主渲染命令列表之间具有继承关系;
从所述目标主参数描述信息中确定出执行M个所述子渲染任务所需的次级参数描述信息;
根据所述目标主录制线程、M个所述子渲染任务对应的次级渲染命令列表,并行将M个所述子渲染任务对应的次级参数描述信息,录制至所述目标主渲染任务对应的主渲染命令列表中,得到所述目标主渲染任务对应的录制后的目标主渲染命令列表。
可选的,M个所述子渲染任务对应的次级参数描述信息包括M个所述子渲染任务分别对应的子任务属性信息;
所述根据目标主录制线程、M个所述子渲染任务对应的次级渲染命令列表,并行将M个所述子渲染任务对应的次级参数描述信息,录制至所述目标主渲染任务对应的主渲染命令列表中,得到所述目标主渲染任务对应的录制后的目标主渲染命令列表,包括:
获取与所述目标主录制线程相关联的M个次级录制线程;
调用M个所述次级录制线程,并行将M个所述子渲染任务对应的子任务属性信息分别录制到对应的次级渲染命令列表中,得到M个所述子渲染任务分别对应的录制后的次级渲染命令列表;一个所述次级录制线程与一个所述次级渲染命令列表相对应;
将M个所述录制后的次级渲染命令列表与所述目标主渲染任务对应的主渲染命令列表进行关联,得到所述目标主渲染任务对应的录制后的目标主渲染命令列表。
可选的,所述将M个所述录制后的次级渲染命令列表与所述目标主渲染任务对应的主渲染命令列表进行关联,得到所述目标主渲染任务对应的录制后的目标主渲染命令列表,包括:
获取所述目标主渲染任务对应的主渲染命令列表的参数传递接口,以及列表关联接口;
将M个所述录制后的次级渲染命令列表传入至所述参数传递接口,将所述列表关联接口与M个所述录制后的次级渲染命令列表进行关联,得到所述目标主渲染任务对应的录制后的目标主渲染命令列表。
可选的,所述渲染平台为采用图像命令列表接口执行渲染任务的第一渲染平台,所述录制后的目标主渲染命令列表中的参数传递接口用于执行空实现操作,所述录制后的目标主渲染命令列表中的列表关联接口用于调用所述第一渲染平台中的图像命令列表接口,根据所述录制后的目标主渲染命令列表中的M个所述录制后的次级渲染命令列表,并执行M个所述子渲染任务。
可选的,所述渲染平台为采用执行命令接口执行渲染任务的第二渲染平台,所述录制后的目标主渲染命令列表中的参数传递接口用于执行空实现操作,所述录制后的目标主渲染命令列表中的列表关联接口用于调用所述第二渲染平台中的执行命令接口,根据所述录制后的目标主渲染命令列表中的M个所述录制后的次级渲染命令列表,执行M个所述子渲染任务。
可选的,所述渲染平台为采用渲染命令编码接口执行渲染任务的第三渲染平台,所述录制后的目标主渲染命令列表中的参数传递接口用于调用所述第三渲染平台的渲染命令编码接口,生成M个渲染命令编码器, M个所述渲染命令编码器用于并行对所述录制后的目标主渲染命令列表中的M个所述录制后的次级渲染命令列表进行编码,得到M个编码后的次级渲染命令列表,所述第三渲染平台根据M个所述编码后的次级渲染命令列表,执行M个所述子渲染任务;一个所述渲染命令编码器与一个所述录制后的次级渲染命令列表相对应;
所述录制后的目标主渲染命令列表中的列表关联接口用于执行空实现操作。
可选的,所述根据所述任务属性信息确定所述目标主参数描述信息的录制方式,包括:
根据所述任务属性信息确定执行所述目标主渲染任务所需的渲染命令的命令条数;
若所述命令条数大于条数阈值,则确定所述目标主参数描述信息的录制方式为并行录制方式;
若所述命令条数小于或等于所述条数阈值,则确定所述目标主参数描述信息的录制方式为串行录制方式。
可选的,所述获取执行M个所述子渲染任务分别所需要的次级渲染命令列表,包括:
获取与所述渲染平台关联的M个命令队列池;
从M个所述命令队列池中,分配出执行M个所述子渲染任务分别所需要的次级渲染命令列表;一个所述命令队列池与一个次级渲染命令列表相对应。
可选的,M个所述子渲染任务对应的次级参数描述信息还包括资源状态变更信息,所述资源状态变更信息用于指示在执行M个所述子渲染任务的执行过程中,对渲染资源进行状态变更;所述渲染资源为执行M个所述子渲染任务分别所需要的资源;
第一子渲染任务对应的资源状态变更信息被录制在第一资源状态管理接口的目标屏障中;所述第一资源状态管理接口属于所述目标主渲染任务对应的录制后的目标主渲染命令列表,所述第一子渲染任务为M个所述子渲染任务中对应的渲染资源为目标渲染资源的子渲染任务;所述目标渲染资源为具有图像显示参数的资源;
第二子渲染任务对应的资源状态变更信息被录制在第二资源状态管理接口的第一资源屏障中;所述第二资源状态管理接口属于所述录制后的目标主渲染命令列表,所述第二子渲染任务为M个所述子渲染任务中对应的渲染资源为非目标渲染资源的子渲染任务;所述非目标渲染资源为不具有图像显示参数的资源。
可选的,所述渲染平台为采用全局缓存存储所述目标渲染资源的第四渲染平台;所述方法还包括:
在所述第四渲染平台进入与所述目标主渲染任务关联的渲染通道之后,暂停执行所述录制后的目标主渲染命令列表的所述第一资源状态管理接口中的目标屏障;
在所述第四渲染平台执行所述第一子主渲染任务关联的子渲染通道时,执行与所述目标渲染资源相关的第二资源屏障,以将所述全局缓存中的所述目标渲染资源的资源状态从当前资源状态,变更为目标资源状态;所述当前资源状态是指所述目标渲染资源在所述第一子渲染任务在被执行之前的资源状态,所述当前资源状态被记录在所述目标屏障中,所述第二资源屏障是在执行所述第一子主渲染任务关联的子渲染通道中所插入的,所述目标资源状态为所述目标渲染资源在所述子渲染通道中的资源状态。
可选的,所述渲染平台为采用块缓存存储所述目标渲染资源的第五渲染平台;所述方法还包括:
在所述第五渲染平台进入与所述目标主渲染任务关联的渲染通道之后,执行所述录制后的目标主渲染命令列表的所述第一资源状态管理接口中的目标屏障,以将所述块缓存中的所述目标渲染资源的资源状态变更为可读可写状态;
在所述第五渲染平台进入与所述第一子主渲染任务关联的子渲染通道时,暂停执行与所述目标渲染资源相关的第二资源屏障;所述第二资源屏障是在执行所述第一子主渲染任务关联的子渲染通道中所插入的。
可选的,所述渲染平台为采用块缓存存储所述目标渲染资源的第六渲染平台;所述方法还包括:
在所述第六渲染平台进入与所述目标主渲染任务关联的渲染通道之后,调用资源状态管理驱动,执行所述录制后的目标主渲染命令列表的所述第一资源状态管理接口中的目标屏障,将所述块缓存中的目标渲染资源的资源状态变更为可读可写状态;
在所述第六渲染平台进入所述第一子主渲染任务关联的子渲染通道时,调用资源状态管理驱动,执行与所述目标渲染资源相关的第二资源屏障,以将所述块缓存中的所述目标渲染资源的资源状态从可读可写资源状态,变更为目标资源状态;所述第二资源屏障是在执行所述第一子主渲染任务关联的子渲染通道中所插入的,所述目标资源状态为所述目标渲染资源在所述子渲染通道中的资源状态。
可选的,在所述渲染平台进入与所述目标主渲染任务关联的渲染通道之前,执行所述录制后的目标主渲染命令列表的第二资源状态管理接口的第一资源屏障,以将所述非目标渲染资源的资源状态变更为指定资源状态。
根据本申请的一个实施例,图3所示的图像渲染方法所涉及的步骤可由图9所示的图像渲染装置中的各个模块来执行。例如,图3中所示的步骤S101可由图9中的获取模块901来执行,图3中所示的步骤S102可由图9中的确定模块902来执行;图3中所示的步骤S103可由图9中的调用模块903来执行;图3中所示的步骤S104可由图9中的提交模块904。
根据本申请的一个实施例,图9所示的图像渲染装置中的各个模块可以分别或全部合并为一个或若干个单元来构成,或者其中的某个(些)单元还可以再拆分为功能上更小的至少两个子单元,可以实现同样的操作,而不影响本申请的实施例的技术效果的实现。上述模块是基于逻辑功能划分的,在实际应用中,一个模块的功能也可以由至少两个单元来实现,或者至少两个模块的功能由一个单元实现。在本申请的其它实施例中,图像渲染装置也可以包括其它单元,在实际应用中,这些功能也可以由其它单元协助实现,并且可以由至少两个单元协作实现。
根据本申请的一个实施例,可以通过在包括中央处理单元(CPU)、随机存取存储介质(RAM)、只读存储介质(ROM)等处理元件和存储元件的例如计算机的通用计算机设备上运行能够执行如图5和图6中所示的相应方法所涉及的各步骤的计算机程序(包括程序代码),来构造如图9中所示的图像渲染装置,以及来实现本申请实施例的图像渲染方法。上述计算机程序可以记载于例如计算机可读记录介质上,并通过计算机可读记录介质装载于上述计算设备中,并在其中运行。
本申请中,计算机设备可以获取待渲染的目标图像的N个主渲染任务,以及用于描述执行N个该主渲染任务分别所需的执行参数的主参数描述信息;该渲染对象是指人物、物品、植物等等,该对象属性信息包括渲染对象的材质、颜色、位置信息等等信息。进一步,计算机设备可以确定执行N个该主渲染任务分别所需的主渲染命令列表,该主渲染命令列表与用于执行该N个主渲染任务的渲染平台相关联,即该主渲染命令列表中的渲染命令能够被渲染平台执行;然后,调用N个主录制线程,并行将N个该主参数描述信息分别录制到对应的主渲染命令列表中,得到N个该主渲染任务分别对应的录制后的主渲染命令列表。进一步,将N个该录制后的主渲染命令列表提交至渲染平台中,该渲染平台用于指示根据N个该录制后的主渲染命令列表,并行执行N个该主渲染任务,得到该目标图像。也就是说,通过将主渲染任务的主参数描述信息录制到与渲染平台相关的主渲染命令列表中,得到录制后的主渲染命令列表,即录制后的主渲染命令列表与渲染平台相关联,录制后的主渲染命令列表能够直接被渲染平台执行,即不需要生成多层主渲染命令列表,不需要对主渲染命令列表执行翻译操作,降低内存和处理器的开销。同时,通过调用N个主录制线程,并行对主渲染命令列表进行录制,可以实现多线程录制,提高对主渲染命令列表的录制效率。
请参见图10,是本申请实施例提供的一种计算机设备的结构示意图。如图10所示,上述计算机设备1000可以包括:处理器1001,网络接口1004和存储器1005,此外,上述计算机设备1000还可以包括:用户接口1003,和至少一个通信总线1002。其中,通信总线1002用于实现这些组件之间的连接通信。其中,用户接口1003可以包括显示屏(Display)、键盘(Keyboard),可选用户接口1003还可以包括标准的有线接口、无线接口。网络接口1004可选的可以包括标准的有线接口、无线接口(如WI-FI接口)。存储器1005可以是高速RAM存储器,也可以是非易失性的存储器(non-volatile memory),例如至少一个磁盘存储器。存储器1005可选的还可以是至少一个在远离前述处理器1001的存储装置。如图10所示,作为一种计算机可读存储介质的存储器1005中可以包括操作系统、网络通信模块、用户接口模块以及设备控制应用程序。
在图10所示的计算机设备1000中,网络接口1004可提供网络通讯功能;而用户接口1003主要用于为媒体中容提供输入的接口;而处理器1001可以用于执行存储器1005中存储的设备控制应用程序,以实现:
获取关于待渲染的目标图像的N个主渲染任务,以及用于描述执行N个所述主渲染任务分别所需的执行参数的主参数描述信息; N为正整数;
确定执行N个所述主渲染任务分别所需的主渲染命令列表;所述主渲染命令列表与用于执行所述N个主渲染任务的渲染平台相关联;
调用N个主录制线程,并行将N个所述主参数描述信息分别录制到对应的主渲染命令列表中,得到N个录制后的主渲染命令列表;一个所述录制线程与一个所述主渲染命令列表相对应;
将N个所述录制后的主渲染命令列表提交至所述渲染平台;所述渲染平台用于根据N个所述录制后的主渲染命令列表,并行执行N个所述主渲染任务,得到所述目标图像。
可选的,所述调用N个主录制线程,并行将N个所述主参数描述信息分别录制到对应的主渲染命令列表中,得到N个录制后的主渲染命令列表,包括:
获取属于目标主渲染任务的任务属性信息;所述目标主渲染任务属于N个所述主渲染任务;
根据所述任务属性信息确定所述目标主渲染任务对应的目标主参数描述信息的录制方式;
若所述目标主参数描述信息的录制方式为并行录制方式,则根据目标主录制线程,并行将所述目标主参数描述信息录制至所述目标主渲染任务对应的主渲染命令列表中,得到所述目标主渲染任务对应的录制后的目标主渲染命令列表;所述目标主录制线程为N个所述主录制线程中用于对所述目标主渲染任务对应的主渲染命令列表进行录制的主录制线程;
若所述目标主参数描述信息的录制方式为串行录制方式,则调用所述目标主录制线程,串行将所述目标主参数描述信息录制至所述目标主渲染任务对应的主渲染命令列表中,得到所述目标主渲染任务对应的录制后的目标主渲染命令列表。
可选的,所述若所述目标主参数描述信息的录制方式为并行录制方式,则根据目标主录制线程,并行将所述目标主参数描述信息录制至所述目标主渲染任务对应的主渲染命令列表中,得到所述目标主渲染任务对应的录制后的主渲染命令列表,包括:
若所述目标主参数描述信息的录制方式为并行录制方式,则获取由所述目标主渲染任务划分得到的M个子渲染任务,以及执行M个所述子渲染任务分别所需要的次级渲染命令列表;所述次级渲染命令列表与所述目标主渲染任务对应的主渲染命令列表之间具有继承关系;
从所述目标主参数描述信息中确定出执行M个所述子渲染任务所需的次级参数描述信息;
根据所述目标主录制线程、M个所述子渲染任务对应的次级渲染命令列表,并行将M个所述子渲染任务对应的次级参数描述信息,录制至所述目标主渲染任务对应的主渲染命令列表中,得到所述目标主渲染任务对应的录制后的目标主渲染命令列表。
可选的,M个所述子渲染任务对应的次级参数描述信息包括M个所述子渲染任务分别对应的子任务属性信息;
所述根据目标主录制线程、M个所述子渲染任务对应的次级渲染命令列表,并行将M个所述子渲染任务对应的次级参数描述信息,录制至所述目标主渲染任务对应的主渲染命令列表中,得到所述目标主渲染任务对应的录制后的目标主渲染命令列表,包括:
获取与所述目标主录制线程相关联的M个次级录制线程;
调用M个所述次级录制线程,并行将M个所述子渲染任务对应的子任务属性信息分别录制到对应的次级渲染命令列表中,得到M个所述子渲染任务分别对应的录制后的次级渲染命令列表;一个所述次级录制线程与一个所述次级渲染命令列表相对应;
将M个所述录制后的次级渲染命令列表与所述目标主渲染任务对应的主渲染命令列表进行关联,得到所述目标主渲染任务对应的录制后的目标主渲染命令列表。
可选的,所述将M个所述录制后的次级渲染命令列表与所述目标主渲染任务对应的主渲染命令列表进行关联,得到所述目标主渲染任务对应的录制后的目标主渲染命令列表,包括:
获取所述目标主渲染任务对应的主渲染命令列表的参数传递接口,以及列表关联接口;
将M个所述录制后的次级渲染命令列表传入至所述参数传递接口,将所述列表关联接口与M个所述录制后的次级渲染命令列表进行关联,得到所述目标主渲染任务对应的录制后的目标主渲染命令列表。
可选的,所述渲染平台为采用图像命令列表接口执行渲染任务的第一渲染平台,所述录制后的目标主渲染命令列表中的参数传递接口用于执行空实现操作,所述录制后的目标主渲染命令列表中的列表关联接口用于调用所述第一渲染平台中的图像命令列表接口,根据所述录制后的目标主渲染命令列表中的M个所述录制后的次级渲染命令列表,并执行M个所述子渲染任务。
可选的,所述渲染平台为采用执行命令接口执行渲染任务的第二渲染平台,所述录制后的目标主渲染命令列表中的参数传递接口用于执行空实现操作,所述录制后的目标主渲染命令列表中的列表关联接口用于调用所述第二渲染平台中的执行命令接口,根据所述录制后的目标主渲染命令列表中的M个所述录制后的次级渲染命令列表,执行M个所述子渲染任务。
可选的,所述渲染平台为采用渲染命令编码接口执行渲染任务的第三渲染平台,所述录制后的目标主渲染命令列表中的参数传递接口用于调用所述第三渲染平台的渲染命令编码接口,生成M个渲染命令编码器, M个所述渲染命令编码器用于并行对所述录制后的目标主渲染命令列表中的M个所述录制后的次级渲染命令列表进行编码,得到M个编码后的次级渲染命令列表,所述第三渲染平台根据M个所述编码后的次级渲染命令列表,执行M个所述子渲染任务;一个所述渲染命令编码器与一个所述录制后的次级渲染命令列表相对应;
所述录制后的目标主渲染命令列表中的列表关联接口用于执行空实现操作。
可选的,所述根据所述任务属性信息确定所述目标主参数描述信息的录制方式,包括:
根据所述任务属性信息确定执行所述目标主渲染任务所需的渲染命令的命令条数;
若所述命令条数大于条数阈值,则确定所述目标主参数描述信息的录制方式为并行录制方式;
若所述命令条数小于或等于所述条数阈值,则确定所述目标主参数描述信息的录制方式为串行录制方式。
可选的,所述获取执行M个所述子渲染任务分别所需要的次级渲染命令列表,包括:
获取与所述渲染平台关联的M个命令队列池;
从M个所述命令队列池中,分配出执行M个所述子渲染任务分别所需要的次级渲染命令列表;一个所述命令队列池与一个次级渲染命令列表相对应。
可选的,M个所述子渲染任务对应的次级参数描述信息还包括资源状态变更信息,所述资源状态变更信息用于指示在执行M个所述子渲染任务的执行过程中,对渲染资源进行状态变更;所述渲染资源为执行M个所述子渲染任务分别所需要的资源;
第一子渲染任务对应的资源状态变更信息被录制在第一资源状态管理接口的目标屏障中;所述第一资源状态管理接口属于所述目标主渲染任务对应的录制后的目标主渲染命令列表,所述第一子渲染任务为M个所述子渲染任务中对应的渲染资源为目标渲染资源的子渲染任务;所述目标渲染资源为具有图像显示参数的资源;
第二子渲染任务对应的资源状态变更信息被录制在第二资源状态管理接口的第一资源屏障中;所述第二资源状态管理接口属于所述录制后的目标主渲染命令列表,所述第二子渲染任务为M个所述子渲染任务中对应的渲染资源为非目标渲染资源的子渲染任务;所述非目标渲染资源为不具有图像显示参数的资源。
可选的,所述渲染平台为采用全局缓存存储所述目标渲染资源的第四渲染平台;所述方法还包括:
在所述第四渲染平台进入与所述目标主渲染任务关联的渲染通道之后,暂停执行所述录制后的目标主渲染命令列表的所述第一资源状态管理接口中的目标屏障;
在所述第四渲染平台执行所述第一子主渲染任务关联的子渲染通道时,执行与所述目标渲染资源相关的第二资源屏障,以将所述全局缓存中的所述目标渲染资源的资源状态从当前资源状态,变更为目标资源状态;所述当前资源状态是指所述目标渲染资源在所述第一子渲染任务在被执行之前的资源状态,所述当前资源状态被记录在所述目标屏障中,所述第二资源屏障是在执行所述第一子主渲染任务关联的子渲染通道中所插入的,所述目标资源状态为所述目标渲染资源在所述子渲染通道中的资源状态。
可选的,所述渲染平台为采用块缓存存储所述目标渲染资源的第五渲染平台;所述方法还包括:
在所述第五渲染平台进入与所述目标主渲染任务关联的渲染通道之后,执行所述录制后的目标主渲染命令列表的所述第一资源状态管理接口中的目标屏障,以将所述块缓存中的所述目标渲染资源的资源状态变更为可读可写状态;
在所述第五渲染平台进入与所述第一子主渲染任务关联的子渲染通道时,暂停执行与所述目标渲染资源相关的第二资源屏障;所述第二资源屏障是在执行所述第一子主渲染任务关联的子渲染通道中所插入的。
可选的,所述渲染平台为采用块缓存存储所述目标渲染资源的第六渲染平台;所述方法还包括:
在所述第六渲染平台进入与所述目标主渲染任务关联的渲染通道之后,调用资源状态管理驱动,执行所述录制后的目标主渲染命令列表的所述第一资源状态管理接口中的目标屏障,将所述块缓存中的目标渲染资源的资源状态变更为可读可写状态;
在所述第六渲染平台进入所述第一子主渲染任务关联的子渲染通道时,调用资源状态管理驱动,执行与所述目标渲染资源相关的第二资源屏障,以将所述块缓存中的所述目标渲染资源的资源状态从可读可写资源状态,变更为目标资源状态;所述第二资源屏障是在执行所述第一子主渲染任务关联的子渲染通道中所插入的,所述目标资源状态为所述目标渲染资源在所述子渲染通道中的资源状态。
可选的,在所述渲染平台进入与所述目标主渲染任务关联的渲染通道之前,执行所述录制后的目标主渲染命令列表的第二资源状态管理接口的第一资源屏障,以将所述非目标渲染资源的资源状态变更为指定资源状态。
本申请中,计算机设备可以获取待渲染的目标图像的N个主渲染任务,以及用于描述执行N个该主渲染任务分别所需的执行参数的主参数描述信息;该渲染对象是指人物、物品、植物等等,该对象属性信息包括渲染对象的材质、颜色、位置信息等等信息。进一步,计算机设备可以确定执行N个该主渲染任务分别所需的主渲染命令列表,该主渲染命令列表与用于执行该N个主渲染任务的渲染平台相关联,即该主渲染命令列表中的渲染命令能够被渲染平台执行;然后,调用N个主录制线程,并行将N个该主参数描述信息分别录制到对应的主渲染命令列表中,得到N个该主渲染任务分别对应的录制后的主渲染命令列表。进一步,将N个该录制后的主渲染命令列表提交至渲染平台中,该渲染平台用于指示根据N个该录制后的主渲染命令列表,并行执行N个该主渲染任务,得到该目标图像。也就是说,通过将主渲染任务的主参数描述信息录制到与渲染平台相关的主渲染命令列表中,得到录制后的主渲染命令列表,即录制后的主渲染命令列表与渲染平台相关联,录制后的主渲染命令列表能够直接被渲染平台执行,即不需要生成多层主渲染命令列表,不需要对主渲染命令列表执行翻译操作,降低内存和处理器的开销。同时,通过调用N个主录制线程,并行对主渲染命令列表进行录制,可以实现多线程录制,提高对主渲染命令列表的录制效率。
应当理解,本申请实施例中所描述的计算机设备1000可执行前文图3以及前文图4所对应实施例中对上述图像渲染方法的描述,也可执行前文图9所对应实施例中对上述图像渲染装置的描述,在此不再赘述。另外,对采用相同方法的有益效果描述,也不再进行赘述。
此外,这里需要指出的是:本申请实施例还提供了一种计算机可读存储介质,且上述计算机可读存储介质中存储有前文提及的图像渲染装置所执行的计算机程序,且上述计算机程序包括程序指令,当上述处理器执行上述程序指令时,能够执行前文图3和图4对应实施例中对上述图像渲染方法的描述,因此,这里将不再进行赘述。另外,对采用相同方法的有益效果描述,也不再进行赘述。对于本申请所涉及的计算机可读存储介质实施例中未披露的技术细节,请参照本申请方法实施例的描述。
作为示例,上述程序指令可被部署在一个计算机设备上执行,或者被部署在一个地点的至少两个计算机设备上执行,又或者,在分布在至少两个地点且通过通信网络互连的至少两个计算机设备上执行,分布在至少两个地点且通过通信网络互连的至少两个计算机设备可以组成区块链网络。
上述计算机可读存储介质可以是前述任一实施例提供的图像渲染装置或者上述计算机设备的中部存储单元,例如计算机设备的硬盘或中存。该计算机可读存储介质也可以是该计算机设备的外部存储设备,例如该计算机设备上配备的插接式硬盘,智能存储卡(smart media card,SMC),安全数字(secure digital,SD)卡,闪存卡(flash card)等。进一步地,该计算机可读存储介质还可以既包括该计算机设备的中部存储单元也包括外部存储设备。该计算机可读存储介质用于存储该计算机程序以及该计算机设备所需的其他程序和数据。该计算机可读存储介质还可以用于暂时地存储已经输出或者将要输出的数据。
本申请实施例的说明书和权利要求书及附图中的术语“第一”、“第二”等是用于区别不同媒体中容,而非用于描述特定顺序。此外,术语“包括”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、装置、产品或设备没有限定于已列出的步骤或模块,而是可选地还包括没有列出的步骤或模块,或可选地还包括对于这些过程、方法、装置、产品或设备固有的其他步骤单元。
本申请实施例还提供了一种计算机程序产品,包括计算机程序/指令,所述计算机程序/指令被处理器执行时实现前文图3和图4对应实施例中对上述图像渲染方法的描述,因此,这里将不再进行赘述。另外,对采用相同方法的有益效果描述,也不再进行赘述。对于本申请所涉及的计算机程序产品的实施例中未披露的技术细节,请参照本申请方法实施例的描述。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
本申请实施例提供的方法及相关装置是参照本申请实施例提供的方法流程图和/或结构示意图来描述的,具体可由计算机程序指令实现方法流程图和/或结构示意图的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。这些计算机程序指令可提供到通用计算机、专用计算机、嵌入式处理机或其他可编程图像渲染设备的处理器以产生一个机器,使得通过计算机或其他可编程图像渲染设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或结构示意图一个方框或多个方框中指定的功能的装置。这些计算机程序指令也可存储在能引导计算机或其他可编程图像渲染设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或结构示意图一个方框或多个方框中指定的功能。这些计算机程序指令也可装载到计算机或其他可编程图像渲染设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或结构示意一个方框或多个方框中指定的功能的步骤。
以上所揭露的仅为本申请较佳实施例而已,当然不能以此来限定本申请之权利范围,因此依本申请权利要求所作的等同变化,仍属本申请所涵盖的范围。
Claims (19)
1.一种图像渲染方法,其特征在于,包括:
获取关于待渲染的目标图像的N个主渲染任务,以及用于描述执行N个所述主渲染任务分别所需的执行参数的主参数描述信息;N为正整数;
确定执行N个所述主渲染任务分别所需的主渲染命令列表;所述主渲染命令列表包括与至少两个渲染平台相关联的通用接口,用于录制主渲染命令列表的录制平台与所述至少两个渲染平台均不相同;
调用N个主录制线程,并行根据N个所述主参数描述信息分别对应的录制方式,将N个所述主参数描述信息分别录制到对应的主渲染命令列表的通用接口中,得到N个录制后的主渲染命令列表;一个所述主录制线程与一个所述主渲染命令列表相对应;所述主参数描述信息对应的录制方式是根据所述主参数描述信息对应的主渲染任务的任务属性信息确定的,所述主参数描述信息对应的录制方式为串行录制方式或并行录制方式;
将N个所述录制后的主渲染命令列表提交至所述渲染平台;所述渲染平台用于根据N个所述录制后的主渲染命令列表,并行执行N个所述主渲染任务,得到所述目标图像;所述渲染平台属于所述至少两个渲染平台中的任一个渲染平台。
2.如权利要求1所述的方法,其特征在于,所述调用N个主录制线程,并行将N个所述主参数描述信息分别录制到对应的主渲染命令列表的通用接口中,得到N个录制后的主渲染命令列表,包括:
获取属于目标主渲染任务的任务属性信息;所述目标主渲染任务属于N个所述主渲染任务;
根据所述任务属性信息确定所述目标主渲染任务对应的目标主参数描述信息的录制方式;
若所述目标主参数描述信息的录制方式为并行录制方式,则根据目标主录制线程,并行将所述目标主参数描述信息录制至所述目标主渲染任务对应的主渲染命令列表的通用接口中,得到所述目标主渲染任务对应的录制后的目标主渲染命令列表;所述目标主录制线程为N个所述主录制线程中用于对所述目标主渲染任务对应的主渲染命令列表进行录制的主录制线程;
若所述目标主参数描述信息的录制方式为串行录制方式,则调用所述目标主录制线程,串行将所述目标主参数描述信息录制至所述目标主渲染任务对应的主渲染命令列表的通用接口中,得到所述目标主渲染任务对应的录制后的目标主渲染命令列表。
3.如权利要求2所述的方法,其特征在于,所述若所述目标主参数描述信息的录制方式为并行录制方式,则根据目标主录制线程,并行将所述目标主参数描述信息录制至所述目标主渲染任务对应的主渲染命令列表的通用接口中,得到所述目标主渲染任务对应的录制后的主渲染命令列表,包括:
若所述目标主参数描述信息的录制方式为并行录制方式,则获取由所述目标主渲染任务划分得到的M个子渲染任务,以及执行M个所述子渲染任务分别所需要的次级渲染命令列表;所述次级渲染命令列表与所述目标主渲染任务对应的主渲染命令列表之间具有继承关系;
从所述目标主参数描述信息中确定出执行M个所述子渲染任务所需的次级参数描述信息;
根据所述目标主录制线程、M个所述子渲染任务对应的次级渲染命令列表,并行将M个所述子渲染任务对应的次级参数描述信息,录制至所述目标主渲染任务对应的主渲染命令列表的通用接口中,得到所述目标主渲染任务对应的录制后的目标主渲染命令列表。
4.如权利要求3所述的方法,其特征在于,M个所述子渲染任务对应的次级参数描述信息包括M个所述子渲染任务分别对应的子任务属性信息;
所述根据目标主录制线程、M个所述子渲染任务对应的次级渲染命令列表,并行将M个所述子渲染任务对应的次级参数描述信息,录制至所述目标主渲染任务对应的主渲染命令列表的通用接口中,得到所述目标主渲染任务对应的录制后的目标主渲染命令列表,包括:
获取与所述目标主录制线程相关联的M个次级录制线程;
调用M个所述次级录制线程,并行将M个所述子渲染任务对应的子任务属性信息分别录制到对应的次级渲染命令列表中,得到M个所述子渲染任务分别对应的录制后的次级渲染命令列表;一个所述次级录制线程与一个所述次级渲染命令列表相对应;
将M个所述录制后的次级渲染命令列表与所述目标主渲染任务对应的主渲染命令列表的通用接口进行关联,得到所述目标主渲染任务对应的录制后的目标主渲染命令列表。
5.如权利要求4所述的方法,其特征在于,所述将M个所述录制后的次级渲染命令列表与所述目标主渲染任务对应的主渲染命令列表的通用接口进行关联,得到所述目标主渲染任务对应的录制后的目标主渲染命令列表,包括:
获取所述目标主渲染任务对应的主渲染命令列表的参数传递接口,以及列表关联接口;所述参数传递接口和所述列表关联接口均属于所述通用接口;
将M个所述录制后的次级渲染命令列表传入至所述参数传递接口,将所述列表关联接口与M个所述录制后的次级渲染命令列表进行关联,得到所述目标主渲染任务对应的录制后的目标主渲染命令列表。
6.如权利要求5所述的方法,其特征在于,所述渲染平台为采用图像命令列表接口执行渲染任务的第一渲染平台,所述录制后的目标主渲染命令列表中的参数传递接口用于执行空实现操作,所述录制后的目标主渲染命令列表中的列表关联接口用于调用所述第一渲染平台中的图像命令列表接口,根据所述录制后的目标主渲染命令列表中的M个所述录制后的次级渲染命令列表,并执行M个所述子渲染任务。
7.如权利要求5所述的方法,其特征在于,所述渲染平台为采用执行命令接口执行渲染任务的第二渲染平台,所述录制后的目标主渲染命令列表中的参数传递接口用于执行空实现操作,所述录制后的目标主渲染命令列表中的列表关联接口用于调用所述第二渲染平台中的执行命令接口,根据所述录制后的目标主渲染命令列表中的M个所述录制后的次级渲染命令列表,执行M个所述子渲染任务。
8.如权利要求5所述的方法,其特征在于,所述渲染平台为采用渲染命令编码接口执行渲染任务的第三渲染平台,所述录制后的目标主渲染命令列表中的参数传递接口用于调用所述第三渲染平台的渲染命令编码接口,生成M个渲染命令编码器,M个所述渲染命令编码器用于并行对所述录制后的目标主渲染命令列表中的M个所述录制后的次级渲染命令列表进行编码,得到M个编码后的次级渲染命令列表,所述第三渲染平台根据M个所述编码后的次级渲染命令列表,执行M个所述子渲染任务;一个所述渲染命令编码器与一个所述录制后的次级渲染命令列表相对应;
所述录制后的目标主渲染命令列表中的列表关联接口用于执行空实现操作。
9.如权利要求2所述的方法,其特征在于,所述根据所述任务属性信息确定所述目标主参数描述信息的录制方式,包括:
根据所述任务属性信息确定执行所述目标主渲染任务所需的渲染命令的命令条数;
若所述命令条数大于条数阈值,则确定所述目标主参数描述信息的录制方式为并行录制方式;
若所述命令条数小于或等于所述条数阈值,则确定所述目标主参数描述信息的录制方式为串行录制方式。
10.如权利要求3所述的方法,其特征在于,所述获取执行M个所述子渲染任务分别所需要的次级渲染命令列表,包括:
获取与所述渲染平台关联的M个命令队列池;
从M个所述命令队列池中,分配出执行M个所述子渲染任务分别所需要的次级渲染命令列表;一个所述命令队列池与一个次级渲染命令列表相对应。
11.如权利要求5所述的方法,其特征在于,M个所述子渲染任务对应的次级参数描述信息还包括资源状态变更信息,所述资源状态变更信息用于指示在执行M个所述子渲染任务的执行过程中,对渲染资源进行状态变更;所述渲染资源为执行M个所述子渲染任务分别所需要的资源;
第一子渲染任务对应的资源状态变更信息被录制在第一资源状态管理接口的目标屏障中;所述第一资源状态管理接口属于所述目标主渲染任务对应的录制后的目标主渲染命令列表,所述第一子渲染任务为M个所述子渲染任务中对应的渲染资源为目标渲染资源的子渲染任务;所述目标渲染资源为具有图像显示参数的资源;
第二子渲染任务对应的资源状态变更信息被录制在第二资源状态管理接口的第一资源屏障中;所述第二资源状态管理接口属于所述录制后的目标主渲染命令列表,所述第二子渲染任务为M个所述子渲染任务中对应的渲染资源为非目标渲染资源的子渲染任务;所述非目标渲染资源为不具有图像显示参数的资源。
12.如权利要求11所述的方法,其特征在于,所述渲染平台为采用全局缓存存储所述目标渲染资源的第四渲染平台;所述方法还包括:
在所述第四渲染平台进入与所述目标主渲染任务关联的渲染通道之后,暂停执行所述录制后的目标主渲染命令列表的所述第一资源状态管理接口中的目标屏障;
在所述第四渲染平台执行所述第一子渲染任务关联的子渲染通道时,执行与所述目标渲染资源相关的第二资源屏障,以将所述全局缓存中的所述目标渲染资源的资源状态从当前资源状态,变更为目标资源状态;所述当前资源状态是指所述目标渲染资源在所述第一子渲染任务在被执行之前的资源状态,所述当前资源状态被记录在所述目标屏障中,所述第二资源屏障是在执行所述第一子渲染任务关联的子渲染通道中所插入的,所述目标资源状态为所述目标渲染资源在所述子渲染通道中的资源状态。
13.如权利要求11所述的方法,其特征在于,所述渲染平台为采用块缓存存储所述目标渲染资源的第五渲染平台;所述方法还包括:
在所述第五渲染平台进入与所述目标主渲染任务关联的渲染通道之后,执行所述录制后的目标主渲染命令列表的所述第一资源状态管理接口中的目标屏障,以将所述块缓存中的所述目标渲染资源的资源状态变更为可读可写状态;
在所述第五渲染平台进入与所述第一子渲染任务关联的子渲染通道时,暂停执行与所述目标渲染资源相关的第二资源屏障;所述第二资源屏障是在执行所述第一子渲染任务关联的子渲染通道中所插入的。
14.如权利要求11所述的方法,其特征在于,所述渲染平台为采用块缓存存储所述目标渲染资源的第六渲染平台;所述方法还包括:
在所述第六渲染平台进入与所述目标主渲染任务关联的渲染通道之后,调用资源状态管理驱动,执行所述录制后的目标主渲染命令列表的所述第一资源状态管理接口中的目标屏障,将所述块缓存中的目标渲染资源的资源状态变更为可读可写状态;
在所述第六渲染平台进入所述第一子渲染任务关联的子渲染通道时,调用资源状态管理驱动,执行与所述目标渲染资源相关的第二资源屏障,以将所述块缓存中的所述目标渲染资源的资源状态从可读可写资源状态,变更为目标资源状态;所述第二资源屏障是在执行所述第一子渲染任务关联的子渲染通道中所插入的,所述目标资源状态为所述目标渲染资源在所述子渲染通道中的资源状态。
15.如权利要求11所述的方法,其特征在于,所述方法还包括:
在所述渲染平台进入与所述目标主渲染任务关联的渲染通道之前,执行所述录制后的目标主渲染命令列表的第二资源状态管理接口的第一资源屏障,以将所述非目标渲染资源的资源状态变更为指定资源状态。
16.一种图像渲染装置,其特征在于,包括:
获取模块,用于获取关于待渲染的目标图像的N个主渲染任务,以及用于描述执行N个所述主渲染任务分别所需的执行参数的主参数描述信息; N为正整数;
确定模块,用于确定执行N个所述主渲染任务分别所需的主渲染命令列表;所述主渲染命令列表包括与至少两个渲染平台相关联的通用接口,用于录制主渲染命令列表的录制平台与所述至少两个渲染平台均不相同;
调用模块,用于调用N个主录制线程,并行根据N个所述主参数描述信息分别对应的录制方式,将N个所述主参数描述信息分别录制到对应的主渲染命令列表的通用接口中,得到N个录制后的主渲染命令列表;一个所述主录制线程与一个所述主渲染命令列表相对应;所述主参数描述信息对应的录制方式是根据所述主参数描述信息对应的主渲染任务的任务属性信息确定的,所述主参数描述信息对应的录制方式为串行录制方式或并行录制方式;提交模块,用于将N个所述录制后的主渲染命令列表提交至所述渲染平台;所述渲染平台用于根据N个所述录制后的主渲染命令列表,并行执行N个所述主渲染任务,得到所述目标图像;所述渲染平台属于所述至少两个渲染平台中的任一渲染平台。
17.一种计算机设备,其特征在于,包括:处理器和存储器;
所述处理器与存储器相连,其中,所述存储器用于存储计算机程序,所述处理器用于调用所述计算机程序,以使得所述计算机设备执行权利要求1-15任一项所述的方法。
18.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机程序,所述计算机程序适于由处理器加载并执行,以使得具有所述处理器的计算机设备执行权利要求1-15任一项所述的方法。
19.一种计算机程序产品,其特征在于,所述计算机程序产品包括计算机指令,所述计算机指令存储在计算机可读存储介质中,所述计算机指令适于由处理器读取并执行,以使得具有所述处理器的计算机设备执行权利要求1-15任一项所述的方法。
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210176827.2A CN114247138B (zh) | 2022-02-25 | 2022-02-25 | 图像渲染方法、装置、设备及存储介质 |
PCT/CN2022/132727 WO2023160041A1 (zh) | 2022-02-25 | 2022-11-18 | 图像渲染方法、装置、计算机设备、计算机可读存储介质以及计算机程序产品 |
US18/330,458 US20230316626A1 (en) | 2022-02-25 | 2023-06-07 | Image rendering method and apparatus, computer device, and computer-readable storage medium |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210176827.2A CN114247138B (zh) | 2022-02-25 | 2022-02-25 | 图像渲染方法、装置、设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114247138A CN114247138A (zh) | 2022-03-29 |
CN114247138B true CN114247138B (zh) | 2022-05-13 |
Family
ID=80796972
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210176827.2A Active CN114247138B (zh) | 2022-02-25 | 2022-02-25 | 图像渲染方法、装置、设备及存储介质 |
Country Status (3)
Country | Link |
---|---|
US (1) | US20230316626A1 (zh) |
CN (1) | CN114247138B (zh) |
WO (1) | WO2023160041A1 (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114247138B (zh) * | 2022-02-25 | 2022-05-13 | 腾讯科技(深圳)有限公司 | 图像渲染方法、装置、设备及存储介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109213607A (zh) * | 2017-06-30 | 2019-01-15 | 武汉斗鱼网络科技有限公司 | 一种多线程渲染的方法和装置 |
TW202143057A (zh) * | 2019-12-20 | 2021-11-16 | 美商英特爾股份有限公司 | 雲端渲染計算架構中的資產快取 |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7274368B1 (en) * | 2000-07-31 | 2007-09-25 | Silicon Graphics, Inc. | System method and computer program product for remote graphics processing |
CN105051686B (zh) * | 2013-02-21 | 2019-07-05 | 甜蜜实验室股份有限公司 | 用于集成的推荐的系统和方法 |
CN111400024B (zh) * | 2019-01-03 | 2023-10-10 | 百度在线网络技术(北京)有限公司 | 渲染过程中的资源调用方法、装置和渲染引擎 |
CN113516774A (zh) * | 2020-03-27 | 2021-10-19 | 华为技术有限公司 | 渲染质量调整方法以及相关设备 |
CN112381918A (zh) * | 2020-12-03 | 2021-02-19 | 腾讯科技(深圳)有限公司 | 图像渲染方法、装置、计算机设备和存储介质 |
CN112835712A (zh) * | 2021-01-28 | 2021-05-25 | 深圳点猫科技有限公司 | 一种多线程特效绘制方法、装置、系统及介质 |
CN113112579A (zh) * | 2021-04-13 | 2021-07-13 | 苍穹数码技术股份有限公司 | 渲染方法、装置、电子设备和计算机可读存储介质 |
CN114247138B (zh) * | 2022-02-25 | 2022-05-13 | 腾讯科技(深圳)有限公司 | 图像渲染方法、装置、设备及存储介质 |
-
2022
- 2022-02-25 CN CN202210176827.2A patent/CN114247138B/zh active Active
- 2022-11-18 WO PCT/CN2022/132727 patent/WO2023160041A1/zh unknown
-
2023
- 2023-06-07 US US18/330,458 patent/US20230316626A1/en active Pending
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109213607A (zh) * | 2017-06-30 | 2019-01-15 | 武汉斗鱼网络科技有限公司 | 一种多线程渲染的方法和装置 |
TW202143057A (zh) * | 2019-12-20 | 2021-11-16 | 美商英特爾股份有限公司 | 雲端渲染計算架構中的資產快取 |
Also Published As
Publication number | Publication date |
---|---|
US20230316626A1 (en) | 2023-10-05 |
WO2023160041A1 (zh) | 2023-08-31 |
CN114247138A (zh) | 2022-03-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
WO2022116759A1 (zh) | 图像渲染方法、装置、计算机设备和存储介质 | |
KR101563098B1 (ko) | 커맨드 프로세서를 갖는 그래픽 프로세싱 유닛 | |
US7598952B1 (en) | Three-dimensional image compositing on a GPU utilizing multiple transformations | |
CN106575228B (zh) | 图形处理中的渲染目标命令重新排序 | |
US9928637B1 (en) | Managing rendering targets for graphics processing units | |
US9317953B2 (en) | Coordinated 2-dimensional and 3-dimensional graphics processing | |
CN108701368B (zh) | 用于经实施例化的几何结构的更有效的光线跟踪方法和装置 | |
CN113515396B (zh) | 图形渲染方法、装置、电子设备与存储介质 | |
US20100060652A1 (en) | Graphics rendering system | |
US20160358306A1 (en) | Graphics Engine And Environment For Efficient Real Time Rendering Of Graphics That Are Not Pre-Known | |
AU2008258132B2 (en) | Load balancing in multiple processor rendering systems | |
US11094036B2 (en) | Task execution on a graphics processor using indirect argument buffers | |
CN113076152B (zh) | 渲染方法及装置、电子设备和计算机可读存储介质 | |
TW201702992A (zh) | 以邊緣爲基礎之覆蓋遮罩壓縮技術 | |
US20120133660A1 (en) | Data processing method and apparatus in heterogeneous multi-core environment | |
CN114247138B (zh) | 图像渲染方法、装置、设备及存储介质 | |
CN106886974A (zh) | 图像加速器设备及相关方法 | |
CN114245137A (zh) | 由gpu执行的视频帧处理方法和包括gpu的视频帧处理装置 | |
CN117710549A (zh) | 渲染方法及设备 | |
US7542042B1 (en) | Subpicture overlay using fragment shader | |
TW202322043A (zh) | 小網格著色圖譜 | |
US11094032B2 (en) | Out of order wave slot release for a terminated wave | |
CN115222869A (zh) | 分布式渲染方法及装置 | |
CN113663328B (zh) | 画面录制方法、装置、计算机设备及存储介质 | |
CN117708454A (zh) | 网页内容处理方法、装置、设备、存储介质及程序产品 |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: DE Ref document number: 40071926 Country of ref document: HK |