掌桥专利:专业的专利平台
掌桥专利
首页

游戏画面渲染方法、装置、电子设备和存储介质

文献发布时间:2023-06-19 18:46:07


游戏画面渲染方法、装置、电子设备和存储介质

技术领域

本申请涉及图像处理技术领域,具体涉及一种游戏画面渲染方法、装置、电子设备和计算机可读存储介质。

背景技术

游戏画面渲染中,通常涉及到场景的渲染和UI(User Interface,用户界面)的渲染,现有技术中,如URP(universal rendering pipeline,通用渲染管线)的渲染流程中,在对场景进行渲染后再对UI进行渲染时,会出现透明度混合不正确、UI颜色偏差等问题。

发明内容

本申请实施例提供一种游戏画面渲染方法、装置、电子设备和计算机可读存储介质,可以避免在对场景和UI渲染时出现的透明度混合不正确、UI颜色偏差等问题。

第一方面,本申请实施例提供一种游戏画面渲染方法,包括:

获取待渲染游戏画面的场景渲染数据和用户界面渲染数据;

基于线性颜色空间将所述场景渲染数据渲染至第一渲染缓冲区中,得到用于表征所述场景渲染数据的初步绘制结果的第一缓冲数据;

在第二渲染缓冲区中对所述第一缓冲数据进行后处理和颜色空间转换,以在所述第二渲染缓冲区中将所述第一缓冲数据调整为适配伽马颜色空间且带后处理效果的第二缓冲数据;

在所述第二渲染缓冲区中基于所述第二缓冲数据和伽马颜色空间对所述用户界面渲染数据进行渲染,生成针对所述待渲染游戏画面的渲染结果;

基于所述渲染结果,输出对应的游戏画面。

第二方面,本申请实施例还提供一种游戏画面渲染装置,包括:

获取单元,用于获取待渲染游戏画面的场景渲染数据和用户界面渲染数据;

第一渲染单元,用于基于线性颜色空间将所述场景渲染数据渲染至第一渲染缓冲区中,得到用于表征所述场景渲染数据的初步绘制结果的第一缓冲数据;

转换单元,用于在第二渲染缓冲区中对所述第一缓冲数据进行后处理和颜色空间转换,以在所述第二渲染缓冲区中将所述第一缓冲数据调整为适配伽马颜色空间且带后处理效果的第二缓冲数据;

第二渲染单元,用于在所述第二渲染缓冲区中基于所述第二缓冲数据和伽马颜色空间对所述用户界面渲染数据进行渲染,生成针对所述待渲染游戏画面的渲染结果;

第三渲染单元,用于基于所述渲染结果,输出对应的游戏画面。

第三方面,本申请实施例还提供一种电子设备,包括存储器存储有多条指令;所述处理器从所述存储器中加载指令,以执行本申请实施例所提供的任一种游戏画面渲染方法。

第四方面,本申请实施例还提供一种计算机可读存储介质,所述计算机可读存储介质存储有多条指令,所述指令适于处理器进行加载,以执行本申请实施例所提供的任一种游戏画面渲染方法。

本申请实施例中,一方面,通过在场景渲染数据完成渲染后,将颜色空间由线性颜色空间转换至伽马颜色空间再进行用户界面渲染数据的渲染,使得场景渲染和UI渲染所基于的颜色空间一致,进而避免了由于场景渲染和UI渲染所基于的颜色空间不一致而导致的透明度混合不正确、UI颜色偏差等问题。另一方面,通过在对第一缓冲数据进行后处理至待渲染游戏画面的第二渲染缓冲区时,将第一缓冲数据从线性颜色空间转换至伽马颜色空间;由于是利用进行后处理时加载的第一渲染缓冲区这个中间结果缓冲区完成颜色空间的转换,因此无需增加额外的中间结果缓冲区,从而可以减少中间结果缓冲区的数量,实现降低渲染过程所需占用的带宽,进而提高渲染速度。

附图说明

为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是本申请实施例中提供的游戏画面渲染系统的一个场景示意图;

图2是本申请实施例中提供的游戏画面渲染方法的一种实施例流程示意图;

图3是本申请实施例中提供的游戏画面渲染过程的一个说明示意图;

图4是本申请实施例中提供的分别基于线性颜色空间和伽马颜色空间进行渲染得到的颜色混合效果对比示意图;

图5是本申请实施例中提供的步骤202的一种实施例流程示意图;

图6是本申请实施例中提供的游戏画面渲染装置的结构示意图;

图7是本申请实施例中提供的电子设备的结构示意图。

具体实施方式

下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。同时,在本申请实施例的描述中,术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个所述特征。在本申请实施例的描述中,“多个”的含义是两个或两个以上,除非另有明确具体的限定。

本申请实施例提供一种游戏画面渲染方法、装置、电子设备和计算机可读存储介质。

具体地,本实施例将从游戏画面渲染装置的角度进行描述,该游戏画面渲染装置具体可以集成在电子设备中,即本申请实施例游戏画面渲染方法可以由电子设备执行,该电子设备可以为终端、服务器等设备。其中,终端可以为手机、平板电脑、智能蓝牙设备、笔记本电脑、触控屏幕、游戏机、或者个人电脑(Personal Computer,PC)等设备;服务器可以是单一服务器,也可以是由多个服务器组成的服务器集群。

在一些实施例中,该游戏画面渲染装置可以集成在多个服务器中,由多个服务器来实现本申请的游戏画面渲染方法。

在一些实施例中,该游戏画面渲染装置还可以集成在多个电子设备中,比如,游戏画面渲染装置可以集成在多个终端中,由多个终端来实现本申请的游戏画面渲染方法。

在一些实施例中,该游戏画面渲染装置还可以集成在终端和服务器集群中,从而实现云游戏(Cloud Gaming);其中,服务器可以以本方案提供的游戏画面渲染方法进行画面的渲染,并将渲染画面通过网络发送给终端,以在终端播放该渲染画面,由此降低终端的计算资源消耗,以及提高终端所显示画面的画面质量。

在一些实施例中,服务器也可以以终端的形式来实现,比如,可以将个人电脑设置为服务器来集成该游戏画面渲染装置,由个人电脑设置成的服务器来实现本申请的游戏画面渲染方法。

例如,本申请实施例提供的游戏画面渲染方法,可以应用于如图1所示的游戏画面渲染系统中。其中,该游戏画面渲染系统包括终端101、服务器102,终端101可以是既包括接收和发射硬件的设备,即具有能够在双向通信链路上,执行双向通信的接收和发射硬件的设备。终端101具体可以是用于运行游戏应用的终端设备,如终端101具体是手机、平板电脑、笔记本电脑等中的一种。终端101与服务器102可以通过网络进行双向通信,服务器102可用于存储待渲染游戏画面的相关数据,如场景渲染数据、用户界面渲染数据等,终端101通过网络从服务器获取场景渲染数据、用户界面渲染数据,并通过终端101的处理器(如CPU(CentralProcessing Unit,中央处理器)或GPU(Graphics Processing Unit,图形处理器)等)实现游戏画面渲染;其中,服务器102可以是独立的服务器,也可以是服务器组成的服务器网络或服务器集群,其包括但不限于计算机、网络主机、单个网络服务器、多个网络服务器集或多个服务器构成的云服务器。其中,云服务器由基于云计算(Cloud Computing)的大量计算机或网络服务器构成。例如,该终端设备10可以获取待渲染游戏画面的场景渲染数据和用户界面渲染数据;基于线性颜色空间将所述场景渲染数据渲染至第一渲染缓冲区中,得到用于表征所述场景渲染数据的初步绘制结果的第一缓冲数据;在第二渲染缓冲区中对所述第一缓冲数据进行后处理和颜色空间转换,以在所述第二渲染缓冲区中将所述第一缓冲数据调整为适配伽马颜色空间且带后处理效果的第二缓冲数据;在所述第二渲染缓冲区中基于所述第二缓冲数据和伽马颜色空间对所述用户界面渲染数据进行渲染,生成针对所述待渲染游戏画面的渲染结果;基于所述渲染结果,输出对应的游戏画面。

