光照渲染方法、装置、终端和存储介质转让专利

申请号 : CN202310972605.6

文献号 : CN116672706B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 曹舜

申请人 : 腾讯科技(深圳)有限公司

摘要 :

本申请提供了一种光照渲染方法、装置、终端和存储介质,属于计算机技术领域。方法包括:获取场景中的多个光照探针的光线数据;基于光线数据在场景中进行射线检测,得到多个射线中的第一射线、第二射线和第一间接光照数据,第一射线为在场景的当前屏幕空间内命中像素的射线,第二射线为在当前屏幕空间内未命中像素的射线,第一间接光照数据为所命中的像素的间接光照数据;获取第二射线命中的当前屏幕空间内和当前屏幕空间外的元素,从元素的光照缓存库中获取第二间接光照数据,第二间接光照数据为元素的间接光照数据;基于第一间接光照数据和第二间接光照数据,对场景进行光照渲染。该方法提高了光照渲染的准确性。

权利要求 :

1.一种光照渲染方法,其特征在于,所述方法包括:

获取场景中的多个光照探针的光线数据,所述光线数据包括多个射线在光照探针上的起点和方向;

基于所述光线数据在所述场景中进行射线检测,得到所述多个射线中的第一射线、第二射线和第一间接光照数据,所述第一射线为在所述场景的当前屏幕空间内命中像素的射线,所述第二射线为在所述当前屏幕空间内未命中像素的射线,所述第一间接光照数据为所命中的像素的间接光照数据;

获取所述第二射线命中的所述当前屏幕空间内和所述当前屏幕空间外的元素,从所述元素的光照缓存库中获取第二间接光照数据,所述第二间接光照数据为所述元素的间接光照数据;

基于所述第一间接光照数据和所述第二间接光照数据,对所述场景进行光照渲染。

2.根据权利要求1所述的方法,其特征在于,所述元素包括所述场景中的图元和体素中的至少一项,所述获取所述第二射线命中的所述当前屏幕空间内和所述当前屏幕空间外的元素,从所述元素的光照缓存库中获取第二间接光照数据,包括以下至少一项:若所述元素包括图元,基于所述第二射线,在所述当前屏幕空间内和所述当前屏幕空间外对图元进行检测,得到所述第二射线所命中的图元,从图元缓存库中获取所命中图元的间接光照数据;

若所述元素包括体素,基于所述第二射线,在所述当前屏幕空间内和所述当前屏幕空间外对体素进行检测,得到所述第二射线所命中的体素,从体素缓存库中获取所命中体素的间接光照数据。

3.根据权利要求1所述的方法,其特征在于,所述元素包括所述场景中的图元和体素,所述第二射线为多个,所述获取所述第二射线命中的所述当前屏幕空间内和所述当前屏幕空间外的元素,从所述元素的光照缓存库中获取第二间接光照数据,包括:基于所述第二射线,在所述当前屏幕空间内和所述当前屏幕空间外对图元进行检测,得到所述第二射线所命中的图元,从图元缓存库中获取所命中图元的间接光照数据;确定多个第二射线中的第三射线,所述第三射线为未命中图元的射线;基于所述第三射线,在所述当前屏幕空间内和所述当前屏幕空间外对体素进行检测,得到所述第三射线所命中的体素,从体素缓存库中获取所命中体素的间接光照数据;或者,基于所述第二射线,在所述当前屏幕空间内和所述当前屏幕空间外对体素进行检测,得到所述第二射线所命中的体素,从体素缓存库中获取所命中体素的间接光照数据;确定多个第二射线中的第四射线,所述第四射线为未命中体素的射线;基于所述第四射线,在所述当前屏幕空间内和所述当前屏幕空间外对图元进行检测,得到所述第四射线命中的图元,从图元缓存库中获取所命中图元的间接光照数据。

4.根据权利要求2或3所述的方法,其特征在于,所述图元缓存库的获取过程包括:将所述场景离散化为多个图元,对所述多个图元进行光线追踪,得到所述多个图元的间接光照数据,将所述多个图元的间接光照数据存储在图元缓存库的第一缓存器中;

将所述场景划分为三维网格,所述三维网格包括多个网格;

在每个网格内分别存储所述网格对应的图元的图元索引,所述图元索引用于从所述第一缓存器中获取间接光照数据;

将所述三维网格存储在所述图元缓存库的第二缓存器中。

5.根据权利要求4所述的方法,其特征在于,所述方法还包括:

对所述第二缓存器中存储的多个网格进行筛选,得到未存储有图元索引的网格,将所述未存储有图元索引的网格剔除。

6.根据权利要求4所述的方法,其特征在于,所述将所述场景离散化为多个图元,包括:将所述场景划分为多个图块,所述多个图块中的像素被图元覆盖;

对于每个图块,确定所述图块中图元覆盖率最小的目标像素,在所述目标像素的图元覆盖率不满足覆盖率阈值的情况下,在所述目标像素处生成图元;

对于每个图块,重复执行所述确定所述图块中图元覆盖率最小的目标像素,在所述目标像素的图元覆盖率不满足覆盖率阈值的情况下,在所述目标像素处生成图元的步骤,直到所述图块中多个像素的图元覆盖率分别满足覆盖率阈值。

7.根据权利要求2或3所述的方法,其特征在于,所述体素缓存库的获取过程包括:对所述场景进行体素化处理,得到所述场景中每个物体的多个体素;

将所述物体的法线数据、深度数据和反照率数据嵌入到所述物体的多个体素中,得到所述物体的三维纹理贴图;

对于所述三维纹理贴图包括的多个体素,基于所述体素与相机视点的距离,调整所述多个体素的尺寸,每个体素的尺寸与所述体素对应的距离正相关;

对调整尺寸后的体素进行光线追踪,得到所述多个体素的间接光照数据,将所述多个体素的间接光照数据存储在体素缓存库中。

8.根据权利要求7所述的方法,其特征在于,所述对调整尺寸后的体素进行光线追踪,得到所述多个体素的间接光照数据,包括:将射线起点对应的半球空间划分为多个圆锥体,每个圆锥体对应有圆锥角和多个级别的步进距离,多个级别的步进距离用于指示射线射出的不同距离;

对于每个圆锥体,从体素的多个尺寸中,确定所述多个级别的步进距离分别对应的目标尺寸,获取所述目标尺寸的体素的间接光照数据。

9.根据权利要求1所述的方法,其特征在于,所述第一间接光照数据从像素缓存库中获取,所述像素缓存库的获取过程包括:获取所述场景的当前帧画面的上一帧画面的场景数据,基于所述场景数据和所述当前帧画面对应的光线反弹数据,得到所述当前帧画面的画面贴图,所述画面贴图包括多个像素的深度数据;

基于所述画面贴图进行光线追踪,得到所述当前帧画面中多个像素的间接光照数据,将所述多个像素的间接光照数据存储在像素缓存库中。

10.根据权利要求1所述的方法,其特征在于,所述基于所述第一间接光照数据和所述第二间接光照数据,对所述场景进行光照渲染,包括:基于所述第一间接光照数据和所述第二间接光照数据,对所述当前屏幕空间内的像素进行光照插值,基于所述第一间接光照数据和插值得到的间接光照数据对所述场景进行光照渲染。

11.根据权利要求10所述的方法,其特征在于,所述基于所述第一间接光照数据和插值得到的间接光照数据对所述场景进行光照渲染,包括:对第三间接光照数据进行去噪处理,基于去噪处理后的第三间接光照数据对所述场景进行光照渲染,所述第三间接光照数据包括所述第一间接光照数据和插值得到的间接光照数据。

12.根据权利要求1所述的方法,其特征在于,所述基于所述第一间接光照数据和所述第二间接光照数据,对所述场景进行光照渲染,包括:获取所述场景的直接光照数据;

基于所述第一间接光照数据、所述第二间接光照数据和所述直接光照数据,得到全局光照数据;

基于所述全局光照数据,对所述场景进行光照渲染。

13.一种光照渲染装置,其特征在于,所述装置包括:

获取模块,用于获取场景中的多个光照探针的光线数据,所述光线数据包括多个射线在光照探针上的起点和方向;

检测模块,用于基于所述光线数据在所述场景中进行射线检测,得到所述多个射线中的第一射线、第二射线和第一间接光照数据,所述第一射线为在所述场景的当前屏幕空间内命中像素的射线,所述第二射线为在所述当前屏幕空间内未命中像素的射线,所述第一间接光照数据为所命中的像素的间接光照数据;

所述获取模块,还用于获取所述第二射线命中的所述当前屏幕空间内和所述当前屏幕空间外的元素,从所述元素的光照缓存库中获取第二间接光照数据,所述第二间接光照数据为所述元素的间接光照数据;

渲染模块,用于基于所述第一间接光照数据和所述第二间接光照数据,对所述场景进行光照渲染。

14.一种终端,其特征在于,所述终端包括处理器和存储器,所述存储器用于存储至少一段程序,所述至少一段程序由所述处理器加载并执行权利要求1至12任一项权利要求所述的光照渲染方法。

15.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质用于存储至少一段程序,所述至少一段程序用于执行权利要求1至12任一项权利要求所述的光照渲染方法。

说明书 :

光照渲染方法、装置、终端和存储介质

技术领域

[0001] 本申请涉及计算机技术领域,特别涉及一种光照渲染方法、装置、终端和存储介质。

背景技术

[0002] 随着计算机技术的发展,全局光照技术被广泛应用于游戏、影视及虚拟现实等领域,用于实现相关场景中的光影效果。全局光照技术指同时考虑来自光源的直接光照和经由其他物体反射后的间接光照,从而大幅提升场景的真实度的一种高阶渲染技术。
[0003] 相应技术中的全局光照技术,在确定每个光照的间接光照前,一般是先计算像素的直接光照,然后通过屏幕空间的光线追踪技术得到像素的间接光照,从而实现屏幕空间内的全局光照。但该技术仅能获取屏幕内反射的间接光照,使得间接光照不完整,降低了间接光照的准确性,从而导致对场景的光照渲染不准确。