其中,输出对应的游戏画面的方式有多种,例如,在一些实施例中,执行本实施例游戏画面渲染方法的电子设备集成了显示屏,可以通过电子设备执行本实施例游戏画面渲染方法,并通过该电子设备集成的显示屏输出对应的游戏画面。又如,在一些实施例中,执行本实施例游戏画面渲染方法的电子设备不集成显示屏,可以通过电子设备执行本实施例游戏画面渲染方法,并通过与电子设备连接的其他设备中集成的显示屏输出对应的游戏画面。再如,在一些实施例中,执行本实施例游戏画面渲染方法的电子设备不集成显示屏,可以通过电子设备执行本实施例游戏画面渲染方法,并通过与电子设备连接的显示屏输出对应的游戏画面。当然,执行本实施例游戏画面渲染方法的电子设备集成了显示屏的情况下,也可以不使用电子设备中集成的显示屏输出对应的游戏画面,而使用与电子设备连接的其他设备中集成的显示屏或独立显示屏输出对应的游戏画面。

以下结合附图分别进行详细说明,本实施例中以执行主体是运行游戏应用的终端设备(简称游戏运行终端)、并通过游戏运行终端的GPU执行本实施例提供的游戏画面渲染方法为例进行说明,为简化表述,后文中将省略该执行主体。需说明的是,以下实施例的描述顺序不作为对实施例优选顺序的限定。虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于附图所示的顺序执行所示出或描述的步骤。

请参考图2和图3,该游戏画面渲染方法的具体流程可以如下步骤201~步骤205,其中:

201、获取待渲染游戏画面的场景渲染数据和用户界面渲染数据。

其中,场景渲染数据是指用于渲染游戏画面的游戏场景的渲染数据,具体是不涉及UI物体的渲染数据,比如,游戏世界中如房屋、树木等背景物体的渲染数据。本实施例中为了便于表述,将不涉及UI的物体简称“场景物体”。

其中,用户界面渲染数据是指用于渲染游戏世界的、涉及UI物体的渲染数据,比如,游戏世界中如交互按钮等通过玩家控制会产生交互物体的渲染数据。本实施例中为了便于表述,将涉及UI的物体简称“UI物体”。

为了方便理解,下面先介绍本实施例中涉及到的部分概念:

1、渲染数据。其中,渲染数据具体可以包括用于描述物体(场景物体或UI物体)的每个网格的顶点属性(如位置矢量、顶点法矢量、漫反射颜色、镜面颜色、纹理坐标等)。因此,基于每个网格的顶点属性进行插值可以得到每个片元的颜色值、每个片元对应的像素位置等。

2、网格、片元、网格实例。

其中,网格如三角形网格被用于描述三维物体(即场景物体或UI物体)的表面。本实施例中以描述场景物体或UI物体的网格是三角形网格为例进行说明。

其中,场景网格是指被用于描述场景物体的表面的网格。

其中,UI网格是指被用于描述UI物体的表面的网格。

其中,片元是将三角形网格表面拆分成的小块,每个片元对应三角形表面的一个细小区域,每个细小区域对应单个屏幕像素。即每个片元可用于表示一个屏幕像素。

其中,场景物体片元是指描述场景物体的三角形网格拆分得到的片元。

其中,界面物体片元是指描述UI物体的三角形网格拆分得到的片元。

使用网格组成完整待渲染游戏画面时,会在一个共同的坐标系里放置及定向多个网格,此坐标系称为世界空间(world space)。每个网格可在待渲染游戏画面中多次出现,例如,游戏中的房屋、树木等。每个这样的物体称为网格实例(mesh instance)。

3、基本场景数据。其中,基本场景数据具体可以包括但不限于:场景物体数据、摄像机数据、光源及阴影数据、以及其他全局数据。

其中,场景物体数据可以包括但不限于:物体变换数据、位置、旋转、缩放等;物体网格数据、顶点位置、UV贴图等。

其中,摄像机数据可以包括但不限于:位置、方向、远近裁剪平面、正交/透视(FOV)、视口比例/尺寸等。

其中,光源数据可以包括但不限于:光源类型(方向光、点光、聚光等)、光颜色、光方向、光位置、光范围等。

其中,阴影数据可以包括但不限于:是否需要阴影(即判断该光源可见范围内是否可投射阴影的物体);阴影参数,对应光源序号,阴影强度,级联参数,深度偏移,近平面偏移等。

4、场景摄像机和UI摄像机。本实施例中,采用两个摄像机用于待渲染游戏画面的渲染,其中一个摄像机用于场景物体的渲染,另外一个摄像机用于UI物体的渲染。本文中,将用于场景物体的渲染的摄像机称为“场景摄像机”,将用于UI物体的渲染的摄像机称为“UI摄像机”。其中,在对待渲染游戏画面进行渲染过程中,会先渲染场景摄像机,即先绘制场景渲染数据;再渲染UI摄像机,即后绘制用户界面渲染数据。

5、帧缓冲区(Frame Buffer)。帧缓冲区也即颜色缓冲区,待渲染游戏画面的每一个像素最终都会写入帧缓冲区,然后由帧缓冲区渲染至显示屏上进行显示。显示屏的内容是从帧缓冲区中读取的,大致的过程为从帧缓冲区的起始地址开始,从上往下、从左往右扫描帧缓冲区,将帧缓冲区的内容映射到显示屏上进行显示。进一步地,为了使得显示屏上的画面不会造成卡顿,会采用至少两个帧缓冲区,一个帧缓冲区用于给显示屏扫描读取,另一个用于在后台写入数据,当前一个帧缓冲区的缓冲数据读取完毕时写好的帧缓冲区缓冲数据就可以直接使用。

6、深度缓冲区(Depth Buffer)。深度缓冲区用于记录帧缓冲区中每个像素对应的深度值,以实现三角形网格(即各片元之间)的遮挡,深度缓冲是全屏缓冲。具体地,当片元的颜色值写至帧缓冲区时。其深度值就会存储在对应的深度缓冲像素里。而当另一片元(自另一个三角形网格)渲染在同一像素时,渲染引擎就会比较新的片元深度值和深度缓冲区里的现存深度值。若新片元比较接近摄像机(即其深度较小),其颜色值及深度值就会写进帧缓冲。否则该片元就会被丢弃。

7、中间结果缓冲区。中间结果缓冲区是用于记录不直接绘制至屏幕的中间渲染结果的缓冲区。

步骤201中获取场景渲染数据和用户界面渲染数据的方式有多种,示例性地,包括:

(1)接收游戏运行终端CPU准备好的场景渲染数据和用户界面渲染数据。具体地,首先,在渲染管线的资产调节阶段,场景渲染数据和用户界面渲染数据的相关资产数据,会生成渲染引擎可用的格式。然后,可以在渲染管线的应用阶段,通过游戏运行终端CPU读取资产调节阶段准备的相关资产数据,准备基本场景数据、设置光源和阴影数据、设置渲染状态、准备渲染参数等,识别出潜在可视的网格实例,从而得到每个网格(包括用于描述场景物体表面的网格、用于描述UI物体表面的网格)的顶点属性(后续对顶点属性进行插值,可以得到场景物体片元或界面物体片元的颜色值、对应像素位置等信息),最终形成待渲染游戏画面的场景渲染数据和待渲染游戏画面的用户界面渲染数据后,将场景渲染数据和用户界面渲染数据传送给游戏运行终端GPU。由此,游戏运行终端GPU可以得到场景渲染数据和用户界面渲染数据,执行后续的渲染过程。

(2)从游戏运行终端预缓存有场景渲染数据和用户界面渲染数据的其他缓冲区中读取。

202、基于线性颜色空间将所述场景渲染数据渲染至第一渲染缓冲区中,得到用于表征所述场景渲染数据的初步绘制结果的第一缓冲数据。

其中,第一渲染缓冲区是指用于绘制场景渲染数据的中间结果缓冲区。

其中,第一缓冲数据是指将场景渲染数据渲染至第一渲染缓冲区中,在第一渲染缓冲区中所得到的场景渲染数据的绘制结果。第一缓冲数据可以视为初步的场景渲染结果,亦或可以理解为是基于场景渲染数据进行绘制得到的一张场景渲染图。

为了保证场景渲染数据能制作出正确的物理光照效果,会在线性空间的颜色空间下对场景渲染数据进行渲染。在一些实施例中,可以基于场景渲染数据进行顶点着色、几何着色、裁剪、屏幕映射、三角形建立、三角形遍历、提前深度测试、像素着色、合并/光栅运算等处理,并将处理结果写入到第一渲染缓冲区中,得到第一渲染缓冲区的第一缓冲数据,从而可以得到基于场景渲染数据进行绘制得到的场景渲染图。此时,由于对场景渲染数据进行渲染时的颜色空间是线性空间,因此,此时得到的是基于线性空间的场景渲染图,即此时得到的第一缓冲数据的颜色空间也是线性空间。由此,第一渲染缓冲区中可以得到用于表征场景渲染数据的初步绘制结果的第一缓冲数据。

如图5所示,在一些实施例中,步骤202具体可以包括如下步骤2021~步骤2022,其中:

2021、基于线性颜色空间和所述场景渲染数据,获取每个场景片元的颜色值。

2022、基于所述场景渲染数据,获取所述每个场景片元对应的像素位置。

2023、按照所述每个场景片元对应的像素位置将所述每个场景片元的颜色值写入所述第一渲染缓冲区中,得到用于表征所述场景渲染数据的初步绘制结果的第一缓冲数据。

其中,场景渲染数据包含了用于描述场景物体表面的场景网格的顶点属性,顶点属性包括顶点的位置矢量、颜色信息等信息。具体地,可以基于场景网格中顶点的位置矢量进行插值,得到每个场景片元的位置信息,从而可以映射得到每个场景片元的像素位置。同理,也可以基于场景网格中顶点的颜色值进行插值,得到每个场景片元的颜色值。若每个场景片元通过如测试深度测试、alpha测试、模板测试等所有测试后,将按照每个场景片元对应的像素位置,将每个场景片元的颜色值写入到第一渲染缓冲区中。同理,场景摄像机可视范围内的所有场景片元都写入第一渲染缓冲区后,即可得到第一渲染缓冲区的第一缓冲数据,即第一渲染缓冲区中可以得到用于表征场景渲染数据的初步绘制结果的第一缓冲数据。

203、在第二渲染缓冲区中对所述第一缓冲数据进行后处理和颜色空间转换,以在所述第二渲染缓冲区中将所述第一缓冲数据调整为适配伽马颜色空间且带后处理效果的第二缓冲数据。

其中,后处理是指在场景渲染数据渲染完成后,对初步的场景渲染结果进行包括但不限于:高动态范围(high dynamic range,HDR)色调映射(tone mapping)及敷霜效果(bloom)、全屏抗锯齿(full-screen anti-aliasing,FSAA)、颜色校正(color correction)及颜色偏移(color-shift)效果等处理。其中,颜色校正及颜色偏移效果处理包括略过漂白(bleach bypass)、饱和度(saturation)、去饱和度(desaturation)等。

其中,第二渲染缓冲区是指合成有场景渲染数据的后处理效果的缓冲区。其中,第一渲染缓冲区和第二渲染缓冲区是两个不同的缓冲区,第一渲染缓冲区和第二渲染缓冲区的相同点在于:都存储了基于场景渲染数据进行渲染得到的场景渲染数据。第一渲染缓冲区和第二渲染缓冲区的区别在于:第一渲染缓冲区存储的是进行后处理前的场景渲染数据,第二渲染缓冲区存储的是进行后处理后的场景渲染数据。

其中,第二缓冲数据是指将初步的场景渲染数据(即第一缓冲数据)与后处理效果合并后存储至第二渲染缓冲区中,在第二渲染缓冲区中所得到的后处理后的场景渲染数据。即第二缓冲数据可以视为后处理后的场景渲染数据。第一缓冲数据和第二缓冲数据的相同点在于:都是基于场景渲染数据进行渲染得到的场景渲染数据。第一缓冲数据和第二缓冲数据的区别在于:第一缓冲数据是进行后处理前的场景渲染数据,第二缓冲数据是进行后处理后的场景渲染数据。

具体地,在对第一缓冲数据进行后处理执行全屏绘制时(简称为UberPass),会将第一缓冲数据与如敷霜效果等其他效果合成至一个新的缓冲区上,形成存储有第二缓冲数据的第二渲染缓冲区。由此,可以在第二渲染缓冲区中对第一缓冲数据进行后处理和颜色空间转换,以在第二渲染缓冲区中将第一缓冲数据调整为适配伽马颜色空间且带后处理效果的第二缓冲数据。

如图3所示,为了避免渲染流程在进行颜色空间转换时会导致切换缓冲区,本实施例中,通过在对第一缓冲数据进行后处理执行全屏绘制(称为“UberPass”)的同时,对渲染流程进行颜色空间转换:由线性颜色空间(Linear)转换为伽马颜色空间(Gamma),以将场景渲染结果(即第一缓冲数据)从线性颜色空间转换至伽马颜色空间,从而可以充分利用后处理中的全屏绘制过程,而不会导致额外的全屏绘制过程,从而不会导致增加更多的计算量,进而降低进行颜色空间转换所需带来的额外带宽损耗。由此,可以在降低颜色空间转换带宽的基础上,避免如透明度混合不正确、UI颜色偏差等问题。

如图4所示,图4是分别基于线性颜色空间和伽马颜色空间进行渲染得到的颜色混合效果对比示意图,图4中的(a)是在场景渲染后直接基于线性空间完成用户界面渲染所得到的颜色混合效果,图4中的(b)是在场景渲染后将颜色空间由线性颜色空间转换为伽马颜色空间后再进行用户界面渲染所得到的颜色混合效果,而图4中的(b)才是想要的效果,可见图4中的(a)和(b)存在明显的颜色偏差,由此也可见,若不进行颜色空间的转换会导致较为明显透明度混合不正确、UI颜色偏差等问题。

进一步地,可以随着待渲染游戏画面的当前渲染插件的帧缓冲区的适配颜色空间的不同,而设置步骤203中用于存储第二缓冲数据的第二渲染缓冲区,此时,步骤203中的实现会有多种,示例性地,包括如下情况1至情况3:

(1)帧缓冲区的适配颜色空间为伽马颜色空间。

情况1:将帧缓冲区作为第二渲染缓冲区。

其中,适配颜色空间是指帧缓冲区支持绘制至显示屏的颜色空间。

由于UI渲染完之后得到的渲染结果是处于伽马颜色空间的、帧缓冲区的适配颜色空间也是伽马颜色空间,因此渲染可以直接绘制至显示屏上,而无需对渲染结果进行颜色空间的转换,为了节省带宽可以直接后处理结果直接写入帧缓冲区中,即第二缓冲数据可以直接写入帧缓冲区中,并在帧缓冲区中完成UI的渲染。