发明内容

[0004] 本申请实施例提供了一种光照渲染方法、装置、终端和存储介质,能够提高光照渲染的准确性。所述技术方案如下:
[0005] 一方面,提供了一种光照渲染方法,所述方法包括:
[0006] 获取场景中的多个光照探针的光线数据,所述光线数据包括多个射线在光照探针上的起点和方向;
[0007] 基于所述光线数据在所述场景中进行射线检测,得到所述多个射线中的第一射线、第二射线和第一间接光照数据,所述第一射线为在所述场景的当前屏幕空间内命中像素的射线,所述第二射线为在所述当前屏幕空间内未命中像素的射线,所述第一间接光照数据为所命中的像素的间接光照数据;
[0008] 获取所述第二射线命中的所述当前屏幕空间内和所述当前屏幕空间外的元素,从所述元素的光照缓存库中获取第二间接光照数据,所述第二间接光照数据为所述元素的间接光照数据;
[0009] 基于所述第一间接光照数据和所述第二间接光照数据,对所述场景进行光照渲染。
[0010] 另一方面,提供了一种光照渲染装置,所述装置包括:
[0011] 获取模块,用于获取场景中的多个光照探针的光线数据,所述光线数据包括多个射线在光照探针上的起点和方向;
[0012] 检测模块,用于基于所述光线数据在所述场景中进行射线检测,得到所述多个射线中的第一射线、第二射线和第一间接光照数据,所述第一射线为在所述场景的当前屏幕空间内命中像素的射线,所述第二射线为在所述当前屏幕空间内未命中像素的射线,所述第一间接光照数据为所命中的像素的间接光照数据;
[0013] 所述获取模块,还用于获取所述第二射线命中的所述当前屏幕空间内和所述当前屏幕空间外的元素,从所述元素的光照缓存库中获取第二间接光照数据,所述第二间接光照数据为所述元素的间接光照数据;
[0014] 渲染模块,用于基于所述第一间接光照数据和所述第二间接光照数据,对所述场景进行光照渲染。
[0015] 在一些实施例中,所述元素包括所述场景中的图元和体素中的至少一项,所述获取模块,用于执行以下至少一项:
[0016] 若所述元素包括图元,基于所述第二射线,在所述当前屏幕空间内和所述当前屏幕空间外对图元进行检测,得到所述第二射线所命中的图元,从图元缓存库中获取所命中图元的间接光照数据;
[0017] 若所述元素包括体素,基于所述第二射线,在所述当前屏幕空间内和所述当前屏幕空间外对体素进行检测,得到所述第二射线所命中的体素,从体素缓存库中获取所命中体素的间接光照数据。
[0018] 在一些实施例中,所述元素包括所述场景中的图元和体素,所述第二射线为多个,所述获取模块,用于:
[0019] 基于所述第二射线,在所述当前屏幕空间内和所述当前屏幕空间外对图元进行检测,得到所述第二射线所命中的图元,从图元缓存库中获取所命中图元的间接光照数据;确定多个第二射线中的第三射线,所述第三射线为未命中图元的射线;基于所述第三射线,在所述当前屏幕空间内和所述当前屏幕空间外对体素进行检测,得到所述第三射线所命中的体素,从体素缓存库中获取所命中体素的间接光照数据;或者,
[0020] 基于所述第二射线,在所述当前屏幕空间内和所述当前屏幕空间外对体素进行检测,得到所述第二射线所命中的体素,从体素缓存库中获取所命中体素的间接光照数据;确定多个第二射线中的第四射线,所述第四射线为未命中体素的射线;基于所述第四射线,在所述当前屏幕空间内和所述当前屏幕空间外对图元进行检测,得到所述第四射线命中的图元,从图元缓存库中获取所命中图元的间接光照数据。
[0021] 在一些实施例中,所述装置还包括:
[0022] 离散模块,用于将所述场景离散化为多个图元,对所述多个图元进行光线追踪,得到所述多个图元的间接光照数据,将所述多个图元的间接光照数据存储在图元缓存库的第一缓存器中;
[0023] 划分模块,用于将所述场景划分为三维网格,所述三维网格包括多个网格;
[0024] 图元存储模块,用于在每个网格内分别存储所述网格对应的图元的图元索引,所述图元索引用于从所述第一缓存器中获取间接光照数据;
[0025] 所述图元存储模块,还用于将所述三维网格存储在所述图元缓存库的第二缓存器中。
[0026] 在一些实施例中,所述装置还包括筛选模块,用于:
[0027] 对所述第二缓存器中存储的多个网格进行筛选,得到未存储有图元索引的网格,将所述未存储有图元索引的网格剔除。
[0028] 在一些实施例中,所述离散模块,用于:
[0029] 将所述场景划分为多个图块,所述多个图块中的像素被图元覆盖;
[0030] 对于每个图块,确定所述图块中图元覆盖率最小的目标像素,在所述目标像素的图元覆盖率不满足覆盖率阈值的情况下,在所述目标像素处生成图元;
[0031] 对于每个图块,重复执行所述确定所述图块中图元覆盖率最小的目标像素,在所述目标像素的图元覆盖率不满足覆盖率阈值的情况下,在所述目标像素处生成图元的步骤,直到所述图块中多个像素的图元覆盖率分别满足覆盖率阈值。
[0032] 在一些实施例中,所述装置还包括:
[0033] 体素化模块,用于对所述场景进行体素化处理,得到所述场景中每个物体的多个体素;
[0034] 嵌入模块,用于将所述物体的法线数据、深度数据和反照率数据嵌入到所述物体的多个体素中,得到所述物体的三维纹理贴图;
[0035] 调整模块,用于对于所述三维纹理贴图包括的多个体素,基于所述体素与相机视点的距离,调整所述多个体素的尺寸,每个体素的尺寸与所述体素对应的距离正相关;
[0036] 体素存储模块,用于对调整尺寸后的体素进行光线追踪,得到所述多个体素的间接光照数据,将所述多个体素的间接光照数据存储在体素缓存库中。
[0037] 在一些实施例中,所述体素存储模块,用于:
[0038] 将射线起点对应的半球空间划分为多个圆锥体,每个圆锥体对应有圆锥角和多个级别的步进距离,多个级别的步进距离用于指示射线射出的不同距离;
[0039] 对于每个圆锥体,从体素的多个尺寸中,确定所述多个级别的步进距离分别对应的目标尺寸,获取所述目标尺寸的体素的间接光照数据。
[0040] 在一些实施例中,所述第一间接光照数据从像素缓存库中获取,所述获取模块,还用于获取所述场景的当前帧画面的上一帧画面的场景数据,基于所述场景数据和所述当前帧画面对应的光线反弹数据,得到所述当前帧画面的画面贴图,所述画面贴图包括多个像素的深度数据;
[0041] 所述装置还包括像素存储模块,用于基于所述画面贴图进行光线追踪,得到所述当前帧画面中多个像素的间接光照数据,将所述间接光照数据存储在像素缓存库中。
[0042] 在一些实施例中,所述渲染模块,用于:
[0043] 基于所述第一间接光照数据和所述第二间接光照数据,对所述当前屏幕空间内的像素进行光照插值,基于所述第一间接光照数据和插值得到的间接光照数据对所述场景进行光照渲染。
[0044] 在一些实施例中,所述渲染模块,用于:
[0045] 对第三间接光照数据进行去噪处理,基于去噪处理后的第三间接光照数据对所述场景进行光照渲染,所述第三间接光照数据包括所述第一间接光照数据和插值得到的间接光照数据。
[0046] 在一些实施例中,所述渲染模块,用于:
[0047] 获取所述场景的直接光照数据;
[0048] 基于所述第一间接光照数据、所述第二间接光照数据和所述直接光照数据,得到全局光照数据;
[0049] 基于所述全局光照数据,对所述场景进行光照渲染。
[0050] 另一方面,提供了一种终端,所述终端包括处理器和存储器,所述存储器用于存储至少一段程序,所述至少一段程序由所述处理器加载并执行以实现本申请实施例中的光照渲染方法。
[0051] 另一方面,提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有至少一段程序,所述至少一段程序由处理器加载并执行以实现本申请实施例中的光照渲染方法。
[0052] 另一方面,提供了一种计算机程序产品,所述计算机程序产品包括计算机程序代码,所述计算机程序代码存储在计算机可读存储介质中,终端的处理器从所述计算机可读存储介质读取所述计算机程序代码,所述处理器执行所述计算机程序代码,使得所述终端执行上述任一实现方式所述的光照渲染方法。
[0053] 本申请实施例提供了一种光照渲染方法,该方法通过光照探针,先对当前屏幕空间内的像素进行射线检测,并获取所命中像素的间接光照数据。对于未命中像素的射线,则获取这些射线命中的当前屏幕空间内和当前屏幕空间外的其他元素,并获取所命中元素的间接光照数据。这样该方法通过像素的间接光照数据和元素的间接光照数据进行光照渲染,就能够实现元素的间接光照数据对像素的间接光照数据的有效补充,且元素的间接光照数据还包括当前屏幕空间外的间接光照数据,进一步提高了间接光照数据的全面性和准确性,进而基于这样的间接光照数据对场景进行光照渲染,能够提高光照渲染的准确性。

附图说明