具体地,在进行后处理前或后处理时,检测待渲染游戏画面的当前渲染插件的帧缓冲区的适配颜色空间;若适配颜色空间为伽马颜色空间,则将帧缓冲区作为第二缓冲区。步骤203中,在帧缓冲区上对第一缓冲数据进行后处理和颜色空间转换,以在帧缓冲区中将第一缓冲数据调整为适配伽马颜色空间且带后处理效果的第二缓冲数据。由此,步骤204中,可以在帧缓冲区中完成实现UI的渲染得到渲染结果;步骤205中可以直接读取帧缓冲中的渲染结果绘制至显示屏上,从而避免再创建一个新的中间结果缓冲区作为第二渲染缓冲区,从而可以减少中间结果缓冲区的数量,进而降低渲染过程所需占用的带宽,进而提高渲染速度。

情况2:创建一个新的中间结果缓冲区,作为第二渲染缓冲区。

具体地,虽然UI渲染完之后得到的渲染结果是处于伽马颜色空间、帧缓冲区的适配颜色空间也是伽马颜色空间,渲染可以直接绘制至显示屏上,而无需对渲染结果进行颜色空间的转换。但是,在进行后处理前或后处理时,仍然可以创建一个新的中间结果缓冲区作为第二渲染缓冲区。步骤203中,在该新建的中间结果缓冲区上对第一缓冲数据进行后处理和颜色空间转换,以在第二渲染缓冲区中将第一缓冲数据调整为适配伽马颜色空间且带后处理效果的第二缓冲数据。步骤204中继续在该新建的中间结果缓冲区上实现UI的渲染得到待渲染游戏画面的渲染结果,由于UI渲染完之后得到的渲染结果是处于伽马颜色空间的、帧缓冲区的适配颜色空间也是伽马颜色空间,因此此时得到的渲染结果无需再进行颜色空间转换。步骤205中,先从第二渲染缓冲区中将待渲染游戏画面的渲染结果复制至帧缓冲区中得到帧缓冲区的第四缓冲数据;再将第四缓冲数据绘制至显示屏上,以在显示屏中输出对应的游戏画面。

(2)帧缓冲区的适配颜色空间为线性颜色空间。

情况3:创建一个新的中间结果缓冲区,作为第二渲染缓冲区。

由于UI渲染完之后得到的渲染结果是处于伽马颜色空间的、帧缓冲区的适配颜色空间是线性颜色空间,因此渲染可以需要再进行一次颜色空间的转换才能绘制至显示屏上。

具体地,在进行后处理前或后处理时,检测待渲染游戏画面的当前渲染插件的帧缓冲区的适配颜色空间;若适配颜色空间为线性空间,则创建新的中间结果缓冲区,以作为第二渲染缓冲区。步骤203中,在该新建的中间结果缓冲区上对第一缓冲数据进行后处理和颜色空间转换,以在第二渲染缓冲区中将第一缓冲数据调整为适配伽马颜色空间且带后处理效果的第二缓冲数据。步骤204中继续在该新建的中间结果缓冲区上实现UI的渲染得到待渲染游戏画面的渲染结果;由于UI渲染完之后得到的渲染结果是处于伽马颜色空间的、帧缓冲区的适配颜色空间是线性颜色空间,因此此时得到的渲染结果需再进行一次颜色空间转换才能正常绘制显示屏上。步骤205中,先将渲染结果进行从伽马颜色空间转换至线性颜色空间后复制帧缓冲区,得到帧缓冲区的第三缓冲数据;再将第三缓冲数据绘制至显示屏上,以在显示屏中输出对应的游戏画面。

204、在所述第二渲染缓冲区中基于所述第二缓冲数据和伽马颜色空间对所述用户界面渲染数据进行渲染,生成针对所述待渲染游戏画面的渲染结果。

与步骤203对应,针对帧缓冲区的适配颜色空间和第二渲染缓冲区的设置不同,步骤204的具体实现可以分为如下情况1至情况3:

如图3所示,由于在场景后处理过程中已经将颜色空间从线性颜色空间转换至伽马颜色空间,即UI渲染时在伽马颜色空间下进行的,因此渲染UI摄像机时不会导致透明度混合不正确问题。

步骤204中,对用户界面渲染数据进行渲染的方式有多种,示例性地,包括:

情况1:帧缓冲区的适配颜色空间为伽马颜色空间,将帧缓冲区作为第二渲染缓冲区。

具体地,此时,适配伽马颜色空间且带后处理效果的第二缓冲数据已经加载至帧缓冲区,因此在帧缓冲区中基于第二缓冲数据和伽马颜色空间对用户界面渲染数据进行渲染,生成针对待渲染游戏画面的渲染结果。

情况2:帧缓冲区的适配颜色空间为伽马颜色空间,创建一个新的中间结果缓冲区作为第二渲染缓冲区。

具体地,此时,适配伽马颜色空间且带后处理效果的第二缓冲数据是加载至所创建的新的中间结果缓冲区中,因此在新的中间结果缓冲区中基于第二缓冲数据和伽马颜色空间对用户界面渲染数据进行渲染,生成针对待渲染游戏画面的渲染结果。

情况3:帧缓冲区的适配颜色空间为线性颜色空间,创建一个新的中间结果缓冲区作为第二渲染缓冲区。

具体地,此时,适配伽马颜色空间且带后处理效果的第二缓冲数据是加载至所创建的新的中间结果缓冲区中,因此在新的中间结果缓冲区中基于第二缓冲数据和伽马颜色空间对用户界面渲染数据进行渲染,生成针对待渲染游戏画面的渲染结果。

示例性地,与场景的渲染类似,在对用户界面进行渲染时,可以基于用户界面渲染数据进行顶点着色、几何着色、裁剪、屏幕映射、三角形建立、三角形遍历、像素着色、合并/光栅运算等处理,并将处理结果写入到第二渲染缓冲区中,得到第二渲染缓冲区的第三缓冲数据,从而可以在场景渲染图基础上基于场景渲染数据进行绘制、得到同时包含场景和用户界面渲染数据的渲染图。

可以理解的是,渲染过程是以片元为基本单位逐像素渲染的。示例性地,“生成针对待渲染游戏画面的渲染结果”具体可以如下:基于所述用户界面渲染数据和伽马颜色空间,获取当前界面片元的颜色值、以及所述当前界面片元对应的目标像素位置;从所述第二缓冲数据中,确定所述目标像素位置处的初始颜色值;将所述当前界面片元的颜色值与所述初始颜色值进行混合,得到所述目标像素位置的目标颜色值;将所述第二渲染缓冲区记录的所述目标像素位置的颜色值更新为所述目标颜色值,得到针对所述待渲染游戏画面的渲染结果。

其中,若用户界面渲染阶段的合并包括不透明度的混合,如在场景物体前面出现透明的UI物体时,则会按照预先设定的混合方式(如相加、相减或相乘等),将场景物体片元与界面物体片元的颜色值进行合并后,写入第二渲染缓冲区中。即:若界面物体片元通过如深度测试、alpha测试(片元的alpha通道值能用于丢弃某些片元)、模板测试等所有测试后,界面物体片元的颜色就会和第二渲染缓冲区中原来(为方便理解如何进行混合,可以理解为场景物体片元)的颜色进行合并。

205、基于所述渲染结果,输出对应的游戏画面。

与步骤203对应,针对帧缓冲区的适配颜色空间和第二渲染缓冲区的设置不同,步骤205的具体实现可以分为如下情况1至情况3:

情况1:帧缓冲区的适配颜色空间为伽马颜色空间,将帧缓冲区作为第二渲染缓冲区。

即在帧缓冲区完成用户界面渲染数据的渲染,直接从帧缓冲区读取最终的绘制结果完成屏幕绘制。

示例性地,可以从帧缓冲区的起始地址开始,从上往下、从左往右扫描帧缓冲区,将帧缓冲区的内容映射到显示屏上进行显示,从而可以实现待渲染游戏画面的屏幕显示效果,使得显示屏上呈现出场景物体和UI物体。

由于对用户界面渲染数据的渲染时颜色空间是伽马颜色空间,因此,在渲染插件的帧缓冲区是支持伽马颜色空间的情况下,在完成场景渲染数据的渲染流程后,可以将用户界面渲染数据的渲染流程在帧缓冲区完成,以减少中间结果缓冲区的数据处理量,从而降低渲染过程所需占用的带宽,进而提高渲染速度。

情况2:帧缓冲区的适配颜色空间为伽马颜色空间,创建一个新的中间结果缓冲区作为第二渲染缓冲区。

即在中间结果缓冲区完成用户界面渲染数据的渲染,再将渲染结果提交至帧缓冲区,以从帧缓冲区读取最终的绘制结果完成屏幕绘制。

具体地,将所述渲染结果进行从伽马颜色空间转换至线性颜色空间后复制所述帧缓冲区,得到所述帧缓冲区的第三缓冲数据;将所述第三缓冲数据绘制至显示屏上,以在所述显示屏中输出对应的游戏画面。示例性地,可以从帧缓冲区的起始地址开始,从上往下、从左往右扫描帧缓冲区,将帧缓冲区的内容映射到显示屏上进行显示,从而可以实现待渲染游戏画面的屏幕显示效果,使得显示屏上呈现出场景物体和UI物体。

其中,第三缓冲数据是指将渲染结果复制帧缓冲区后,在帧缓冲区中所得到的缓冲数据。第三缓冲数据可以视为处于伽马颜色空间的、场景和界面的结合渲染结果。

情况3:帧缓冲区的适配颜色空间为线性颜色空间,创建一个新的中间结果缓冲区作为第二渲染缓冲区。

即在中间结果缓冲区完成用户界面渲染数据的渲染,再将渲染结果进行一次颜色空间的转换后提交至帧缓冲区,以从帧缓冲区读取最终的绘制结果完成屏幕绘制。

具体地,将所述渲染结果复制至所述待渲染游戏画面的当前渲染插件的帧缓冲区中,得到所述帧缓冲区的第四缓冲数据;将所述第四缓冲数据绘制至显示屏上,以在所述显示屏中输出对应的游戏画面。示例性地,可以从帧缓冲区的起始地址开始,从上往下、从左往右扫描帧缓冲区,将帧缓冲区的内容映射到显示屏上进行显示,从而可以实现待渲染游戏画面的屏幕显示效果,使得显示屏上呈现出场景物体和UI物体。

其中,第四缓冲数据是指将渲染结果进行从伽马颜色空间转换至线性颜色空间后复制所述帧缓冲区后,在帧缓冲区中所得到的缓冲数据。第四缓冲数据可以视为处于线性颜色空间的、场景和界面的结合渲染结果。

由于对用户界面渲染数据的渲染时颜色空间是伽马颜色空间,因此,在渲染插件的帧缓冲区是支持线性颜色空间的情况下,在完成场景渲染数据的渲染流程后,可以将用户界面渲染数据的渲染流程在第二渲染缓冲区(即新建的新的中间结果缓冲区)完成,并在场景渲染数据和用户界面渲染数据均完成渲染后,渲染结果的颜色空间由伽马颜色空间转换至线性空间后,再提交至帧缓冲区,以保证可以将帧缓冲区中的内容映射到显示屏上进行显示。

进一步地,为了保证正常的用户界面渲染,在场景渲染完成后需要进行一次深度信息清除,以避免场景的深度信息带入到界面渲染过程中。在一些实施例中,可以通过调用渲染管线中的清除接口(如Clear函数)来对深度缓冲区进行深度信息清除。然而,若清除深度信息需要调用渲染管线中的清除接口(如Clear函数),而需要先调用设置渲染目标接口(如SetRenderTarget函数),完成了目标设置才能调用清除接口(如Clear函数)来对深度缓冲区进行深度信息清除。但是,调用设置渲染目标接口(如SetRenderTarget函数)在除了会对读取深度缓冲区深度信息,还会导致颜色缓冲区(如第二渲染缓冲去)的颜色信息的读取过程,从而造成了不必要的带宽浪费。因此,若要对深度缓冲区进行深度信息清除会造成一次总线读取,即调用设置渲染目标接口(如SetRenderTarget函数)加载(Load)绘制颜色信息,由此导致了颜色信息的不必要读取过程而带来的额外带宽损耗。因此,在另一些实施例中,如图3所示,为了节省切换中间结果缓冲区带来的带宽损耗,本实施例中,在场景渲染完成之后、对用户界面渲染之前,会绘制所述待渲染游戏画面的全屏四边形(绘制过程称为“Drawcall”),在全屏四边形中写入深度信息,具体地写入的深度值为0,以通过全屏四边形用于将场景渲染数据的深度信息清除。当然,对于一些特殊系统深度值需要取反,此时可以将写入的深度值设置为1。

进一步地,为了降低不必要的片元渲染损耗,在不影响画面效果的前提下提高渲染速度,还可以结合显示屏的分辨率进行场景渲染和用户界面渲染,具体地,可以获取待渲染游戏画面的显示屏分辨率,在步骤202中采用小于所述显示屏分辨率的目标分辨率,基于线性颜色空间将所述场景渲染数据渲染至第一渲染缓冲区中,得到用于表征所述场景渲染数据的初步绘制结果的第一缓冲数据。步骤204中采用所述显示屏分辨率,在第二渲染缓冲区中对所述第一缓冲数据进行后处理和颜色空间转换,以在所述第二渲染缓冲区中将所述第一缓冲数据调整为适配伽马颜色空间且带后处理效果的第二缓冲数据。比如,由于游戏画面中的场景会更新的相对较快、界面会更新的相对较慢,在场景渲染过程采用小于显示屏分辨率(如1080p)的目标分辨率(如720p),对场景网格进行场景片元的采样渲染,如此可以降低场景渲染的片云数量,而不会被用户感知不清晰的画面效果,进而降低渲染损耗,提高渲染速度。在用户界面渲染过程采用与显示屏一致的分辨率,对界面网格进行界面片元的采样渲染,以使得界面的屏幕渲染效果较为清晰,使得用户进行界面交互时不会感觉到不良画面效果。

由以上内容可以看出,一方面,通过在场景渲染数据完成渲染后,将颜色空间由线性颜色空间转换至伽马颜色空间再进行用户界面渲染数据的渲染,使得场景渲染和UI渲染所基于的颜色空间一致,进而避免了由于场景渲染和UI渲染所基于的颜色空间不一致而导致的透明度混合不正确、UI颜色偏差等问题。另一方面,通过在对第一缓冲数据进行后处理至待渲染游戏画面的第二渲染缓冲区时,将第一缓冲数据从线性颜色空间转换至伽马颜色空间;由于是利用进行后处理时加载的第一渲染缓冲区这个中间结果缓冲区完成颜色空间的转换,因此无需增加额外的中间结果缓冲区,从而可以减少中间结果缓冲区的数量,实现降低渲染过程所需占用的带宽,进而提高渲染速度。

为了更好地实施以上方法,本申请实施例还提供一种游戏画面渲染装置,该游戏画面渲染装置具体可以集成在电子设备中,比如,计算机设备,该计算机设备可以为终端、服务器等设备。