[0054] 为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0055] 图1是本申请实施例提供的一种实施环境的示意图;
[0056] 图2是本申请实施例提供的一种光照渲染方法的流程图;
[0057] 图3是本申请实施例提供的另一种光照渲染方法的流程图;
[0058] 图4是本申请实施例提供的一种像素缓存库的获取方法的流程图;
[0059] 图5是本申请实施例提供的一种场景中光线反弹的示意图;
[0060] 图6是本申请实施例提供的一种射线的起始点示意图;
[0061] 图7是本申请实施例提供的一种迭代过程的示意图;
[0062] 图8是本申请实施例提供的一种图元缓存库的获取方法的流程图;
[0063] 图9是本申请实施例提供的一种图元的示意图;
[0064] 图10是本申请实施例提供的一种图元和像素的关系示意图;
[0065] 图11是本申请实施例提供的一种图元分布的热度图;
[0066] 图12是本申请实施例提供的一种场景中的离散图元示意图;
[0067] 图13是本申请实施例提供的一种体素缓存库的获取方法的流程图;
[0068] 图14是本申请实施例提供的一种三维纹理贴图的示意图;
[0069] 图15是本申请实施例提供的一种多尺寸的体素示意图;
[0070] 图16是本申请实施例提供的一种圆锥体和体素的尺寸示意图;
[0071] 图17是本申请实施例提供的一种全局光照的框架示意图;
[0072] 图18是本申请实施例提供的另一种全局光照的框架示意图;
[0073] 图19是本申请实施例提供的一种光照设置界面的示意图;
[0074] 图20是本申请实施例提供的一种场景中的光照效果示意图;
[0075] 图21是本申请实施例提供的一种光照效果对比示意图;
[0076] 图22是本申请实施例提供的一种调整光照效果的示意图;
[0077] 图23是本申请实施例提供的一种渲染光照后的场景示意图;
[0078] 图24是本申请实施例提供的一种光照渲染装置的框图;
[0079] 图25是本申请实施例提供的一种终端的框图。

具体实施方式