其中,终端可以为手机、平板电脑、智能蓝牙设备、笔记本电脑、个人电脑等设备;服务器可以是单一服务器,也可以是由多个服务器组成的服务器集群。

比如,在本实施例中,将以游戏画面渲染装置具体集成在智能手机为例,对本申请实施例的方法进行详细说明。

例如,如图6所示,该游戏画面渲染装置可以包括:

获取单元601,用于获取待渲染游戏画面的场景渲染数据和用户界面渲染数据;

第一渲染单元602,用于基于线性颜色空间将所述场景渲染数据渲染至第一渲染缓冲区中,得到用于表征所述场景渲染数据的初步绘制结果的第一缓冲数据;

转换单元603,用于在第二渲染缓冲区中对所述第一缓冲数据进行后处理和颜色空间转换,以在所述第二渲染缓冲区中将所述第一缓冲数据调整为适配伽马颜色空间且带后处理效果的第二缓冲数据;

第二渲染单元604,用于在所述第二渲染缓冲区中基于所述第二缓冲数据和伽马颜色空间对所述用户界面渲染数据进行渲染,生成针对所述待渲染游戏画面的渲染结果;

第三渲染单元605,用于基于所述渲染结果,输出对应的游戏画面。

在一些实施例中,所述游戏画面渲染装置还包括清除单元(图中未示出),所述在所述第二渲染缓冲区中基于所述第二缓冲数据和伽马颜色空间对所述用户界面渲染数据进行渲染,生成针对所述待渲染游戏画面的渲染结果之前,所述清除单元具体用于:

绘制所述待渲染游戏画面的全屏四边形,其中,所述全屏四边形用于将所述场景渲染数据的深度信息清除。

在一些实施例中,所述第二渲染单元604具体用于:

基于所述用户界面渲染数据和伽马颜色空间,获取当前界面片元的颜色值、以及所述当前界面片元对应的目标像素位置;

从所述第二缓冲数据中,确定所述目标像素位置处的初始颜色值;

将所述当前界面片元的颜色值与所述初始颜色值进行混合,得到所述目标像素位置的目标颜色值;

将所述第二渲染缓冲区记录的所述目标像素位置的颜色值更新为所述目标颜色值,得到针对所述待渲染游戏画面的渲染结果。

在一些实施例中,所述第一渲染单元602具体用于:

基于线性颜色空间和所述场景渲染数据,获取每个场景片元的颜色值;

基于所述场景渲染数据,获取所述每个场景片元对应的像素位置;

按照所述每个场景片元对应的像素位置将所述每个场景片元的颜色值写入所述第一渲染缓冲区中,得到用于表征所述场景渲染数据的初步绘制结果的第一缓冲数据。

在一些实施例中,所述转换单元603具体用于:

检测所述待渲染游戏画面的当前渲染插件的帧缓冲区的适配颜色空间;

若所述适配颜色空间为伽马颜色空间,则将所述帧缓冲区作为所述第二缓冲区;

在一些实施例中,所述第三渲染单元605具体用于:

将所述渲染结果绘制至显示屏中,以在所述显示屏中输出对应的游戏画面。

在一些实施例中,所述转换单元603具体用于:

检测所述待渲染游戏画面的当前渲染插件的帧缓冲区的适配颜色空间;

若所述适配颜色空间为线性空间,则创建新的中间结果缓冲区,以作为所述第二渲染缓冲区;

在一些实施例中,所述第三渲染单元605具体用于:

将所述渲染结果进行从伽马颜色空间转换至线性颜色空间后复制所述帧缓冲区,得到所述帧缓冲区的第三缓冲数据;

将所述第三缓冲数据绘制至显示屏上,以在所述显示屏中输出对应的游戏画面。

在一些实施例中,所述第三渲染单元605具体用于:

将所述渲染结果复制至所述待渲染游戏画面的当前渲染插件的帧缓冲区中,得到所述帧缓冲区的第四缓冲数据;

将所述第四缓冲数据绘制至显示屏上,以在所述显示屏中输出对应的游戏画面。

在一些实施例中,所述第一渲染单元602具体用于:

获取所述待渲染游戏画面的显示屏分辨率;

采用小于所述显示屏分辨率的目标分辨率,基于线性颜色空间将所述场景渲染数据渲染至第一渲染缓冲区中,得到用于表征所述场景渲染数据的初步绘制结果的第一缓冲数据;

在一些实施例中,所述第二渲染单元604具体用于:

采用所述显示屏分辨率,在第二渲染缓冲区中对所述第一缓冲数据进行后处理和颜色空间转换,以在所述第二渲染缓冲区中将所述第一缓冲数据调整为适配伽马颜色空间且带后处理效果的第二缓冲数据。

由此,本申请实施例提供的游戏画面渲染装置可以带来如下技术效果:一方面,通过在场景渲染数据完成渲染后,将颜色空间由线性颜色空间转换至伽马颜色空间再进行用户界面渲染数据的渲染,使得场景渲染和UI渲染所基于的颜色空间一致,进而避免了由于场景渲染和UI渲染所基于的颜色空间不一致而导致的透明度混合不正确、UI颜色偏差等问题。另一方面,通过在对第一缓冲数据进行后处理至待渲染游戏画面的第二渲染缓冲区时,将第一缓冲数据从线性颜色空间转换至伽马颜色空间;由于是利用进行后处理时加载的第一渲染缓冲区这个中间结果缓冲区完成颜色空间的转换,因此无需增加额外的中间结果缓冲区,从而可以减少中间结果缓冲区的数量,实现降低渲染过程所需占用的带宽,进而提高渲染速度。

相应的,本申请实施例还提供一种电子设备,该电子设备可以为终端,该终端可以为智能手机、平板电脑、笔记本电脑、触控屏幕、游戏机、个人计算机(PC,PersonalComputer)、个人数字助理(Personal Digital Assistant,PDA)等终端设备。如图7所示,图7为本申请实施例提供的电子设备的结构示意图。该电子设备700包括有一个或者一个以上处理核心的处理器701、有一个或一个以上计算机可读存储介质的存储器702及存储在存储器702上并可在处理器上运行的计算机程序。其中,处理器701与存储器702电性连接。本领域技术人员可以理解,图中示出的电子设备结构并不构成对电子设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。

处理器701是电子设备700的控制中心,利用各种接口和线路连接整个电子设备700的各个部分,通过运行或加载存储在存储器702内的软件程序和/或模块,以及调用存储在存储器702内的数据,执行电子设备700的各种功能和处理数据,从而对电子设备700进行整体监控。处理器701可以是中央处理器CPU、图形处理器GPU、网络处理器(NetworkProcessor,NP)等,可以实现或者执行本申请实施例中公开的各方法、步骤及逻辑框图。

在本申请实施例中,电子设备700中的处理器701会按照如下的步骤,将一个或一个以上的应用程序的进程对应的指令加载到存储器702中,并由处理器701来运行存储在存储器702中的应用程序,从而实现各种功能,例如:

获取待渲染游戏画面的场景渲染数据和用户界面渲染数据;

基于线性颜色空间将所述场景渲染数据渲染至第一渲染缓冲区中,得到用于表征所述场景渲染数据的初步绘制结果的第一缓冲数据;

在第二渲染缓冲区中对所述第一缓冲数据进行后处理和颜色空间转换,以在所述第二渲染缓冲区中将所述第一缓冲数据调整为适配伽马颜色空间且带后处理效果的第二缓冲数据;

在所述第二渲染缓冲区中基于所述第二缓冲数据和伽马颜色空间对所述用户界面渲染数据进行渲染,生成针对所述待渲染游戏画面的渲染结果;

基于所述渲染结果,输出对应的游戏画面。

在一些实施例中,所述在所述第二渲染缓冲区中基于所述第二缓冲数据和伽马颜色空间对所述用户界面渲染数据进行渲染,生成针对所述待渲染游戏画面的渲染结果之前,还包括:

绘制所述待渲染游戏画面的全屏四边形,其中,所述全屏四边形用于将所述场景渲染数据的深度信息清除。

在一些实施例中,所述在所述第二渲染缓冲区中基于所述第二缓冲数据和伽马颜色空间对所述用户界面渲染数据进行渲染,生成针对所述待渲染游戏画面的渲染结果,包括:

基于所述用户界面渲染数据和伽马颜色空间,获取当前界面片元的颜色值、以及所述当前界面片元对应的目标像素位置;

从所述第二缓冲数据中,确定所述目标像素位置处的初始颜色值;

将所述当前界面片元的颜色值与所述初始颜色值进行混合,得到所述目标像素位置的目标颜色值;

将所述第二渲染缓冲区记录的所述目标像素位置的颜色值更新为所述目标颜色值,得到针对所述待渲染游戏画面的渲染结果。

在一些实施例中,所述基于线性颜色空间将所述场景渲染数据渲染至第一渲染缓冲区中,得到用于表征所述场景渲染数据的初步绘制结果的第一缓冲数据,包括:

基于线性颜色空间和所述场景渲染数据,获取每个场景片元的颜色值;

基于所述场景渲染数据,获取所述每个场景片元对应的像素位置;

按照所述每个场景片元对应的像素位置将所述每个场景片元的颜色值写入所述第一渲染缓冲区中,得到用于表征所述场景渲染数据的初步绘制结果的第一缓冲数据。

在一些实施例中,所述方法还包括:

检测所述待渲染游戏画面的当前渲染插件的帧缓冲区的适配颜色空间;

若所述适配颜色空间为伽马颜色空间,则将所述帧缓冲区作为所述第二缓冲区;

所述基于所述渲染结果,输出对应的游戏画面,包括:

将所述渲染结果绘制至显示屏中,以在所述显示屏中输出对应的游戏画面。

在一些实施例中,所述方法还包括:

检测所述待渲染游戏画面的当前渲染插件的帧缓冲区的适配颜色空间;

若所述适配颜色空间为线性空间,则创建新的中间结果缓冲区,以作为所述第二渲染缓冲区;

所述基于所述渲染结果,输出对应的游戏画面,包括:

将所述渲染结果进行从伽马颜色空间转换至线性颜色空间后复制所述帧缓冲区,得到所述帧缓冲区的第三缓冲数据;

将所述第三缓冲数据绘制至显示屏上,以在所述显示屏中输出对应的游戏画面。

在一些实施例中,所述基于所述渲染结果,输出对应的游戏画面,包括:

将所述渲染结果复制至所述待渲染游戏画面的当前渲染插件的帧缓冲区中,得到所述帧缓冲区的第四缓冲数据;

将所述第四缓冲数据绘制至显示屏上,以在所述显示屏中输出对应的游戏画面。

在一些实施例中,所述基于线性颜色空间将所述场景渲染数据渲染至第一渲染缓冲区中,得到用于表征所述场景渲染数据的初步绘制结果的第一缓冲数据,包括:

获取所述待渲染游戏画面的显示屏分辨率;

采用小于所述显示屏分辨率的目标分辨率,基于线性颜色空间将所述场景渲染数据渲染至第一渲染缓冲区中,得到用于表征所述场景渲染数据的初步绘制结果的第一缓冲数据;

所述在第二渲染缓冲区中对所述第一缓冲数据进行后处理和颜色空间转换,以在所述第二渲染缓冲区中将所述第一缓冲数据调整为适配伽马颜色空间且带后处理效果的第二缓冲数据,包括:

采用所述显示屏分辨率,在第二渲染缓冲区中对所述第一缓冲数据进行后处理和颜色空间转换,以在所述第二渲染缓冲区中将所述第一缓冲数据调整为适配伽马颜色空间且带后处理效果的第二缓冲数据。

由此,本实施例提供的电子设备700可以带来如下技术效果:一方面,通过在场景渲染数据完成渲染后,将颜色空间由线性颜色空间转换至伽马颜色空间再进行用户界面渲染数据的渲染,使得场景渲染和UI渲染所基于的颜色空间一致,进而避免了由于场景渲染和UI渲染所基于的颜色空间不一致而导致的透明度混合不正确、UI颜色偏差等问题。另一方面,通过在对第一缓冲数据进行后处理至待渲染游戏画面的第二渲染缓冲区时,将第一缓冲数据从线性颜色空间转换至伽马颜色空间;由于是利用进行后处理时加载的第一渲染缓冲区这个中间结果缓冲区完成颜色空间的转换,因此无需增加额外的中间结果缓冲区,从而可以减少中间结果缓冲区的数量,实现降低渲染过程所需占用的带宽,进而提高渲染速度。

以上各个操作的具体实施可参见前面的实施例,在此不再赘述。

可选的,如图7所示,电子设备700还包括:触控显示屏703、射频电路704、音频电路705、输入单元706以及电源707。其中,处理器701分别与触控显示屏703、射频电路704、音频电路705、输入单元706以及电源707电性连接。本领域技术人员可以理解,图7中示出的电子设备结构并不构成对电子设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。

触控显示屏703可用于显示图形用户界面以及接收用户作用于图形用户界面产生的操作指令。触控显示屏703可以包括显示面板和触控面板。其中,显示面板可用于显示由用户输入的信息或提供给用户的信息以及电子设备的各种图形用户接口,这些图形用户接口可以由图形、文本、图标、视频和其任意组合来构成。可选的,可以采用液晶显示器(LCD,Liquid Crystal Display)、有机发光二极管(OLED,Organic Light-Emitting Diode)等形式来配置显示面板。触控面板可用于收集用户在其上或附近的触摸操作(比如用户使用手指、触笔等任何适合的物体或附件在触控面板上或在触控面板附近的操作),并生成相应的操作指令,且操作指令执行对应程序。可选的,触控面板可包括触摸检测装置和触摸控制器两个部分。其中,触摸检测装置检测用户的触摸方位,并检测触摸操作带来的信号,将信号传送给触摸控制器;触摸控制器从触摸检测装置上接收触摸信息,并将它转换成触点坐标,再送给处理器701,并能接收处理器701发来的命令并加以执行。触控面板可覆盖显示面板,当触控面板检测到在其上或附近的触摸操作后,传送给处理器701以确定触摸事件的类型,随后处理器701根据触摸事件的类型在显示面板上提供相应的视觉输出。在本申请实施例中,可以将触控面板与显示面板集成到触控显示屏703而实现输入和输出功能。但是在某些实施例中,触控面板与触控面板可以作为两个独立的部件来实现输入和输出功能。即触控显示屏703也可以作为输入单元706的一部分实现输入功能。

射频电路704可用于收发射频信号,以通过无线通信与网络设备或其他电子设备建立无线通讯,与网络设备或其他电子设备之间收发信号。

音频电路705可以用于通过扬声器、传声器提供用户与电子设备之间的音频接口。音频电路705可将接收到的音频数据转换后的电信号,传输到扬声器,由扬声器转换为声音信号输出;另一方面,传声器将收集的声音信号转换为电信号,由音频电路705接收后转换为音频数据,再将音频数据输出处理器701处理后,经射频电路704以发送给比如另一电子设备,或者将音频数据输出至存储器702以便进一步处理。音频电路705还可能包括耳塞插孔,以提供外设耳机与电子设备的通信。

输入单元706可用于接收输入的数字、字符信息或用户特征信息(例如指纹、虹膜、面部信息等),以及产生与用户设置以及功能控制有关的键盘、鼠标、操作杆、光学或者轨迹球信号输入。