[0080] 为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
[0081] 本申请中术语“第一”“第二”等字样用于对作用和功能基本相同的相同项或相似项进行区分,应理解,“第一”、“第二”、“第n”之间不具有逻辑或时序上的依赖关系,也不对数量和执行顺序进行限定。
[0082] 本申请中术语“至少一个”是指一个或多个,“多个”的含义是指两个或两个以上。
[0083] 需要说明的是,本申请所涉及的信息(包括但不限于用户设备信息、用户个人信息等)、数据(包括但不限于用于分析的数据、存储的数据、展示的数据等)以及信号,均为经用户授权或者经过各方充分授权的,且相关数据的收集、使用和处理需要遵守相关国家和地区的相关法律法规和标准。例如,本申请中涉及到的光线数据、间接光照数据等都是在充分授权的情况下获取的。
[0084] 以下,对本申请涉及的专业术语进行介绍:
[0085] 虚拟场景:是应用程序在终端上运行时显示(或提供)的虚拟场景。该虚拟场景可以是对真实世界的仿真环境,也可以是半仿真半虚构的虚拟环境,还可以是纯虚构的虚拟环境。虚拟场景可以是二维虚拟场景、2.5维虚拟场景或者三维虚拟场景中的任意一种,本申请实施例对虚拟场景的维度不加以限定。例如,虚拟场景可以包括天空、陆地、海洋等,该陆地可以包括沙漠、城市等环境元素,终端用户可以控制虚拟对象在该虚拟场景中进行移动。
[0086] 以下,对本申请涉及的实施环境进行介绍:
[0087] 本申请实施例提供的光照渲染方法,能够由终端执行。下面介绍一下本申请实施例提供的光照渲染方法的实施环境示意图。参见图1,图1为本申请实施例提供的一种光照渲染方法的实施环境的示意图,该实施环境包括终端101和服务器102。终端101和服务器102能够通过有线或无线通信方式进行直接或间接地连接,本申请在此不做限制。在一些实施例中,终端101上安装有目标应用,该目标应用可以为显示场景的应用,该场景可以为虚拟场景。终端101用于在场景中渲染光照。服务器102用于为终端101安装的目标应用提供后台服务。
[0088] 在一些实施例中,终端101可以为智能手机、平板电脑、笔记本电脑、台式计算机、智能语音交互设备、智能家电、车载终端、飞行器、VR(Virtual Reality,虚拟现实)装置、AR(Augmented Reality,增强现实)装置等,但并不限于此。在一些实施例中,服务器102是独立的服务器也能够是多个服务器构成的服务器集群或者分布式系统,还能够是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、CDN(Content Delivery Network 内容分发网络)以及大数据和人工智能平台等基础云计算服务的云服务器。在一些实施例中,服务器102主要承担计算工作,终端101承担次要计算工作;或者,服务器102承担次要计算服务,终端101承担主要计算工作;或者,服务器102和终端101二者之间采用分布式计算架构进行协同计算。
[0089] 参见图2,图2为本申请实施例提供的一种光照渲染方法的流程图,该方法包括以下步骤。
[0090] 201、终端获取场景中的多个光照探针的光线数据,光线数据包括多个射线在光照探针上的起点和方向。
[0091] 在本申请实施例中,场景可以为虚拟场景。场景中存在光源,光源能够真实模拟现实中的光源的光照效果。在场景中,可以通过模拟光线在环境中的传播,实现仿真的全局光照效果。
[0092] 在本申请实施例中,光照探针(lighting probe)是放置在场景中的光照探测器,也可以理解为一个个的三维感应点,可以感应光照。相应地,终端可以通过光照探针来获取场景中的光照数据。
[0093] 202、终端基于光线数据在场景中进行射线检测,得到多个射线中的第一射线、第二射线和第一间接光照数据,第一射线为在场景的当前屏幕空间内命中像素的射线,第二射线为在当前屏幕空间内未命中像素的射线,第一间接光照数据为所命中的像素的间接光照数据。
[0094] 在本申请实施例中,终端将命中像素的射线作为第一射线,将未命中像素的射线作为第二射线,并获取第一射线所命中的像素的间接光照数据。
[0095] 在本申请实施例中,像素的光照数据包括间接光照数据和直接光照数据。像素的直接光照数据为由场景中的光源直接照射到像素上而产生的光照数据。像素的间接光照数据指光源先照射到其他像素上,并经过一次、两次或多次反射,最终抵达到该像素而产生的光照数据,即间接光照数据基于光线反射得到。
[0096] 203、终端获取第二射线命中的当前屏幕空间内和当前屏幕空间外的元素,从元素的光照缓存库中获取第二间接光照数据,第二间接光照数据为元素的间接光照数据。
[0097] 在本申请实施例中,元素包括场景中的图元和体素中的至少一项。图元(surfel)是用于描述物体表面的小平面,即用于描述物体表面的最小单位,图元具有一定面积。体素(volume pixel)是体积元素的简称,是用于描述物体体积的小元素,即用于描述物体体积的最小单位。
[0098] 在本申请实施例中,当前屏幕空间外为场景中当前屏幕空间以外的空间。
[0099] 204、终端基于第一间接光照数据和第二间接光照数据,对场景进行光照渲染。
[0100] 在本申请实施例中,终端基于第一间接光照数据和第二间接光照数据对场景进行光线渲染后,得到渲染有间接光照数据的场景。可选地,终端结合第一间接光照数据、第二间接光照数据和直接光照数据,对场景进行光照渲染,以实现对场景的全局光照渲染。或者,终端基于第一间接光照数据和第二间接光照数据,对已渲染有直接光照数据的场景进行光照渲染,以实现对场景的全局光照渲染。
[0101] 本申请实施例提供了一种光照渲染方法,该方法通过光照探针,先对当前屏幕空间内的像素进行射线检测,并获取所命中像素的间接光照数据。对于未命中像素的射线,则获取这些射线命中的当前屏幕空间内和当前屏幕空间外的图元或体素等元素,并获取所命中元素的间接光照数据。这样该方法通过像素的间接光照数据和元素的间接光照数据进行光照渲染,就能够实现元素的间接光照数据对像素的间接光照数据的有效补充,且元素的间接光照数据还包括当前屏幕空间外的间接光照数据,进一步提高了间接光照数据的全面性和准确性,进而基于这样的间接光照数据对场景进行光照渲染,能够提高光照渲染的准确性。
[0102] 上面基于图2的实施例介绍了光照渲染的基本过程,下面基于图3的实施例对光照渲染的过程进行进一步介绍。参见图3,图3是本申请实施例提供的一种光照渲染方法的流程图,该方法包括以下步骤。
[0103] 301、终端为场景生成多个光照探针。
[0104] 在本申请实施例中,以光照探针为屏幕空间探针为例进行说明。多个光照探针的数量和位置可以根据需要进行设定并更改。多个光照探针可以均匀分布,也可以自适应分布,在此不作具体限定。
[0105] 在本申请实施例中,光照探针是预先放置在场景中的光照探测器,光照探针也可以理解为一个个的三维感应点,该感应点可以感应穿过其的光照数据,能够用于为虚拟场景中的物体提供包括间接光照的高质量光照数据。需要说明的是,光照探针还可以基于世界空间进行生成,当确定出各个光照探针位置处的探针光照数据后,对于场景中任意一点的光照数据,可以基于距离该点最近的至少一个光照探针的探针光照数据和插值法得到。
[0106] 302、终端获取场景中的多个光照探针的光线数据,光线数据包括多个射线在光照探针上的起点和方向。
[0107] 在本申请实施例中,终端为多个光照探针生成射线,以得到多个光照探针的光线数据。可选地,终端根据重要性采样方法生成射线,得到多个光照探针的光线数据。重要性采样方法包括但不限于cos‑weighted(一种重要性采样方法)、brdf(bidirectional reflectance distribution function,双向反射分布函数)和History Lighting(历史光照)方法,在此不再赘述。
[0108] 在一些实施例中,光照探针为球体。相应地,多个射线在光照探针上的起点为光照探针的中心点。或者,多个射线的起点在光照探针表面上均匀分布,分别位于光照探针表面的多个位置,多个位置可以为正上方、正下方、正左方、正右方等。多个射线的方向可以根据需要进行设定并更改,在此不作具体限定。
[0109] 303、终端基于光线数据在场景中进行射线检测,得到多个射线中的第一射线、第二射线和第一间接光照数据,第一射线为在场景的当前屏幕空间内命中像素的射线,第二射线为在当前屏幕空间内未命中像素的射线,第一间接光照数据为所命中的像素的间接光照数据。
[0110] 在一些实施例中,终端采用屏幕空间算法进行射线检测,得到第一射线和第二射线。需要说明的是,射线具有预设距离,终端将第一射线在预设距离内命中的像素作为第一射线所命中的像素。
[0111] 相应地,终端确定第一射线命中的像素的坐标信息。终端基于像素的坐标信息获取像素的间接光照数据。可选地,终端基于第一射线的起点坐标信息、方向和命中距离,得到所命中的像素的坐标信息;即将起点坐标信息在该方向上延伸命中距离,得到像素的坐标信息。命中距离指第一射线的起点与所命中的像素之间的距离。
[0112] 在本申请实施例中,第一间接光照数据从像素缓存库中获取,像素缓存库中存储有场景中的多个像素和多个像素的间接光照数据;进一步地,像素缓存库中对应存储有多个像素的坐标信息和间接光照数据。相应地,终端基于所命中像素的坐标信息,从像素缓存库中获取所命中像素的间接光照数据。在一些实施例中,像素缓存库的获取过程通过下述图4的实施例实现,在此不再赘述。
[0113] 需要说明的是,现实中的物体表面接收到的光照并不全是来自光源,还包括其他物体反射的光照。其中,来自光源的光照即为直接光照,而来着其他物体的光照就是间接光照。全局光照效果包括直接光照和间接光照的效果。直接光照,是指光源直接照射到物体上,并反射到虚拟观测点或相机视点的光照亮度。间接光照,是指光源先照射到其它物体上,并经过一次、两次或多次弹射,最终抵达到被观察的物体表面上,然后反射到虚拟观测点或相机视点的光照亮度。
[0114] 在一些实施例中,终端进行射线检测后,重新整理多个射线的数据,得到第一射线和第二射线(missing ray),并将第二射线重新打包压缩到一起;这样将多个第二射线压缩后放到一个连续的空间里面,便于后续基于第二射线继续检测。
[0115] 304、终端基于第二射线,在当前屏幕空间内和当前屏幕空间外对图元进行检测,得到第二射线所命中的图元,从图元缓存库中获取所命中图元的间接光照数据。
[0116] 在一些实施例中,终端采用SDF(Signed Distance Field,有符号距离场)或Ray Query(射线查询)方法对图元进行检测。需要说明的是,射线具有预设距离,终端将第二射线在预设距离内命中的图元作为第二射线所命中的图元。
[0117] 在本申请实施例中,终端基于第二射线对图元进行检测,得到所命中图元的坐标信息,进而基于坐标信息从图元缓存库中获取所命中图元的间接光照数据。可选地,终端基于第二射线的起点坐标信息、方向和命中距离,得到所命中图元的坐标信息。其中,坐标信息包括但不限于图元的中心点坐标、半径、法线等。
[0118] 在本申请实施例中,图元缓存库中存储有场景中的多个图元和多个图元的间接光照数据。进一步地,图元缓存库中对应存储有多个图元的坐标信息和间接光照数据。在一些实施例中,图元缓存库的获取过程通过下述图8的实施例实现,在此不再赘述。
[0119] 在一些实施例中,终端还基于第一射线的数量与射线总数量之比,确定像素的命中率。在命中率不大于第一参考命中率的情况下,执行步骤304。在命中率大于第一参考命中率的情况下,不再执行步骤304,直接基于第一间接光照数据进行光照渲染。该实施例提高了光照渲染的灵活性,在保证了间接光照数据的数据量的情况下,提高了渲染效率。
[0120] 305、终端确定多个第二射线中的第三射线,第三射线为未命中图元的射线。
[0121] 在本申请实施例中,终端基于第二射线进行检测后,重新整理多个第二射线的数据,得到多个第三射线,并将多个第三射线重新打包压缩到一起,这样将多个第三射线压缩后放到一个连续的空间里面,便于后续基于第三射线继续检测。
[0122] 306、终端基于第三射线,在当前屏幕空间内和当前屏幕空间外对体素进行检测,得到第三射线所命中的体素,从体素缓存库中获取所命中体素的间接光照数据。
[0123] 在一些实施例中,终端采用SDF、Ray Query或Cone Trace(锥形光线追踪)方法对体素进行检测。需要说明的是,射线具有预设距离,终端将第三射线在预设距离内命中的体素作为第三射线所命中的体素。
[0124] 在本申请实施例中,终端基于第三射线对体素进行检测,得到所命中体素的坐标信息,进而基于坐标信息从体素缓存库中获取所命中体素的间接光照数据。可选地,终端基于第三射线的起点坐标信息、方向和命中距离,得到所命中体素的坐标信息。
[0125] 在本申请实施例中,体素缓存库中存储有场景中的多个体素和多个体素的间接光照数据。进一步地,体素缓存库中对应存储有多个体素的坐标信息和间接光照数据。在一些实施例中,体素缓存库的获取过程通过下述图13的实施例实现,在此不再赘述。
[0126] 在一些实施例中,终端还基于第三射线的数量与第二射线的数量之比,确定图元的命中率。在命中率不大于第二参考命中率的情况下,执行步骤306。在命中率大于第二参考命中率的情况下,不再执行步骤306,直接基于第一间接光照数据和图元的间接光照数据进行光照渲染。该实施例提高了光照渲染的灵活性,在保证了间接光照数据的数据量的情况下,提高了渲染效率。
[0127] 在本申请实施例中,通过上述步骤304‑306实现了获取第二射线命中的当前屏幕空间外的元素,从元素的光照缓存库中获取第二间接光照数据的过程。在该实现方式中,先基于第二射线对图元进行检测,且对未命中图元的射线再进行体素检测,这样避免了第二射线对图元和体素的重复检测,且保证了检测的全面性,进而能够提高所获取的间接光照数据的全面性和准确性。
[0128] 需要说明的是,上述步骤304‑306仅为实现获取第二射线命中的当前屏幕空间外的元素,从元素的光照缓存库中获取第二间接光照数据的过程的一种可选地实现方式,终端还可以通过其他可选地方式来实现该过程。
[0129] 在一种实现方式中,终端获取第二射线命中的当前屏幕空间外的元素,从元素的光照缓存库中获取第二间接光照数据的过程,包括以下至少一项。若元素包括图元,终端基于第二射线,在当前屏幕空间内和当前屏幕空间外对图元进行检测,得到第二射线所命中的图元,从图元缓存库中获取所命中图元的间接光照数据。若元素包括体素,终端基于第二射线,在当前屏幕空间内和当前屏幕空间外对体素进行检测,得到第二射线所命中的体素,从体素缓存库中获取所命中体素的间接光照数据。即在元素仅包括图元的情况下,终端仅基于第二射线对图元进行检测,并得到图元的间接光照数据。在元素仅包括体素的情况下,终端仅基于第二射线对体素进行检测,并得到体素的间接光照数据。在元素包括图元和体素的情况下,基于第二射线分别对图元和体素进行检测,得到图元和体素的间接光照数据;该实现方式提高了检测的灵活性和效率,进而提高了获取间接光照数据的灵活性和效率。
[0130] 在另一种实现方式中,终端先对体素进行检测,再对图元进行检测。相应地,终端基于第二射线,在当前屏幕空间内和当前屏幕空间外对体素进行检测,得到第二射线所命中的体素,从体素缓存库中获取所命中体素的间接光照数据;确定多个第二射线中的第四射线,第四射线为未命中体素的射线;基于第四射线,在当前屏幕空间内和当前屏幕空间外对图元进行检测,得到第四射线命中的图元,从图元缓存库中获取所命中图元的间接光照数据。在该实现方式中,先基于第二射线对体素进行检测,且对未命中的射线再进行图元检测,这样避免了第二射线对图元和体素的重复检测,且保证了检测的全面性,进而能够提高所获取的间接光照数据的全面性和准确性。
[0131] 307、终端基于第一间接光照数据和第二间接光照数据,对当前屏幕空间内的像素进行光照插值,得到插值的间接光照数据,第二间接光照数据包括图元的间接光照数据和体素的间接光照数据。
[0132] 在本申请实施例中,终端对当前屏幕空间内的像素进行光照插值,得到当前屏幕空间内漫反射(diffuse)的间接光照数据和高光反射(glossy)的间接光照数据。
[0133] 在一些实施例中,终端在进行光照插值之前,还对光照探针进行时空滤波,时空滤波包括在时间和空间上的滤波,以减少噪点,加速收敛。
[0134] 308、终端对第三间接光照数据进行去噪处理,基于去噪处理后的第三间接光照数据对场景进行光照渲染,第三间接光照数据包括第一间接光照数据和插值得到的间接光照数据。
[0135] 在一些实施例中,终端通过denoiser(降噪器)进行去噪处理。
[0136] 在本申请实施例中,通过步骤308实现了基于第一间接光照数据和插值得到的间接光照数据对场景进行光照渲染的过程。该实现方式通过降噪处理,去除了噪点数据,提高了间接光照数据的准确性,进而可提高渲染的画面质量。
[0137] 需要说明的是,上述步骤308中的去噪处理过程为一种可选地实现方式,终端还可以在执行完步骤307后,直接基于第一间接光照数据和插值得到的间接光照数据对场景进行光照渲染,进而提高渲染效率。
[0138] 相应地,步骤307也为基于第一间接光照数据和第二间接光照数据,对场景进行光照渲染的过程的一种可选地实现方式,终端还可以直接将元素在当前屏幕空间内的第二间接光照数据赋值给相应位置的元素,进而基于像素的间接光照数据对场景进行渲染。
[0139] 其中,终端基于间接光照数据和直接光照数据实现全局光照。相应地,对场景进行光照渲染包括以下步骤:终端获取场景的直接光照数据;基于第一间接光照数据、第二间接光照数据和直接光照数据,得到全局光照数据;基于全局光照数据,对场景进行光照渲染。其中,全局光照数据是接近真实场景的光照数据,从而基于接近真实场景的光照数据,实现对场景高效的实时全局渲染。进一步地,终端将第三间接光照数据与直接光照数据进行叠加,得到全局光照数据,基于全局光照数据,对场景进行光照渲染。
[0140] 在本申请实施例中,光照渲染过程可以通过终端上的渲染引擎实现,该渲染引擎可以提供多种光源场景、多种渲染材质等,进而实现对场景的全局光照渲染。
[0141] 本申请实施例提供了一种光照渲染方法,该方法通过光照探针,先对当前屏幕空间内的像素进行射线检测,并获取所命中像素的间接光照数据。对于未命中像素的射线,则获取这些射线命中的当前屏幕空间内和当前屏幕空间外的图元或体素等元素,并获取所命中元素的间接光照数据。这样该方法通过像素的间接光照数据和元素的间接光照数据进行光照渲染,就能够实现元素的间接光照数据对像素的间接光照数据的有效补充,且元素的间接光照数据还包括当前屏幕空间外的间接光照数据,进一步提高了间接光照数据的全面性和准确性,进而基于这样的间接光照数据对场景进行光照渲染,能够提高光照渲染的准确性。
[0142] 参见图4,图4是本申请实施例提供的一种像素缓存库的获取方法的流程图。该方法包括以下步骤。
[0143] 401、终端获取场景的当前帧画面的上一帧画面的场景数据,基于场景数据和当前帧画面对应的光线反弹数据,得到当前帧画面的画面贴图,画面贴图包括多个像素的深度数据。
[0144] 在本申请实施例中,场景是视频帧中的虚拟场景。光线反弹数据用于指示光线在多个像素上的反弹数据,包括光线的反弹角度和反弹距离等。
[0145] 其中,终端基于当前帧画面对应的光线反弹数据对上一帧画面的场景数据进行渲染,得到当前帧画面的画面贴图。当前帧的画面贴图指由多个像素组成的当前帧画面,且包括多个像素的深度数据。
[0146] 例如,参见图5,图5是本申请实施例提供的一种场景中光线反弹的示意图。
[0147] 402、终端基于画面贴图进行光线追踪,得到当前帧画面中多个像素的间接光照数据,将间接光照数据存储在像素缓存库中。
[0148] 可选地,终端基于HZB(Hierarchical Z‑buffer,层次Z缓冲)方法进行光线追踪。其中,HZB的生成不但支持furthest(最远)策略且还支持closest(最近)的策略,可以根据需要进行设定。示例性地,光线追踪过程对应的代码为:
[0149] Stackless ray walk of min‑Z pyramid;
[0150] mip=0;
[0151] while(level>‑1)
[0152] step through current cell;
[0153] if(above Z plane)++level;
[0154] if(below Z plane)‑‑level。
[0155] 其中,该代码指示最小深度的无堆叠金字塔射线行走方法。先设定级别为0,当级别大于‑1时,步进通过当前单元格,若在Z平面之上,则增加级别,若在Z平面之下,则降低级别。进一步地,该光线追踪过程对应的代码对应的射线的起始点示意图如图6所示。
[0156] 在本申请实施例中,采用迭代的方法进行光线追踪。终端设置多个级别的像素精度,多个级别的像素精度分别对应不同的像素数目,如多个级别的像素精度,精度从高到低,依次对应1个、2个、4个像素。首先,基于第一级别的像素精度进行光线追踪,确定是否与像素相交;若无,基于第二级别的像素精度进行光线追踪,确定是否与像素相交,第二级别的像素精度比第一级别低;若无,则基于下一级别的像素精度进行光线求交,重复上述过程,逐渐降低像素精度,直到产生相交。由于此时相交是与某个级别包括的多个像素相交,因此基于相交时的射线的方向和起点,提高像素精度,确定具体与哪一个像素相交。
[0157] 例如,参见图7,图7是本申请实施例提供的一种迭代过程的示意图。该迭代过程对应图6所示的代码。多个级别的像素精度分别为对应1个像素、2个像素和4个像素对应的像素精度,分别命名为mip0、mip1和mip2。从图中可以看出,终端先基于mip0的像素精度进行光线追踪,没有与像素相交。然后基于mip1的像素精度进行光线追踪,也没有与像素相交。然后基于mip2的像素精度进行光线追踪,产生了相交,但由于此时的像素精度对应4个像素点,因此需要确定具体与4个像素点中的哪个像素点相交。因此基于mip2的像素精度对应的射线的起点和方向先基于mip1的像素精度进行光线追踪,得到相交的2个像素点,然后再基于mip0的像素精度进行光线追踪,得到相交的一个像素点。相应地,该迭代过程对应的像素精度的级别依次为:mip0‑mip1‑mip2‑mip1‑mip0‑mip0。
[0158] 在本申请实施例中,通过上述步骤401‑402获取了像素缓存库,实现了屏幕空间光照缓存(Screen Space Lighting),进而便于后续从像素缓存库中获取像素的间接光照数据,提高获取间接光照数据的效率,进而提高光照渲染的效率。
[0159] 需要说明的是,步骤401‑402仅为获取像素缓存库的一种可选地实现方式,还可以通过其他可选地实现方式获取像素缓存库,在此不再赘述。
[0160] 参见图8,图8是本申请实施例提供的一种图元缓存库的获取方法的流程图。该方法包括以下步骤。
[0161] 801、终端将场景离散化为多个图元,对多个图元进行光线追踪,得到多个图元的间接光照数据,将多个图元的间接光照数据存储在图元缓存库的第一缓存器中。
[0162] 其中,图元本质上是一种表面缓存的存储结构(Surface Cache)。图元将整个场景表面离散化,以中心点的表面信息近似扩散为整个图元的信息。图元的图元数据包括中心点坐标、半径、法线、基色(Base Color)等。可选地,为了满足各种特征(Feature)开发需要,也可以在图元数据中添加图元标识(Prim ID)、实例标识(Instance ID)、BRDF(Bidirectional Reflectance Distribution Function,双向反射分布函数)等参数。可选地,图元数据存储的数据内容的数据量不超过参考阈值。例如,参见图9,图9是本申请实施例提供的一种图元的示意图,其中,图元为圆形,为用于描述物体表面的小平面,图元数据包括图元的中心点坐标P、半径r、法线PN等。
[0163] 其中,终端基于图元的图元数据和场景中的光源信息,对图元进行光线追踪,得到图元的间接光照数据。可选地,终端采用BVH(Bounding Volume Hierarchy,层次包围盒)方法对图元进行光线追踪。
[0164] 可选地,终端基于屏幕空间生成图元。相应地,在将场景离散化为多个图元时,将场景划分为多个图块(block),即将屏幕空间内每预设数量的像素分为一个图块,多个图块中的像素被图元覆盖,每个图块记录其多个像素中图元覆盖率最小的目标像素,并基于图元覆盖情况更新图元。相应地,对于每个图块,确定图块中图元覆盖率最小的目标像素,在目标像素的图元覆盖率不满足覆盖率阈值的情况下,在目标像素处生成图元;对于每个图块,重复执行确定图块中图元覆盖率最小的目标像素,在目标像素的图元覆盖率不满足覆盖率阈值的情况下,在目标像素处生成图元的步骤,直到图块中多个像素的图元覆盖率分别满足覆盖率阈值。
[0165] 其中,在目标像素处生成图元,是指在目标像素处生成新的图元。在生成图元的过程中,基于该点的屏幕空间位置,从第一缓存器(GBuffer)中获取图元的基色、法线等信息,并结合深度信息重建该点的世界空间坐标,同时更新该图块的最小的图元覆盖率。若每个图块对应的最小的图元覆盖率都足够大,则停止生成。在本申请实施例中,在每次生成过程中遍历这些图块记录的最小的图元覆盖率,通过图元的迭代更新,确保屏幕空间中的每个像素都被覆盖,且不会生成过多的图元。
[0166] 其中,图元覆盖率指像素上所覆盖的图元的数量。如像素有3个图元覆盖,则图元覆盖率为3。例如,参见图10,图10是本申请实施例提供的一种图元和像素的关系示意图。例如,参见图11,图11是本申请实施例提供的一种图元分布的热度图。其中,热度代表图元的分布密集程度,不同的颜色深浅代表不同的热度。
[0167] 802、终端将场景划分为三维网格,三维网格包括多个网格。
[0168] 其中,终端对场景对应的空间进行网格划分,且划分成大小相同的网格,进而得到三维网格。每个网格的形状可以正方体或长方体。每个网格对应着一块存储空间,该存储空间用于存储图元的数据,如用于存储图元的图元索引。可选地,终端采用空间哈希的方式存储图元的数据。
[0169] 803、终端在每个网格内分别存储网格对应的图元的图元索引,图元索引用于从第一缓存器中获取间接光照数据;将三维网格存储在图元缓存库的第二缓存器中。
[0170] 在一些实施例中,为了降低存储资源的浪费,终端对第二缓存器中存储的多个网格进行筛选,得到未存储有图元索引的网格,将未存储有图元索引的网格剔除。在本申请实施例中,对于空间网格划分而言,由于图元是依附于物体表面的,因此有很多网格是空的,因此通过增加一个网格压缩的过滤(pass),在存储器存储中舍弃掉内部没有信息的网格,以减小带宽,降低存储资源的占用。
[0171] 例如,参见图12,图12是本申请实施例提供的一种场景中的离散图元示意图。其中,左上角为图12所示的场景的图元示意图,场景被离散化为多个图元。
[0172] 在本申请实施例中,仅以先获取图元的间接光照数据,再将多个图元存储在图元缓存库中为例进行说明。在另一些实施例中,先将图元的图元数据存储在第一缓存器中,将图元索引存储在三维网格中,将三维网格存储在第二缓存器后,然后再对所存储的图元进行光线追踪,得到图元的间接光照数据,并存储在图元缓存库中,在此不作具体限定。
[0173] 在本申请实施例中,通过上述步骤801‑803获取了图元缓存库,实现了离散图元的光照缓存(Discreted Surfels)进而便于后续从图元缓存库中获取图元的间接光照数据,提高获取间接光照数据的效率,进而提高光照渲染的效率。
[0174] 需要说明的是,步骤801‑803仅为获取图元缓存库的一种可选地实现方式,还可以通过其他可选地实现方式来获取图元缓存库,在此不再赘述。
[0175] 参见图13,图13是本申请实施例提供的一种体素缓存库的获取方法的流程图。该方法包括以下步骤。
[0176] 1301、终端对场景进行体素化处理,得到场景中每个物体的多个体素。
[0177] 可选地,终端通过光栅化方法实现对场景的体素化处理。其中,终端通过光栅化方法对场景进行体素化处理的过程中,将相机沿着场景的x、y、z三个轴向进行三次光栅化渲染。进一步地,在进行光栅化渲染时,关闭遮挡剔除、背面剔除等属性,得到场景中每个物体的多个体素,多个体素用于构成物体。
[0178] 1302、终端将物体的法线数据、深度数据和反照率数据嵌入到物体的多个体素中,得到物体的三维纹理贴图。
[0179] 可选地,终端将物体的法线数据、深度数据和反照率数据嵌入到物体的多个体素中,得到物体的三维纹理贴图的过程中,在体素化的像素着色器(pixel shader)中将物体的法线数据、深度数据和反照率数据存储到三维纹理中,进而实现将物体的法线数据、深度数据和反照率数据嵌入到物体的多个体素中,得到物体的三维纹理贴图。可选地,终端通过UAV(Unordered Access View,序访问缓冲区视图)实现该过程。例如,参见图14,图14是本申请实施例提供的一种三维纹理贴图的示意图。其中,法线数据、深度数据和反照率数据嵌入到体素中。
[0180] 其中,反照率又称反射率,是表示物体对光的反射程度的物理量,它是光在物体表面反射的能量与光在物体表面入射的能量之比,反照率可以用来表示物体表面的光学特性,如物体的颜色、漫反射程度和镜面反射程度等。
[0181] 1303、终端对于三维纹理贴图包括的多个体素,基于体素与相机视点的距离,调整多个体素的尺寸,每个体素的尺寸与体素对应的距离正相关。
[0182] 在本申请实施例中,每个体素的尺寸与体素对应的距离正相关指距离相机视点越近,体素的尺寸越小,距离相机视点越远,体素的尺寸越大。
[0183] 在本申请实施例中,如果体素化数据用一张简单的三维纹理贴图存储,显存占用会非常大,因此采用多级纹理贴图(clip map)的方法,调整体素的尺寸,使得距离相机视点越近,体素的半径越小,距离相机越远,体素的半径越大,进而实现近处较高精度,远处较低精度的效果。例如,参见图15,图15是本申请实施例提供的一种多尺寸的体素示意图。
[0184] 1304、终端对调整尺寸后的体素进行光线追踪,得到多个体素的间接光照数据,将多个体素的间接光照数据存储在体素缓存库中。
[0185] 可选地,终端采用圆锥体追踪(cone tracing)方式,对调整尺寸后的体素进行光线追踪,得到多个体素的间接光照数据。相应地,上述终端对调整尺寸后的体素进行光线追踪,得到多个体素的间接光照数据的过程,包括以下步骤:终端将射线起点对应的半球空间划分为多个圆锥体,每个圆锥体对应有圆锥角和多个级别的步进距离,多个级别的步进距离用于指示射线射出的不同距离;对于每个圆锥体,从体素的多个尺寸中,确定多个级别的步进距离分别对应的目标尺寸,获取目标尺寸的体素的间接光照数据。
[0186] 其中,圆锥体追踪是一种对光线采集过程的概括方法,该方法使用圆锥体代替单根射线,把半球空间概括为几个圆锥体去近似收集间接光照数据。并且可以和体素有较好的结合。其根据圆锥体传播距离和圆锥的夹角计算需要采样的面积,从而快速选择步进距离的级别和追踪步长(Trace Step)。射线从相机发射出去的时候,保证圆锥是覆盖像素在屏幕上一定的区域,而不是一个点。由于射线变成了圆锥,射线有体积了,所以射线和物体求交计算时,不但可以得到圆锥是否和物体相交,也能得到圆锥有多少部分和物体相交。正因为射线有体积,一条射线也有可能和多个物体相交,这时候这多个物体的光照计算结果均会影响最终像素的颜色,从而起到了抗锯齿的效果。该实施例通过设置不同级别的步进距离,并选择与步进距离相对应的尺寸,来获取相应尺寸的体素的间接光照数据,这样在保证了精度的情况下,提高了效率,且起到了抗锯齿的效果。
[0187] 例如,参见图16,图16是本申请实施例提供的一种圆锥和体素的尺寸示意图。其中,C0代表射线起点,Cd代表射线方向,代表圆锥追踪(cone trace)的角度,t代表当前总体步进距离,d代表单步对应的圆锥直径。从图中可以看出,随着步数的增加,t在不断增加,d也在不断增加,整体的迭代越来越快。相应地,可以根据d的大小选择在哪一级别的步进距离上进行采样。
[0188] 例如,参见下述公式(1),终端通过该公式(1)确定目标尺寸。
[0189]      (1)。
[0190] 相应地,随着步数的增加,步进距离的级别也在增加,下一级别的步进距离大于当前级别的步进距离。对于每个级别的步进距离,确定该级别对应的圆锥直径,进而确定体素的多个尺寸中与该圆锥直径匹配的目标尺寸,即得到该级别的步进距离对应的目标尺寸。
[0191] 在本申请实施例中,通过上述步骤1301‑1304实现了获取体素缓存库的过程,实现了体素化光照缓存(Scene Voxelize),进而便于后续从体素缓存库中获取体素的间接光照数据,提高获取间接光照数据的效率,进而提高光照渲染效率。
[0192] 需要说明的是,步骤1301‑1304仅为获取体素缓存库的一种可选地实现方式,终端还可以通过其他可选地实现方式获取体素缓存库,在此不再赘述。
[0193] 需要说明的是,本申请实施例中获取像素缓存库、图元缓存库和体素缓存库的过程均通过进行光照渲染的终端完成,这样通过一个终端就可以实现场景的全局光照渲染。
[0194] 本申请实施例提供的光照渲染方法可以命名为SmartGI(基于混合架构可伸缩的动态全局光照)技术,通过该技术能够在移动端实现全动态全局光照技术。该技术是一个基于混合架构的全局光照(Global Illumination,GI)框架,将全局光照抽象拆分成了光照缓存(Surface Cache)和光照采集(Final Gather)两部分,并且无缝的融合了SSGI、VoxelGI、SurfelGI等技术来进行光照缓存。其中,SSGI是一种屏幕空间的全局光照技术,在计算每个光照的间接光照数据前先计算像素的直接光照数据,然后通过屏幕空间的光线追踪技术收集着色点的间接光照数据,从而实现全局光照效果,该技术无法获取屏幕外的物体的光线反射信息,造成间接光照数据的准确性差。VoxelGI是一种将场景体素化,然后利用体素化的信息做光照缓存的技术。而体素化的精度较难控制,精度不够就难以表现精细的光照效果,精度太高则面临存储和性能的压力。SurfelGI是一种将场景进行离散图元化,然后用这些离散图元进行光照缓存的技术。该技术主要基于相机看到的屏幕空间生成图元,该技术在相机没有看到的地方就无法生成有效的图元信息,从而造成错误的光照效果。而本申请实施例提供的方法,通过无缝融合多种实现方式,解决了上述技术问题。且本申请实施例提供的方法支持多种软硬件光线追踪方案,如基于HZB的光线追踪(raymarching)、基于多级纹理的圆锥体追踪、基于SDF的光线追踪和基于GPU(Graphics Processing Unit,图形处理器)的射线查询技术等,实现了可伸缩的动态全局光照。
[0195] 例如,参见图17,图17是本申请实施例提供的一种全局光照的框架示意图。其中,该全动态全局光照技术包括光照缓存部分、光照采集部分和光照组合部分。在光照缓存部分,通过简单低成本的形式描述场景结构,并且用其来缓存光照数据,包括屏幕空间光照、离散图元和场景体素对应的光照数据。在光照采集部分,将光照的采集过程抽象处理,对于屏幕空间追踪、缓存图元追踪、体素追踪等可以支持多种软硬件光追方案,可以解决性能和兼容性问题。在光照组合部分,通过间接光照纹理和直接光照纹理,实现对场景的全局渲染。且间接光照纹理包括漫反射部分和高光反射部分的间接光照数据。
[0196] 再如,参见图18,图18是本申请实施例提供的另一种全局光照的框架示意图。其中,在对场景进行间接光照渲染时,该过程主要包括以下几个部分。首先,生成屏幕空间探针,可以为均匀探针或自适应探针。然后计算BRDF函数,为屏幕空间探针生成射线,得到光线数据;该过程通过重要性采样方法实现,重要性采样方法包括BRDF和历史照明等方法。然后在屏幕空间进行光线追踪,可以通过多种策略实现,在此过程中还可以得到命中距离和命中率。然后对图元进行检测、对体素进行检测,得到图元和体素的间接光照数据。其中,屏幕空间追踪包括HZB技术中的最远HZB和最近HZB,在此过程中还可以得到命中距离和命中率。在屏幕空间追踪后,基于紧凑型射线,进行图元追踪和体素追踪。图元追踪包括BVH光线追踪方法;进一步地,采用移动射线检测方法和SDF光线追踪方法,进而查找图元。体素追踪包括将场景体素化;进一步地,采用移动射线检测方法、SDF光线追踪方法以及体素圆锥追踪方法,在此过程中还可以得到命中距离和命中率。然后得到进行RSM(Reflective Shadow Maps,实时全局光照)光照,该过程通过光线追踪深度贴图、射线命中距离和射线命中率实现。然后进行滤波,该过程包括对光照探针的时间滤波和空间滤波。最后去除干扰,即进行降噪,降噪过程包括对屏幕空间各方向的辐照度的降噪、对整个屏幕空间的漫反射间接光照数据和高光反射间接光照数据的降噪、对时间滤波器对应的历史间接光照数据的降噪等。进一步地,通过反射通道进行屏幕缓存追踪。且在光照组合阶段,通过引擎通透模式,来基于直接光照数据和间接光照数据进程光照渲染,直接光照数据渲染场景颜色。间接光照数据要包括高光反射光照纹理和漫反射光照纹理。
[0197] 例如,参见图19,图19是本申请实施例提供的一种光照设置界面的示意图。其中,该光照设置界面为ue5(unreal engine 5,虚幻引擎5)界面,光照设置界面上显示有光照算法的选择控件1901,选择控件1901用于设置全局光照的算法,如选择SmartGI算法。例如,参见图20,图20是本申请实施例提供的一种场景中的光照效果示意图。其中,图20中的a所示场景只有天光的效果,图20中的b所示场景为全局光照的效果,对比可以看出,图20中的b所示场景光照效果更好。
[0198] 相比于静态全局光照技术中长时间烘焙贴图、对大场景数据的存储压力大、场景和光照不能变化的问题,本申请实施例提供的方法实现了全动态的全局光照后,对场景的光照渲染可以实现零成本烘焙、零预计算数据、跨平台、高性能、实时的动态光照和动态场景的效果。
[0199] 例如,参见图21,图21是本申请实施例提供的一种光照效果对比示意图。其中,图21中的a为通过静态全局光照技术得到的场景的光照示意图,图21中的b为通过本申请实施例提供的方法得到的场景的光照示意图。对比可以看出,通过本申请实施例提供的方法,即使没有通过静态全局光照技术来离线烘焙光照贴图,也能够达到与静态全局光照技术相同的效果。即通过本申请实施例提供的方法渲染的光照效果好。
[0200] 本申请实施例提供的方法,还支持光照效果随着时间的变化而变化。例如,参见图22,图22是本申请实施例提供的一种调整光照效果的示意图。其中,终端上显示有滑动条,终端响应于对滑动条的调整操作,调整场景中的光照效果。如白天和晚上的光照效果不同,上午和下午的光照效果不同。即本申请实施例提供的方法实现了光照效果基于时间的动态灵活调整。
[0201] 本申请实施例提供的方法,还能够支持较高精度的帧率。如可以支持60fps、90fps和120fps等。例如,参见图23,图23是本申请实施例提供的一种渲染光照后的场景示意图。其中,该场景画面的帧率达到60fps。
[0202] 本申请实施例提供了一种光照渲染方法,该方法通过光照探针,先对当前屏幕空间内的像素进行射线检测,并获取所命中像素的间接光照数据。对于未命中像素的射线,则获取这些射线命中的当前屏幕空间内和当前屏幕空间外的图元或体素等元素,并获取所命中元素的间接光照数据。这样该方法通过像素的间接光照数据和元素的间接光照数据进行光照渲染,就能够实现元素的间接光照数据对像素的间接光照数据的有效补充,且元素的间接光照数据还包括当前屏幕空间外的间接光照数据,进一步提高了间接光照数据的全面性和准确性,进而基于这样的间接光照数据对场景进行光照渲染,能够提高光照渲染的准确性。
[0203] 图24是根据本申请实施例提供的一种光照渲染装置的框图。该装置用于执行上述光照渲染方法时的步骤,参见图24,装置包括:
[0204] 获取模块2401,用于获取场景中的多个光照探针的光线数据,光线数据包括多个射线在光照探针上的起点和方向;
[0205] 检测模块2402,用于基于光线数据在场景中进行射线检测,得到多个射线中的第一射线、第二射线和第一间接光照数据,第一射线为在场景的当前屏幕空间内命中像素的射线,第二射线为在当前屏幕空间内未命中像素的射线,第一间接光照数据为所命中的像素的间接光照数据;
[0206] 获取模块2401,还用于获取第二射线命中的当前屏幕空间内和当前屏幕空间外的元素,从元素的光照缓存库中获取第二间接光照数据,第二间接光照数据为元素的间接光照数据;
[0207] 渲染模块2403,用于基于第一间接光照数据和第二间接光照数据,对场景进行光照渲染。
[0208] 在一些实施例中,元素包括场景中的图元和体素中的至少一项,获取模块2401,用于执行以下至少一项:
[0209] 若元素包括图元,基于第二射线,在当前屏幕空间内和当前屏幕空间外对图元进行检测,得到第二射线所命中的图元,从图元缓存库中获取所命中图元的间接光照数据;
[0210] 若元素包括体素,基于第二射线,在当前屏幕空间内和当前屏幕空间外对体素进行检测,得到第二射线所命中的体素,从体素缓存库中获取所命中体素的间接光照数据。
[0211] 在一些实施例中,元素包括场景中的图元和体素,第二射线为多个,获取模块2401,用于:
[0212] 基于第二射线,在当前屏幕空间内和当前屏幕空间外对图元进行检测,得到第二射线所命中的图元,从图元缓存库中获取所命中图元的间接光照数据;确定多个第二射线中的第三射线,第三射线为未命中图元的射线;基于第三射线,在当前屏幕空间内和当前屏幕空间外对体素进行检测,得到第三射线所命中的体素,从体素缓存库中获取所命中体素的间接光照数据;或者,
[0213] 基于第二射线,在当前屏幕空间内和当前屏幕空间外对体素进行检测,得到第二射线所命中的体素,从体素缓存库中获取所命中体素的间接光照数据;确定多个第二射线中的第四射线,第四射线为未命中体素的射线;基于第四射线,在当前屏幕空间内和当前屏幕空间外对图元进行检测,得到第四射线命中的图元,从图元缓存库中获取所命中图元的间接光照数据。
[0214] 在一些实施例中,装置还包括:
[0215] 离散模块,用于将场景离散化为多个图元,对多个图元进行光线追踪,得到多个图元的间接光照数据,将多个图元的间接光照数据存储在图元缓存库的第一缓存器中;
[0216] 划分模块,用于将场景划分为三维网格,三维网格包括多个网格;
[0217] 图元存储模块,用于在每个网格内分别存储网格对应的图元的图元索引,图元索引用于从第一缓存器中获取间接光照数据;
[0218] 图元存储模块,还用于将三维网格存储在图元缓存库的第二缓存器中。
[0219] 在一些实施例中,装置还包括筛选模块,用于:
[0220] 对第二缓存器中存储的多个网格进行筛选,得到未存储有图元索引的网格,将未存储有图元索引的网格剔除。
[0221] 在一些实施例中,离散模块,用于:
[0222] 将场景划分为多个图块,多个图块中的像素被图元覆盖;
[0223] 对于每个图块,确定图块中图元覆盖率最小的目标像素,在目标像素的图元覆盖率不满足覆盖率阈值的情况下,在目标像素处生成图元;
[0224] 对于每个图块,重复执行确定图块中图元覆盖率最小的目标像素,在目标像素的图元覆盖率不满足覆盖率阈值的情况下,在目标像素处生成图元的步骤,直到图块中多个像素的图元覆盖率分别满足覆盖率阈值。
[0225] 在一些实施例中,装置还包括:
[0226] 体素化模块,用于对场景进行体素化处理,得到场景中每个物体的多个体素;
[0227] 嵌入模块,用于将物体的法线数据、深度数据和反照率数据嵌入到物体的多个体素中,得到物体的三维纹理贴图;
[0228] 调整模块,用于对于三维纹理贴图包括的多个体素,基于体素与相机视点的距离,调整多个体素的尺寸,每个体素的尺寸与体素对应的距离正相关;
[0229] 体素存储模块,用于对调整尺寸后的体素进行光线追踪,得到多个体素的间接光照数据,将多个体素的间接光照数据存储在体素缓存库中。
[0230] 在一些实施例中,体素存储模块,用于:
[0231] 将射线起点对应的半球空间划分为多个圆锥体,每个圆锥体对应有圆锥角和多个级别的步进距离,多个级别的步进距离用于指示射线射出的不同距离;
[0232] 对于每个圆锥体,从体素的多个尺寸中,确定多个级别的步进距离分别对应的目标尺寸,获取目标尺寸的体素的间接光照数据。
[0233] 在一些实施例中,第一间接光照数据从像素缓存库中获取,获取模块2401,还用于获取场景的当前帧画面的上一帧画面的场景数据,基于场景数据和当前帧画面对应的光线反弹数据,得到当前帧画面的画面贴图,画面贴图包括多个像素的深度数据;
[0234] 装置还包括像素存储模块,还用于基于画面贴图进行光线追踪,得到当前帧画面中多个像素的间接光照数据,将间接光照数据存储在像素缓存库中。
[0235] 在一些实施例中,渲染模块2403,用于:
[0236] 基于第一间接光照数据和第二间接光照数据,对当前屏幕空间内的像素进行光照插值,基于第一间接光照数据和插值得到的间接光照数据对场景进行光照渲染。
[0237] 在一些实施例中,渲染模块2403,用于:
[0238] 对第三间接光照数据进行去噪处理,基于去噪处理后的第三间接光照数据对场景进行光照渲染,第三间接光照数据包括第一间接光照数据和插值得到的间接光照数据。
[0239] 在一些实施例中,渲染模块2403,用于:
[0240] 获取场景的直接光照数据;
[0241] 基于第一间接光照数据、第二间接光照数据和直接光照数据,得到全局光照数据;
[0242] 基于全局光照数据,对场景进行光照渲染。
[0243] 本申请实施例提供了一种光照渲染装置,该装置通过光照探针,先对当前屏幕空间内的像素进行射线检测,并获取所命中像素的间接光照数据。对于未命中像素的射线,则获取这些射线命中的当前屏幕空间内和当前屏幕空间外的图元或体素等元素,并获取所命中元素的间接光照数据。这样该装置通过像素的间接光照数据和元素的间接光照数据进行光照渲染,就能够实现元素的间接光照数据对像素的间接光照数据的有效补充,且元素的间接光照数据还包括当前屏幕空间外的间接光照数据,进一步提高了间接光照数据的全面性和准确性,进而基于这样的间接光照数据对场景进行光照渲染,能够提高光照渲染的准确性。
[0244] 图25示出了本申请一个示例性实施例提供的终端2500的结构框图。该终端2500可以是便携式移动终端,比如:智能手机、平板电脑、MP3播放器(Moving Picture Experts Group Audio Layer III,动态影像专家压缩标准音频层面3)、MP4(Moving Picture Experts Group Audio Layer IV,动态影像专家压缩标准音频层面4)播放器、笔记本电脑或台式电脑。终端2500还可能被称为用户设备、便携式终端、膝上型终端、台式终端等其他名称。
[0245] 通常,终端2500包括有:处理器2501和存储器2502。
[0246] 处理器2501可以包括一个或多个处理核心,比如4核心处理器、8核心处理器等。处理器2501可以采用DSP(Digital Signal Processing,数字信号处理)、FPGA(Field-Programmable Gate Array,现场可编程门阵列)、PLA(Programmable Logic Array,可编程逻辑阵列)中的至少一种硬件形式来实现。处理器2501也可以包括主处理器和协处理器,主处理器是用于对在唤醒状态下的数据进行处理的处理器,也称CPU(Central Processing Unit,中央处理器);协处理器是用于对在待机状态下的数据进行处理的低功耗处理器。在一些实施例中,处理器2501可以集成有GPU(Graphics Processing Unit,图像处理器), GPU用于负责显示屏所需要显示的内容的渲染和绘制。一些实施例中,处理器2501还可以包括AI(Artificial Intelligence,人工智能)处理器,该AI处理器用于处理有关机器学习的计算操作。
[0247] 存储器2502可以包括一个或多个计算机可读存储介质,该计算机可读存储介质可以是非暂态的。存储器2502还可包括高速随机存取存储器,以及非易失性存储器,比如一个或多个磁盘存储设备、闪存存储设备。在一些实施例中,存储器2502中的非暂态的计算机可读存储介质用于存储至少一个程序代码,该至少一个程序代码用于被处理器2501所执行以实现本申请中方法实施例提供的光照渲染方法。
[0248] 在一些实施例中,终端2500还可选包括有:外围设备接口2503和至少一个外围设备。处理器2501、存储器2502和外围设备接口2503之间可以通过总线或信号线相连。各个外围设备可以通过总线、信号线或电路板与外围设备接口2503相连。具体地,外围设备包括:射频电路2504、显示屏2505、摄像头组件2506、音频电路2507和电源2508中的至少一种。
[0249] 外围设备接口2503可被用于将I/O(Input /Output,输入/输出)相关的至少一个外围设备连接到处理器2501和存储器2502。在一些实施例中,处理器2501、存储器2502和外围设备接口2503被集成在同一芯片或电路板上;在一些其他实施例中,处理器2501、存储器2502和外围设备接口2503中的任意一个或两个可以在单独的芯片或电路板上实现,本实施例对此不加以限定。
[0250] 射频电路2504用于接收和发射RF(Radio Frequency,射频)信号,也称电磁信号。射频电路2504通过电磁信号与通信网络以及其他通信设备进行通信。射频电路2504将电信号转换为电磁信号进行发送,或者,将接收到的电磁信号转换为电信号。可选地,射频电路
2504包括:天线系统、RF收发器、一个或多个放大器、调谐器、振荡器、数字信号处理器、编解码芯片组、用户身份模块卡等等。射频电路2504可以通过至少一种无线通信协议来与其它终端进行通信。该无线通信协议包括但不限于:万维网、城域网、内联网、各代移动通信网络(2G、3G、4G及5G)、无线局域网和/或WiFi(Wireless Fidelity,无线保真)网络。在一些实施例中,射频电路2504还可以包括NFC(Near Field Communication,近距离无线通信)有关的电路,本申请对此不加以限定。
[0251] 显示屏2505用于显示UI(User Interface,用户界面)。该UI可以包括图形、文本、图标、视频及其它们的任意组合。当显示屏2505是触摸显示屏时,显示屏2505还具有采集在显示屏2505的表面或表面上方的触摸信号的能力。该触摸信号可以作为控制信号输入至处理器2501进行处理。此时,显示屏2505还可以用于提供虚拟按钮和/或虚拟键盘,也称软按钮和/或软键盘。在一些实施例中,显示屏2505可以为一个,设置在终端2500的前面板;在另一些实施例中,显示屏2505可以为至少两个,分别设置在终端2500的不同表面或呈折叠设计;在另一些实施例中,显示屏2505可以是柔性显示屏,设置在终端2500的弯曲表面上或折叠面上。甚至,显示屏2505还可以设置成非矩形的不规则图形,也即异形屏。显示屏2505可以采用LCD(Liquid Crystal Display,液晶显示屏)、OLED(Organic Light‑Emitting Diode,有机发光二极管)等材质制备。
[0252] 摄像头组件2506用于采集图像或视频。可选地,摄像头组件2506包括前置摄像头和后置摄像头。通常,前置摄像头设置在终端的前面板,后置摄像头设置在终端的背面。在一些实施例中,后置摄像头为至少两个,分别为主摄像头、景深摄像头、广角摄像头、长焦摄像头中的任意一种,以实现主摄像头和景深摄像头融合实现背景虚化功能、主摄像头和广角摄像头融合实现全景拍摄以及VR(Virtual Reality,虚拟现实)拍摄功能或者其它融合拍摄功能。在一些实施例中,摄像头组件2506还可以包括闪光灯。闪光灯可以是单色温闪光灯,也可以是双色温闪光灯。双色温闪光灯是指暖光闪光灯和冷光闪光灯的组合,可以用于不同色温下的光线补偿。
[0253] 音频电路2507可以包括麦克风和扬声器。麦克风用于采集用户及环境的声波,并将声波转换为电信号输入至处理器2501进行处理,或者输入至射频电路2504以实现语音通信。出于立体声采集或降噪的目的,麦克风可以为多个,分别设置在终端2500的不同部位。麦克风还可以是阵列麦克风或全向采集型麦克风。扬声器则用于将来自处理器2501或射频电路2504的电信号转换为声波。扬声器可以是传统的薄膜扬声器,也可以是压电陶瓷扬声器。当扬声器是压电陶瓷扬声器时,不仅可以将电信号转换为人类可听见的声波,也可以将电信号转换为人类听不见的声波以进行测距等用途。在一些实施例中,音频电路2507还可以包括耳机插孔。
[0254] 电源2508用于为终端2500中的各个组件进行供电。电源2508可以是交流电、直流电、一次性电池或可充电电池。当电源2508包括可充电电池时,该可充电电池可以是有线充电电池或无线充电电池。有线充电电池是通过有线线路充电的电池,无线充电电池是通过无线线圈充电的电池。该可充电电池还可以用于支持快充技术。
[0255] 在一些实施例中,终端2500还包括有一个或多个传感器2509。该一个或多个传感器2509包括但不限于:加速度传感器2510、陀螺仪传感器2511、压力传感器2512、光学传感器2513以及接近传感器2514。
[0256] 加速度传感器2510可以检测以终端2500建立的坐标系的三个坐标轴上的加速度大小。比如,加速度传感器2510可以用于检测重力加速度在三个坐标轴上的分量。处理器2501可以根据加速度传感器2510采集的重力加速度信号,控制显示屏2505以横向视图或纵向视图进行用户界面的显示。加速度传感器2510还可以用于游戏或者用户的运动数据的采集。
[0257] 陀螺仪传感器2511可以检测终端2500的机体方向及转动角度,陀螺仪传感器2511可以与加速度传感器2510协同采集用户对终端2500的3D动作。处理器2501根据陀螺仪传感器2511采集的数据,可以实现如下功能:动作感应(比如根据用户的倾斜操作来改变UI)、拍摄时的图像稳定、游戏控制以及惯性导航。
[0258] 压力传感器2512可以设置在终端2500的侧边框和/或显示屏2505的下层。当压力传感器2512设置在终端2500的侧边框时,可以检测用户对终端2500的握持信号,由处理器2501根据压力传感器2512采集的握持信号进行左右手识别或快捷操作。当压力传感器2512设置在显示屏2505的下层时,由处理器2501根据用户对显示屏2505的压力操作,实现对UI界面上的可操作性控件进行控制。可操作性控件包括按钮控件、滚动条控件、图标控件、菜单控件中的至少一种。
[0259] 光学传感器2513用于采集环境光强度。在一个实施例中,处理器2501可以根据光学传感器2513采集的环境光强度,控制显示屏2505的显示亮度。具体地,当环境光强度较高时,调高显示屏2505的显示亮度;当环境光强度较低时,调低显示屏2505的显示亮度。在另一个实施例中,处理器2501还可以根据光学传感器2513采集的环境光强度,动态调整摄像头组件2506的拍摄参数。
[0260] 接近传感器2514,也称距离传感器,通常设置在终端2500的前面板。接近传感器2514用于采集用户与终端2500的正面之间的距离。在一个实施例中,当接近传感器2514检测到用户与终端2500的正面之间的距离逐渐变小时,由处理器2501控制显示屏2505从亮屏状态切换为息屏状态;当接近传感器2514检测到用户与终端2500的正面之间的距离逐渐变大时,由处理器2501控制显示屏2505从息屏状态切换为亮屏状态。
[0261] 本领域技术人员可以理解,图25中示出的结构并不构成对终端2500的限定,可以包括比图示更多或更少的组件,或者组合某些组件,或者采用不同的组件布置。
[0262] 本申请实施例还提供了一种计算机可读存储介质,计算机可读存储介质中存储有至少一段程序,至少一段程序由处理器加载并执行,以实现上述任一实现方式的光照渲染方法。
[0263] 本申请实施例还提供了一种计算机程序产品,计算机程序产品包括计算机程序代码,计算机程序代码存储在计算机可读存储介质中,终端的处理器从计算机可读存储介质读取计算机程序代码,处理器执行计算机程序代码,使得终端执行上述任一实现方式的光照渲染方法。
[0264] 在一些实施例中,本申请实施例所涉及的计算机程序产品可被部署在一个终端上执行,或者在位于一个地点的多个终端上执行,又或者,在分布在多个地点且通过通信网络互连的多个终端上执行,分布在多个地点且通过通信网络互连的多个终端可以组成区块链系统。
[0265] 以上仅为本申请的可选实施例,并不用以限制本申请,凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。