电源707用于给电子设备700的各个部件供电。可选的,电源707可以通过电源管理系统与处理器701逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。电源707还可以包括一个或一个以上的直流或交流电源、再充电系统、电源故障检测电路、电源转换器或者逆变器、电源状态指示器等任意组件。

尽管图7中未示出,电子设备700还可以包括摄像头、传感器、无线保真模块、蓝牙模块等,在此不再赘述。

在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。

本领域普通技术人员可以理解,上述实施例的各种方法中的全部或部分步骤可以通过指令来完成,或通过指令控制相关的硬件来完成,该指令可以存储于一计算机可读存储介质中,并由处理器进行加载和执行。

为此,本申请实施例提供一种计算机可读存储介质,其中存储有多条计算机程序,该计算机程序能够被处理器进行加载,以执行本申请实施例所提供的任一种游戏画面渲染方法。例如,该计算机程序可以执行如下游戏画面渲染方法的步骤:

获取待渲染游戏画面的场景渲染数据和用户界面渲染数据;

基于线性颜色空间将所述场景渲染数据渲染至第一渲染缓冲区中,得到用于表征所述场景渲染数据的初步绘制结果的第一缓冲数据;

在第二渲染缓冲区中对所述第一缓冲数据进行后处理和颜色空间转换,以在所述第二渲染缓冲区中将所述第一缓冲数据调整为适配伽马颜色空间且带后处理效果的第二缓冲数据;

在所述第二渲染缓冲区中基于所述第二缓冲数据和伽马颜色空间对所述用户界面渲染数据进行渲染,生成针对所述待渲染游戏画面的渲染结果;

基于所述渲染结果,输出对应的游戏画面。

在一些实施例中,所述在所述第二渲染缓冲区中基于所述第二缓冲数据和伽马颜色空间对所述用户界面渲染数据进行渲染,生成针对所述待渲染游戏画面的渲染结果之前,还包括:

绘制所述待渲染游戏画面的全屏四边形,其中,所述全屏四边形用于将所述场景渲染数据的深度信息清除。

在一些实施例中,所述在所述第二渲染缓冲区中基于所述第二缓冲数据和伽马颜色空间对所述用户界面渲染数据进行渲染,生成针对所述待渲染游戏画面的渲染结果,包括:

基于所述用户界面渲染数据和伽马颜色空间,获取当前界面片元的颜色值、以及所述当前界面片元对应的目标像素位置;

从所述第二缓冲数据中,确定所述目标像素位置处的初始颜色值;

将所述当前界面片元的颜色值与所述初始颜色值进行混合,得到所述目标像素位置的目标颜色值;

将所述第二渲染缓冲区记录的所述目标像素位置的颜色值更新为所述目标颜色值,得到针对所述待渲染游戏画面的渲染结果。

在一些实施例中,所述基于线性颜色空间将所述场景渲染数据渲染至第一渲染缓冲区中,得到用于表征所述场景渲染数据的初步绘制结果的第一缓冲数据,包括:

基于线性颜色空间和所述场景渲染数据,获取每个场景片元的颜色值;

基于所述场景渲染数据,获取所述每个场景片元对应的像素位置;

按照所述每个场景片元对应的像素位置将所述每个场景片元的颜色值写入所述第一渲染缓冲区中,得到用于表征所述场景渲染数据的初步绘制结果的第一缓冲数据。

在一些实施例中,所述方法还包括:

检测所述待渲染游戏画面的当前渲染插件的帧缓冲区的适配颜色空间;

若所述适配颜色空间为伽马颜色空间,则将所述帧缓冲区作为所述第二缓冲区;

所述基于所述渲染结果,输出对应的游戏画面,包括:

将所述渲染结果绘制至显示屏中,以在所述显示屏中输出对应的游戏画面。

在一些实施例中,所述方法还包括:

检测所述待渲染游戏画面的当前渲染插件的帧缓冲区的适配颜色空间;

若所述适配颜色空间为线性空间,则创建新的中间结果缓冲区,以作为所述第二渲染缓冲区;

所述基于所述渲染结果,输出对应的游戏画面,包括:

将所述渲染结果进行从伽马颜色空间转换至线性颜色空间后复制所述帧缓冲区,得到所述帧缓冲区的第三缓冲数据;

将所述第三缓冲数据绘制至显示屏上,以在所述显示屏中输出对应的游戏画面。

在一些实施例中,所述基于所述渲染结果,输出对应的游戏画面,包括:

将所述渲染结果复制至所述待渲染游戏画面的当前渲染插件的帧缓冲区中,得到所述帧缓冲区的第四缓冲数据;

将所述第四缓冲数据绘制至显示屏上,以在所述显示屏中输出对应的游戏画面。

在一些实施例中,所述基于线性颜色空间将所述场景渲染数据渲染至第一渲染缓冲区中,得到用于表征所述场景渲染数据的初步绘制结果的第一缓冲数据,包括:

获取所述待渲染游戏画面的显示屏分辨率;

采用小于所述显示屏分辨率的目标分辨率,基于线性颜色空间将所述场景渲染数据渲染至第一渲染缓冲区中,得到用于表征所述场景渲染数据的初步绘制结果的第一缓冲数据;

所述在第二渲染缓冲区中对所述第一缓冲数据进行后处理和颜色空间转换,以在所述第二渲染缓冲区中将所述第一缓冲数据调整为适配伽马颜色空间且带后处理效果的第二缓冲数据,包括:

采用所述显示屏分辨率,在第二渲染缓冲区中对所述第一缓冲数据进行后处理和颜色空间转换,以在所述第二渲染缓冲区中将所述第一缓冲数据调整为适配伽马颜色空间且带后处理效果的第二缓冲数据。

可见,计算机程序能够被处理器进行加载,以执行本申请实施例所提供的任一种游戏画面渲染方法,从而带来如下技术效果:一方面,通过在场景渲染数据完成渲染后,将颜色空间由线性颜色空间转换至伽马颜色空间再进行用户界面渲染数据的渲染,使得场景渲染和UI渲染所基于的颜色空间一致,进而避免了由于场景渲染和UI渲染所基于的颜色空间不一致而导致的透明度混合不正确、UI颜色偏差等问题。另一方面,通过在对第一缓冲数据进行后处理至待渲染游戏画面的第二渲染缓冲区时,将第一缓冲数据从线性颜色空间转换至伽马颜色空间;由于是利用进行后处理时加载的第一渲染缓冲区这个中间结果缓冲区完成颜色空间的转换,因此无需增加额外的中间结果缓冲区,从而可以减少中间结果缓冲区的数量,实现降低渲染过程所需占用的带宽,进而提高渲染速度。

以上各个操作的具体实施可参见前面的实施例,在此不再赘述。

其中,该计算机可读存储介质可以包括:只读存储器(ROM,Read Only Memory)、随机存取记忆体(RAM,Random Access Memory)、磁盘或光盘等。

由于该计算机可读存储介质中所存储的计算机程序,可以执行本申请实施例所提供的任一种游戏画面渲染方法,因此,可以实现本申请实施例所提供的任一种游戏画面渲染方法所能实现的有益效果,详见前面的实施例,在此不再赘述。

在上述游戏画面渲染装置、计算机可读存储介质、电子设备实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的游戏画面渲染装置、计算机可读存储介质、电子设备及其相应单元的具体工作过程及可带来的有益效果,可以参考如上实施例中游戏画面渲染方法的说明,具体在此不再赘述。

以上对本申请实施例所提供的一种游戏画面渲染方法、装置、电子设备和计算机可读存储介质进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。

技术分类

06120115687453