光束效果的渲染方法、装置和电子设备与流程
未命名
10-22
阅读:61
评论:0
1.本发明涉及模型渲染技术领域,尤其是涉及一种光束效果的渲染方法、装置和电子设备。
背景技术:
2.在真实的物理世界中,光透过半透明介质时,一部分光被吸收,另一部分光被散射,从而产生光束效果。在3d(3-dimension,三维)渲染中,渲染光束效果的常见方式是,在虚拟相机的视椎范围内,沿着多个方向上划分较多数量的3d子空间,每个3d子空间进行受光计算并进行光照着色,然后沿着特定的方向混合子空间的光照着色,以及体积雾的半透明程度,从而得到体积雾形式的光束效果。该方式的计算量较大,且渲染得到的光束效果会导致其他场景模型的显示清晰度较差。
技术实现要素:
3.有鉴于此,本发明的目的在于提供一种光束效果的渲染方法、装置和电子设备,以减少体积光渲染过程的计算量,并提高光束效果下其他场景模型的显示清晰度。
4.第一方面,本发明实施例提供了一种光束效果的渲染方法,方法包括:获取虚拟场景的当前画面帧;基于当前画面帧对应的相机位置、阴影深度贴图以及历史体积光强度信息,确定当前画面帧的体积光强度贴图;其中,相机位置包括:拍摄当前画面帧时,虚拟相机在虚拟场景中的位置;历史体积光强度信息包括:当前画面帧之前的历史画面帧的体积光强度贴图;基于当前画面帧的体积光强度贴图以及预设的局部强度调整参数,生成当前画面帧的局部强度调整贴图;其中,局部强度调整贴图用于:调整当前画面帧中指定区域中体积光的光强度;基于体积光强度贴图、局部强度调整贴图以及预设的体积光颜色贴图,在当前画面帧上渲染光束效果。
5.第二方面,本发明实施例还提供一种光束效果的渲染装置,装置包括:第一获取模块,用于获取虚拟场景的当前画面帧;第一确定模块,用于基于当前画面帧对应的相机位置、阴影深度贴图以及历史体积光强度信息,确定当前画面帧的体积光强度贴图;其中,相机位置包括:拍摄当前画面帧时,虚拟相机在虚拟场景中的位置;历史体积光强度信息包括:当前画面帧之前的历史画面帧的体积光强度贴图;第一生成模块,用于基于当前画面帧的体积光强度贴图以及预设的局部强度调整参数,生成当前画面帧的局部强度调整贴图;其中,局部强度调整贴图用于:调整当前画面帧中指定区域中体积光的光强度;第一渲染模块,用于基于体积光强度贴图、局部强度调整贴图以及预设的体积光颜色贴图,在当前画面帧上渲染光束效果。
6.第三方面,本发明实施例提供了一种电子设备,包括处理器和存储器,存储器存储有能够被处理器执行的计算机可执行指令,处理器执行计算机可执行指令以实现上述光束效果的渲染方法。
7.第四方面,本发明实施例提供了一种计算机可读存储介质,计算机可读存储介质
存储有计算机可执行指令,计算机可执行指令在被处理器调用和执行时,计算机可执行指令促使处理器实现上述光束效果的渲染方法。
8.本发明实施例带来了以下有益效果:
9.上述光束效果的渲染方法、装置和电子设备,其中,方法包括:获取虚拟场景的当前画面帧;基于当前画面帧对应的相机位置、阴影深度贴图以及历史体积光强度信息,确定当前画面帧的体积光强度贴图;其中,相机位置包括:拍摄当前画面帧时,虚拟相机在虚拟场景中的位置;历史体积光强度信息包括:当前画面帧之前的历史画面帧的体积光强度贴图;基于当前画面帧的体积光强度贴图以及预设的局部强度调整参数,生成当前画面帧的局部强度调整贴图;其中,局部强度调整贴图用于:调整当前画面帧中指定区域中体积光的光强度;基于体积光强度贴图、局部强度调整贴图以及预设的体积光颜色贴图,在当前画面帧上渲染光束效果。该方式中,根据当前画面帧对应的虚拟场景中的相机位置、阴影深度贴图以及历史画面帧的体积光强度贴图,确定当前画面帧的体积光强度贴图,减少了渲染的计算量;根据当前画面帧的体积光强度贴图和预设的局部强度调整参数,调整当前画面帧中指定局部区域体积光的光强度,得到当前画面帧的局部强度调整贴图,用于强调光束效果,从而避免其他场景模型的显示清晰度降低。该方式下,减少了体积光渲染过程的计算量,提高了光束效果下其他场景模型的显示清晰度。
10.本发明的其他特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点在说明书、权利要求书以及附图中所特别指出的结构来实现和获得。
11.为使本发明的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
附图说明
12.为了更清楚地说明本发明具体实施方式或现有技术中的技术方案,下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施方式,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
13.图1为本发明实施例提供的一种体积光效果的示意图;
14.图2为本发明实施例提供的一种光束效果的渲染方法的流程图;
15.图3为本发明实施例提供的一条射线步进过程的示意图;
16.图4为本发明实施例提供的步进起始点的随机抖动的示意;
17.图5为本发明实施例提供的一种光束效果的示意图;
18.图6为本发明实施例提供的一种光束效果的渲染装置的示意图;
19.图7为本发明实施例提供的一种电子设备的结构示意图。
具体实施方式
20.为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合附图对本发明的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有做出创造性劳动前提下所
获得的所有其他实施例,都属于本发明保护的范围。
21.体积光是游戏中使用的一种光照特效,用来表现光线照射到遮蔽物体时,在物体周围呈现出透光的放射性泄露,这里泄露出的光束可以理解为体积光,例如:太阳光照射在树枝上时,阳光会从树叶的缝隙中透过形成光束。
22.相关技术中,可以在显示的屏幕范围内,计算光源的屏幕位置坐标以及屏幕范围内物体的深度信息,利用径向模糊算法渲染画面,使光从光源开始扩散,实现体积光效果。但该方式有诸多限制,首先只适用于平行光源,其次需要平行光光源处于显示的屏幕范围内,因此这种方式不具备普遍适用性。
23.另外,还有一种利用体积雾渲染光束效果的方式,可以在相机的视锥范围内的上下左右前后多个方向划分成很多小的3d子空间,每个子空间作为一个体积雾受光计算单位进行光照着色,最终从相机的前后方向混合这些光照的着色和受雾的半透明程度,得到最终的体积雾形式的光束效果,如图1所示,该方式物理真实,可以支持任意类型的灯光,但渲染过程中为了产生高清的光束,需要很大的3d子空间分辨率,计算量较大,同时需要给画面渲染很浓的雾才能产生明显的光束效果,使得渲染后其他场景模型显示清晰度较差。
24.基于此,本发明实施例提供了一种光束效果的渲染方法、装置和电子设备,该技术可以应用在游戏或其他虚拟场景中,可以减少体积光渲染过程的计算量,提高光束效果下其他场景模型的显示清晰度,同时也可以不受光源类型限制,具备普遍适用性。
25.为便于对本实施例进行理解,首先对本发明实施例所公开的一种光束效果的渲染方法进行详细介绍,如图2所示,本方法包括如下步骤:
26.步骤s202、获取虚拟场景的当前画面帧;
27.上述当前画面帧为当前时刻待进行光束渲染的一帧图像,图像中包含虚拟场景,该虚拟场景可以是对真实世界的仿真环境,也可以是半仿真半虚构的虚拟环境,还可以是纯虚构的虚拟环境,虚拟场景中可以包括虚拟地形、虚拟植被、虚拟云朵、虚拟石头等场景模型。
28.可以通过虚拟相机采集或者进行视频截取方式获取当前画面帧。
29.步骤s204、基于当前画面帧对应的相机位置、阴影深度贴图以及历史体积光强度信息,确定当前画面帧的体积光强度贴图;其中,相机位置包括:拍摄该当前画面帧时,虚拟相机在虚拟场景中的位置;历史体积光强度信息包括:当前画面帧之前的历史画面帧的体积光强度贴图;
30.上述相机位置是拍摄该当前画面帧时,虚拟相机在虚拟场景中的位置,也就是虚拟相机的世界位置。上述体积光强度贴图是记录体积光强度信息的贴图,用来给当前画面帧渲染光束效果,其中,体积光强度信息包括光照的亮度。体积光强度贴图还指示了当前画面帧中需要显示体积光的区域。例如,具有体积光强度信息的像素区域为显示体积光的区域,没有体积光强度信息或者体积光强度信息为零的像素区域为不显示体积光的区域。
31.上述阴影深度贴图是将当前画面帧中的虚拟场景变换到阴影深度贴图空间,从光源的视角生成的一张深度图。阴影深度贴图上储存了光源的各个方向上所见的最近深度值。上述历史体积光强度信息可以是当前画面帧之前的历史画面帧的体积光强度贴图。
32.可以理解的是,画面帧是由整齐排列的多行和多列像素点组成,每个像素点都有对应的像素位置和该像素位置上的渲染深度值,像素位置可以用uv坐标表示,渲染深度值
可以通过画面帧的渲染深度贴图获取,像素位置上的渲染深度值记录了虚拟场景中该像素位置对应的场景位置到虚拟相机的距离。在这里,可以通过画面帧中像素位置上的渲染深度值和虚拟相机的位置,得到该像素位置在虚拟场景中对应的场景位置信息。利用该场景位置信息、相机位置和阴影深度贴图中的深度值,可以通过射线步进等方式确定该像素位置的光照强度信息。进一步地,获取当前画面帧中每个像素位置对应的光照强度信息,就可以组成当前画面帧的初始光照强度贴图。
33.为了提高光照效果和渲染精确度,在这里,将当前画面帧的初始光照强度贴图和历史体积光强度信息进行混合处理,得到当前画面帧的体积光强度贴图。需要说明的是,此处的历史体积光强度信息可以是当前画面帧之前的一个或者多个历史画面帧的体积光强度贴图,多个体积光强度贴图的具体个数也可以根据具体情况进行设置,如果当前画面帧是第一帧时,历史画面帧的体积光强度贴可以用黑色且完全透明的贴图代替。
34.本步骤中,根据当前画面帧对应的相机位置、阴影深度贴图以及历史体积光强度信息,就可以确定当前画面帧的体积光强度贴图,渲染的计算量较低。历史体积光强度信息的加入,提高了当前画面帧的体积光强度贴图的光照效果和渲染精确度。
35.步骤s206、基于当前画面帧的体积光强度贴图以及预设的局部强度调整参数,生成当前画面帧的局部强度调整贴图;其中,该局部强度调整贴图用于:调整当前画面帧中指定区域中体积光的光强度;
36.上述局部强度调整参数是用来调整画面帧中局部区域光强度的参数的统称,例如协调各区域光照强度的比例参数、指定区域光照强度的调整阈值、光强度偏移参数等,这些参数的数值可以根据实际效果需要设置或经过计算得到。上述局部强度调整贴图是记录画面帧各局部区域的光强度调整数据的贴图,用于调整当前画面帧中指定区域中体积光的光强度。
37.在这里,需要借助当前画面帧的体积光强度贴图上的光强度数据,再结合各局部强度调整参数,得到局部强度调整贴图。局部强度调整贴图中可以只突出指定区域的光束效果,不影响画面帧其他区域中场景模型的显示清晰度。实际实现时,还可以将局部强度调整贴图与当前画面帧的上一个画面帧的局部强度调整贴图进行混合处理,得到当前画面帧的最终局部强度调整贴图,以提高渲染效果。
38.步骤s208、基于体积光强度贴图、局部强度调整贴图以及预设的体积光颜色贴图,在当前画面帧上渲染光束效果。
39.为了更好的渲染效果,还需要制作体积光颜色贴图,为体积光渲染上颜色。最后根据得到的体积光强度贴图、局部强度调整贴图以及预设的体积光颜色贴图,在当前画面帧上渲染光束效果。通过该方式为画面帧渲染光束效果,减少了体积光渲染过程的计算量,提高了光束效果下其他场景模型的显示清晰度。
40.上述光束效果的渲染方法、装置和电子设备,其中,方法包括:获取虚拟场景的当前画面帧;基于当前画面帧对应的相机位置、阴影深度贴图以及历史体积光强度信息,确定当前画面帧的体积光强度贴图;其中,相机位置包括:拍摄当前画面帧时,虚拟相机在虚拟场景中的位置;历史体积光强度信息包括:当前画面帧之前的历史画面帧的体积光强度贴图;基于当前画面帧的体积光强度贴图以及预设的局部强度调整参数,生成当前画面帧的局部强度调整贴图;其中,局部强度调整贴图用于:调整当前画面帧中指定区域中体积光的
光强度;基于体积光强度贴图、局部强度调整贴图以及预设的体积光颜色贴图,在当前画面帧上渲染光束效果。该方式中,根据当前画面帧对应的虚拟场景中的相机位置、阴影深度贴图以及历史画面帧的体积光强度贴图,确定当前画面帧的体积光强度贴图,减少了渲染的计算量;根据当前画面帧的体积光强度贴图和预设的局部强度调整参数,调整当前画面帧中指定局部区域体积光的光强度,得到当前画面帧的局部强度调整贴图,用于强调光束效果,从而避免其他场景模型的显示清晰度降低。该方式下,减少了体积光渲染过程的计算量,提高了光束效果下其他场景模型的显示清晰度。
41.下述实施例提供确定当前画面帧的体积光强度贴图的具体实现方式。
42.确定当前画面帧中像素位置在虚拟场景中对应的场景位置;在场景位置和相机位置之间确定指定数量的目标位置,基于阴影深度贴图确定目标位置的光照状态;基于目标位置的光照状态,确定像素位置对应的初始体积光强度;基于像素位置对应的初始体积光强度,以及历史体积光强度信息,确定当前画面帧的体积光强度贴图。
43.该方式中,需要先确定当前画面帧中像素位置在虚拟场景中对应的场景位置,像素位置与场景位置之间的对应关系,可以基于虚拟相机的拍摄参数确定,例如,虚拟相机在虚拟场景中的相机位置、拍摄朝向,以及虚拟相机的各类矩阵参数等。然后,再确定该场景位置和相机位置之间的多个目标位置,在实际实现时,可以在场景位置和相机位置之间生成一条直线,然后在该直线上随机的或者按照一定的规律选取多个目标位置。最后,根据目标位置的光照状态确定像素位置对应的初始体积光强度,最后根据像素位置对应的初始体积光强度以及历史体积光强度信息,确定当前画面帧的体积光强度贴图。例如,将初始体积光强度和历史体积光强度进行加权、混合等处理,得到体积光强度贴图。
44.下面对该过程的实现方式依次进行介绍:
45.首先,提供确定当前画面帧中像素位置在虚拟场景中对应的场景位置的实现方式。
46.具体地,获取当前画面帧的渲染深度贴图,从渲染深度贴图中获取像素位置的渲染深度值;基于渲染深度值,确定像素位置在虚拟相机的投影空间中的齐次坐标;基于预设的第一空间转换矩阵,将齐次坐标转换至虚拟场景对应的世界空间,得到像素位置在虚拟场景中对应的场景位置。
47.上述渲染深度贴图为当前画面帧的渲染结果的深度贴图,也可以称为当前画面帧的实时渲染的depth texture。可以理解的,为了让画面产生三维的空间效果,当前画面帧中每个像素点对应的像素位置上需要渲染上对应的深度值,通过画面帧的渲染深度贴图得到各个像素位置的渲染深度值。上述第一空间转换矩阵用于将投影空间坐标系转换为世界空间坐标系,可以实现像素位置从投影空间到世界空间的坐标转换。上述像素位置在虚拟场景中对应的场景位置包括像素位置在虚拟场景中对应的场景位置坐标和方向向量。
48.一种具体地实现方式中,根据渲染深度贴图中像素位置上的渲染深度值,得到当前画面帧中某一像素位置在虚拟相机的投影空间中的齐次坐标q1,q1表示为(x,y,z,w),其中,x和y分量根据当前画面帧的尺寸和像素在画面帧的位置计算得到;z分量是根据x,y分量的位置转换成uv坐标后,在渲染深度贴图中根据uv坐标采样得到的非线性深度值;w分量则为齐次坐标的位置属性,可以固定设置为1。接着,将齐次坐标q1与第一空间转换矩阵m1做乘积处理,可得到该像素位置对应的世界位置坐标,也就是像素位置在虚拟场景中对应的
场景位置坐标;第一空间转换矩阵也可以理解为,当前画面帧的投影矩阵到世界矩阵的变化矩阵,表示为mat4x4_projtoworld。
49.将该场景位置坐标减去虚拟相机在虚拟场景中的位置坐标,归一化可得到该像素位置在虚拟场景中对应的场景位置中的方向向量,该方向可简称为像素方向。依照此方式,可以获取当前画面帧中所有像素位置在虚拟场景中对应的场景位置。
50.进一步地,下述提供确定指定数量的目标位置的实现方式。
51.具体地,基于场景位置和相机位置,生成目标射线;在目标射线上获取指定数量的目标位置;其中,相邻的目标位置之间的距离相同;距离相机位置最近的目标位置,在指定的射线范围内随机确定。
52.该方式中,根据场景位置和相机位置,采用射线步进技术在目标射线上获取指定数量的多个目标位置。在这里,射线步进技术可以理解为,在世界空间下的虚拟场景中,以相机位置为起点,以像素方向发射射线,射线按照从步进起始点开始按照指定的步进次数以一定步长开始步进,并返回每一步步进到的位置,直至射线到达像素位置在虚拟场景中对应的场景位置。上述目标位置包括步进起始点和每一步步进到的位置。
53.一种具体地方式中,以画面帧中一个像素位置的像素点为例,根据相机位置v
x
,某一像素方向vf,该像素位置对应的场景位置vw,从相机位置v
x
开始生成一条vf方向的射线用于步进,根据场景位置和相机位置之间的距离设置步进次数,从相机位置端的步进起始点开始步进,每一步步进的步长相等,记录每一次步进到的位置,将步进起始点和每一步步进到的位置确定为目标位置,可以得到该条射线上所有目标位置的位置信息。如图3所示,从相机位置发出的一条射线分成4步步进达到像素对应的场景模型上的位置,目标位置为v1、v2、v3、v4、v5。其中,v1为步进起始点,v5为像素位置对应的场景位置。
54.实际实现时,步进起始点可以通过下述方式确定:每帧设置一个低差异序列的0-1范围随机数r,对步进起始点进行偏移抖动,得到当前帧对应的更新后的步进起始点位置,更新后的步进起始点位置=步进的初始距离位置+每步步长向量*r。图4为每帧步进起始点的随机抖动示意,四种步进方式中,步进起始点均不同,但步进距离相同。该方式下每帧画面帧步进起始点实时随机生成,可以有效改善步数不足导致的渲染精度问题,得到精确平滑的结果。
55.需要说明的是,正常情况下射线步进到像素位置对应的场景位置vs即可,特殊情况下,如果vs为无限远,可以提供一个最远距离参数作为射线的最远距离,根据该最远距离确定目标位置。
56.进一步地,获取到目标位置后,需要根据阴影深度贴图确定目标位置的光照状态,下述提供确定目标位置的光照状态的实现方式。
57.具体地,基于预设的第二空间转换矩阵,将目标位置从世界空间转换至阴影深度贴图空间,得到目标位置在阴影深度贴图空间中的位置坐标;从阴影深度贴图中获取目标位置对应的深度值;基于位置坐标的深度分量和目标位置对应的深度值之间的大小关系,确定目标位置的光照状态;其中,光照状态包括:目标位置被虚拟场景中的虚拟光源照射,或者,目标位置没有被虚拟场景中的虚拟光源照射。
58.上述第二空间转换矩阵用于将光源在世界空间中的位置坐标映射到阴影深度贴图的二维空间中,可以实现目标位置从世界空间到阴影深度贴图空间的坐标转换。
59.一个具体实现方式中,射线步进过程中记录到目标位置坐标v1、v2、v3、v4、v5,这些坐标是世界空间下虚拟场景中的位置坐标,将这些位置坐标依次分别与第二空间转换矩阵m2做乘积处理,得到目标位置在阴影深度贴图空间中的位置坐标y1、y2、y3、y4、y5;其中,y1、y2、y3、y4、y5坐标中的x、y分量用于从阴影深度贴图中获取目标位置对应的深度值,y1、y2、y3、y4、y5坐标中的z分量为4个目标位置对应的深度分量。
60.获取目标位置对应的深度值,比较深度分量和目标位置对应的深度值之间的大小关系,可以确定目标位置的光照状态。示例地,将y1、y2、y3、y4、y5坐标中的x、y分量依次转换为uv坐标,根据uv坐标采样阴影深度贴图,得到目标位置对应的深度值,依次为s1、s2、s3、s4、s5;将深度值s1、s2、s3、s4、s5分别与对应的y1、y2、y3、y4、y5坐标中的z分量比较,如果深度值小于或等于z分量,说明该目标位置没有被虚拟场景中的虚拟光源照射;如果深度值大于z分量,说明该目标位置被虚拟场景中的虚拟光源照射。
61.进一步地,下述提供确定像素位置对应的初始体积光强度实现方式。
62.具体地,统计目标位置中,被虚拟光源照射的目标位置的第一数量,以及没有被虚拟光源照射的目标位置的第二数量;基于第一数量和第二数量,确定像素位置对应的初始体积光强度;其中,第一数量越大,初始体积光强度越大;第二数量越大,初始体积光强度越小。
63.也就是说,统计一条射线中被虚拟光源照射的目标位置的数量,记为第一数量,统计该射线中没有被虚拟光源照射的目标位置的数量,记为第二数量。第一数量越大,说明该像素位置对应的初始体积光强度越大;第二数量越大,说明该像素位置对应的初始体积光强度越小。最后根据第一数量和第二数量,确定像素位置对应的初始体积光强度。示例地,可以根据第一数量和第二数量进行比例计算,根据比例值赋予对应的体积光初始强度值,得到该像素位置对应的初始体积光强度。
64.最后,下述提供根据像素位置对应的初始体积光强度以及历史体积光强度信息,确定当前画面帧的体积光强度贴图的实现方式。
65.具体地,历史体积光强度信息具体为当前画面帧的上一个画面帧的体积光强度贴图。将当前画面帧中每个像素位置对应的初始体积光强度,组成当前画面帧的初始强度贴图;按照预设第一权重,将初始强度贴图和上一个画面帧的体积光强度贴图进行混合处理,得到当前画面帧的体积光强度贴图。
66.也就是说,将当前画面帧中每一个像素按照前述方式得到像素的初始体积光强度,就可以按照像素位置分布,组成当前画面帧的初始强度贴图,最后,根据预设的第一权重,将初始强度贴图和上一个画面帧的体积光强度贴图中对应像素位置的体积光强度进行混合处理,得到当前画面帧的体积光强度贴图。
67.一个具体实施方式中,获取当前帧投影矩阵到上一帧投影矩阵的变化矩阵m3,m3可以通过上一个画面帧的投影矩阵与当前画面帧的投影矩阵做除法运算得到。再获取当前画面帧中像素位置x1在虚拟相机的投影空间中的齐次坐标q1,将q1与m3做乘积处理,得到像素位置x1在上一个画面帧中像素位置x0的uv坐标,根据该坐标从上一个画面帧对应的体积光强度贴图中得到x0的初始体积光强度,将x0的初始体积光强度和x1初始体积光强度按照预设的第一权重进行混合,得到当前画面帧x0的体积光强度。按照这种方式,可以获取当前画面帧中每个像素位置的体积光强度,将每个像素位置的体积光强度按照像素位置分布,组
成当前画面帧的体积光强度贴图。
68.上述根据像素位置对应的初始体积光强度,以及历史体积光强度信息,确定当前画面帧的体积光强度贴图的方式,可以有效改善步数不足导致的精度问题,得到精确平滑的结果,同时,还减少了体积光渲染过程的计算量。
69.一些特殊情况中,例如在性能要求极其苛刻的情况下,为了把消耗降到更低,会在渲染过程中设置更低的输出分辨率和更少的步进次数,这时体积光强度贴图可能会产生一些不精确噪点,此时,可以对体积光强度贴图进行模糊处理改善噪点。具体地,根据预先设置的模糊程度参数,例如模糊方向、模糊尺度等,对体积光强度贴图进行模糊处理,得到当前画面帧的最终的体积光强度贴图,该方式可以在低耗能的同时,有效改善噪点丰富渲染效果。
70.下述实施例提供生成局部强度调整贴图的具体实现方式。
71.具体地,确定体积光强度贴图对应的全局平均强度,以及体积光强度贴图中多个第一贴图区域的第一区域强度;基于预设的强度混合比例,对全局平均强度和第一区域强度进行混合处理,得到第一贴图区域对应的中间强度结果;基于中间强度结果以及预设的局部强度调整参数,生成当前画面帧的局部强度调整贴图。
72.上述体积光强度贴图可以是当前画面帧的体积光强度贴图,也可以是进行模糊处理后的当前画面帧最终的体积光强度贴图。上述第一贴图区域可以理解为,需要将体积光强度贴图进行降采样处理并划分为多个尺寸相同的贴图区域,这些贴图区域就是第一贴图区域。上述第一区域强度是对应于每一个第一贴图区域的平均光强度值。上述全局平均强度为整个体积光强度贴图的平均光强度值。上述局部强度调整参数是用来调整画面帧中局部区域光强度的参数,例如协调各区域光照强度的比例参数、指定区域光照强度的调整阈值、体积光强度偏移参数等。
73.一个实现方式中,可以通过体积光强度贴图降采样到16x16像素的大小,产生256个16x16像素大小的第一贴图区域,进一步地,根据像素位置和体积光强度贴图中体积光强度的对应关系,可以得到第一贴图区域中每个像素位置对应的体积光强度值,进而得到体积光强度贴图中每个第一贴图区域对应的第一区域强度值l1n,其中,n是1到256中的任意整数;当对所有第一贴图区域的体积光强度值累计采样后,可以确定整个体积光强度贴图对应的全局平均强度l0。
74.进一步地,根据预先设置的强度混合比例,对全局平均强度和第一区域强度进行混合处理,得到第一贴图区域对应的中间强度结果;然后再根据中间强度结果以及预设的局部强度调整参数,生成当前画面帧的局部强度调整贴图。
75.具体地,第一贴图区域对应的中间强度结果可以通过如下方式得到:
76.对体积光强度贴图进行划分处理,得到多个第二贴图区域;其中,第二贴图区域的区域尺寸大于第一贴图区域的贴图尺寸;确定第二贴图区域的第二区域亮度;基于第一贴图区域和第二贴图区域之间的位置关系,以及预设的强度混合比例,对全局平均强度、第一区域强度和第二区域强度进行混合处理,得到第一贴图区域对应的中间强度结果。
77.可以理解的,上述第二贴图区域是由体积光强度贴图降采样处理得到的多个尺寸相同的贴图区域,并且,第二贴图区域的区域尺寸要大于第一贴图区域的贴图尺寸,示例地,当第一贴图区域为16x16像素时,第二贴图区域可以为4x4像素的尺寸。上述第二区域强
度是对应于每个第二贴图区域的平均光强度值。
78.一个具体实现方式中,可以通过体积光强度贴图降采样到4x4像素大小,产生4x4像素的共16个贴图区域,每个贴图区域作为第二贴图区域,进一步地,获取像素位置在第二贴图区域的坐标,进行线性插值处理,可以得到每个第二贴图区域对应的第二区域强度l2i,其中,i是1到16中的任意整数,进一步地,根据第一贴图区域和第二贴图区域之间的位置关系,以及预设的强度混合比例,对l0,l1n,l2i进行混合处理,得到第一贴图区域中的体积光强度值l3n,其中,n是1到256中的任意整数。该l3n为第一贴图区域对应的中间强度结果。
79.进一步地,下述提供基于中间强度结果以及预设的局部强度调整参数,生成当前画面帧的局部强度调整贴图的实现方式。
80.具体地,基于预设的强度调整范围参数和强度偏移参数,对中间强度结果进行调整处理,得到贴图区域对应的调整强度结果;基于贴图区域对应的调整强度结果,以及历史画面帧对应的局部强度调整贴图,得到当前画面帧的局部强度调整贴图。
81.可以理解的,画面帧的体积光强度调整有个范围,同样的,每个第一贴图区域也是在一个范围内进行调整的,上述强度调整范围参数包括整体强度调整最小值和整体强度调整最大值,需要说明的是,强度调整范围参数的数值是以一个第一贴图区域为单位赋予的参数值,不同第一贴图区域对应的强度调整范围参数的数值大小可能相同,也可能不同。上述强度偏移参数可以改变体积光强度的偏移量大小。
82.在这里,需要根据预设的强度调整范围参数和强度偏移参数,对中间强度结果进行调整处理,得到每个第一贴图区域对应的调整强度结果,再结合历史画面帧对应的局部强度调整贴图,才能得到当前画面帧的局部强度调整贴图。
83.其中,贴图区域对应的调整强度结果可以通过下述方式得到:
84.具体地,基于预设的强度调整范围参数,将中间强度结果限定在指定的强度范围内,得到第一强度结果;通过强度偏移参数对第一强度结果进行偏移处理,得到贴图区域对应的调整强度结果。
85.上述第一强度结果可以采用区间限定函数得到。
86.一个具体实现方式中,以一个第一贴图区域的中间强度结果l31为例。本实施例可以提供一个调整强度结果的计算公式,
87.p=log2(l31)
88.k=clamp(-p,a
min
,a
max
)+a
add
89.l41=pow(2,k)
90.其中,l31为第一贴图区域对应的中间强度结果;a
min
为强度调整范围参数中的整体强度调整最小值;a
max
为强度调整范围参数中的整体强度调整最大值;a
add
为强度偏移参数;通过clamp函数将-p限定在a
min
和a
max
之间,clamp(-p,a
min
,a
max
)为第一强度结果;l41为该第一贴图区域对应的调整强度结果。
91.一种方式下,在获取贴图区域对应的调整强度结果,还可以考虑加入体积光各向异性参数。
92.具体地,获取虚拟场景中虚拟光源的光源方向;基于光源方向,确定待渲染光束效果的体积光各向异性参数;将体积光各向异性参数与调整强度结果进行混合处理,得到贴
图区域对应的最终的调整强度结果。
93.上述体积光各向异性参数用来得到体积光的各向异性,利用体积光各向异性参数可以模拟出光源向物体投射的光和体积阴影所产生模拟稀薄,均匀的大气散射的光线效果。体积光各向异性参数包括介质的各向异性强度和介质浓度。
94.可以理解的,在射线步进过程中,每个像素的射线方向和光线方向相对方向的不同,营造的光线效果也不同,因此,需要在射线步进的计算中,可以对目标位置坐标和光源位置坐标做减法运算,获取到当前的光源方向,根据光源方向确定待渲染光束效果的体积光各向异性参数,如果光源是平行光,这个光源方向则是固定参数;如果是其他类型光源,则需要获取步进过程中各个目标位置对应的光源方向,根据光源方向确定对应的体积光各向异性参数,最后,将体积光各向异性参数与调整强度结果进行混合处理,得到贴图区域对应的最终的调整强度结果。
95.进一步地,下述提供基于贴图区域对应的调整强度结果,以及历史画面帧对应的局部强度调整贴图,得到当前画面帧的局部强度调整贴图的具体实现方式。
96.将每个贴图区域对应的调整强度结果,组成当前画面帧的初始调整贴图;基于预设第二权重,将初始调整贴图和当前画面帧的上一个画面帧的局部强度调整贴图进行混合处理,得到当前画面帧的局部强度调整贴图。
97.也就是说,得到每个第一贴图区域对应的调整强度结果后,将每个第一贴图区域按照当前画面帧中的像素位置,组成当前画面帧的初始调整贴图,根据预设第二权重,将当前画面帧中的对应像素位置在初始调整贴图的局部强度调整数据和上一个画面帧的局部强度调整贴图中的局部强度调整数据进行混合处理,得到当前画面帧中每个像素位置对应的最终局部强度调整数据,组成当前画面帧的局部强度调整贴图。需要说明的是,如果当前画面帧为第一帧,上一个画面帧的局部强度调整贴图也可以用黑色完全透明的贴图替代。
98.该方式中,通过将当前画面帧的初始调整贴图与上一个画面帧的局部强度调整贴图进行混合处理,得到当前画面帧的局部强度调整贴图,用于调整当前画面帧中指定区域中体积光的光强度,该方式下,提高了当前画面帧的体积光调整精度。
99.一个实施例中,依据上述光束效果的渲染方法提供了一个体积光的渲染实现装置,对该装置对体积光的渲染过程进行了介绍,该过程可以分为六个步骤,每一步对应了gpu的渲染调用:
100.首先,在进行渲染之前,需要获取本发明实现的输入依赖:
101.a、光源的阴影深度贴图(即实时渲染的阴影深度贴图);
102.b、渲染深度贴图(即实时渲染的渲染深度贴图);
103.c、渲染结果对应的相机参数信息,包括:相机的位置参数、方向、各种变换矩阵;
104.d、本体积光装置实现提供的功能参数,包括:体积光颜色,射线步进次数,整体强度调整最小值,整体强度调整最大值,整体强度调整偏移,局部强度调整比例,模糊程度参数,介质的各向异性强度,介质浓度;
105.e、上一帧的本体积光装置的一些中间步骤结果,包括:画面帧的初始强度贴图、画面帧的初始调整贴图;
106.光束效果的渲染过程步骤如下:
107.步骤1),根据本发明实现的输入依赖的a、b、c和e,进行射线步进采样计算,得到产
生了当前画面帧的体积光强度贴图,如果当前画面帧是第一帧时,历史画面帧的体积光强度贴可以用黑色且完全透明的贴图代替。
108.步骤2),该步骤是可选步骤,根据预设的模糊程度参数改善噪点,得到当前画面帧的最终的体积光强度贴图。
109.步骤3),对步骤2)或步骤1)中的结果进行降采样,通过一系列gpu快速降采样方法(通常为kawase降采样方法),缩小到16x16的分辨率tex_16x16和4x4的分辨率tex_4x4。
110.步骤4),根据的tex_16x16和tex_4x4,结合d中整体强度调整最小值、整体强度调整最大值、整体强度调整偏移、局部强度调整比例,调整当前画面中局部区域和全局区域对应的光照强度、调整光照的各向异性参数,得到画面帧的局部强度调整贴图。
111.步骤5),根据步骤4)和步骤2)中的结果,或者,步骤4)和步骤1)中结果以及参数d中的体积光颜色,得到体积光的最终结果。
112.步骤6),将步骤5)中体积最终结果混合到最终画面中。最终的渲染结果如图5所示。
113.该方式下,减少了体积光渲染过程的计算量,提高了光束效果下其他场景模型的显示清晰度。通过上述方式实现的体积光,能同时实现高分辨率的清晰的光束效果、又能做到较低的消耗,且兼顾不朦胧的远景,
114.对应于上述方法实施例,参见图6所示的一种光束效果的渲染装置的示意图,该装置包括:
115.第一获取模块602,用于获取虚拟场景的当前画面帧;
116.第一确定模块604,用于基于当前画面帧对应的相机位置、阴影深度贴图以及历史体积光强度信息,确定当前画面帧的体积光强度贴图;其中,相机位置包括:拍摄当前画面帧时,虚拟相机在虚拟场景中的位置;历史体积光强度信息包括:当前画面帧之前的历史画面帧的体积光强度贴图;
117.第一生成模块606,用于基于当前画面帧的体积光强度贴图以及预设的局部强度调整参数,生成当前画面帧的局部强度调整贴图;其中,局部强度调整贴图用于:调整当前画面帧中指定区域中体积光的光强度;
118.第一渲染模块608,用于基于体积光强度贴图、局部强度调整贴图以及预设的体积光颜色贴图,在当前画面帧上渲染光束效果。
119.该方式中,根据当前画面帧对应的虚拟场景中的相机位置、阴影深度贴图以及历史画面帧的体积光强度贴图,确定当前画面帧的体积光强度贴图,减少了渲染的计算量;根据当前画面帧的体积光强度贴图和预设的局部强度调整参数,调整当前画面帧中指定局部区域体积光的光强度,得到当前画面帧的局部强度调整贴图,用于强调光束效果,避免其他场景模型的显示清晰度降低;最后,根据体积光强度贴图、局部强度调整贴图以及预设的体积光颜色贴图,在当前画面帧上渲染光束效果。该方式下,减少了体积光渲染过程的计算量,提高了光束效果下其他场景模型的显示清晰度。
120.上述第一确定模块,还用于确定当前画面帧中像素位置在虚拟场景中对应的场景位置;在场景位置和相机位置之间确定指定数量的目标位置,基于阴影深度贴图确定目标位置的光照状态;基于目标位置的光照状态,确定像素位置对应的初始体积光强度;基于像素位置对应的初始体积光强度,以及历史体积光强度信息,确定当前画面帧的体积光强度
贴图。
121.上述装置还包括第二获取模块,用于获取当前画面帧的渲染深度贴图,从渲染深度贴图中获取像素位置的渲染深度值;基于渲染深度值,确定像素位置在虚拟相机的投影空间中的齐次坐标;基于预设的第一空间转换矩阵,将齐次坐标转换至虚拟场景对应的世界空间,得到像素位置在虚拟场景中对应的场景位置。
122.上述装置还包括第三获取模块,用于基于场景位置和相机位置,生成目标射线;在目标射线上获取指定数量的目标位置;其中,相邻的目标位置之间的距离相同;距离相机位置最近的目标位置,在指定的射线范围内随机确定。
123.上述装置还包括第二确定模块,用于基于预设的第二空间转换矩阵,将目标位置转换至阴影深度贴图空间,得到目标位置在阴影深度贴图空间中的位置坐标;从阴影深度贴图中获取目标位置对应的深度值;基于位置坐标的深度分量和目标位置对应的深度值之间的大小关系,确定目标位置的光照状态;其中,光照状态包括:目标位置被虚拟场景中的虚拟光源照射,或者,目标位置没有被虚拟场景中的虚拟光源照射。
124.上述装置还包括第三确定模块,用于统计目标位置中,被虚拟光源照射的目标位置的第一数量,以及没有被虚拟光源照射的目标位置的第二数量;基于第一数量和所述第二数量,确定像素位置对应的初始体积光强度;其中,第一数量越大,初始体积光强度越大;第二数量越大,初始体积光强度越小。
125.上述历史体积光强度信息包括:所述当前画面帧的上一个画面帧的体积光强度贴图;上述装置还包括第四获取模块,用于将当前画面帧中每个像素位置对应的初始体积光强度,组成当前画面帧的初始强度贴图;按照预设第一权重,将初始强度贴图和上一个画面帧的体积光强度贴图进行混合处理,得到上述当前画面帧的体积光强度贴图。
126.上述装置还包括模糊处理模块,用于基于预设的模糊程度参数,对体积光强度贴图进行模糊处理,得到当前画面帧的最终的体积光强度贴图。
127.上述第一生成模块,还用于确定体积光强度贴图对应的全局平均强度,以及体积光强度贴图中多个第一贴图区域的第一区域强度;基于预设的强度混合比例,对全局平均强度和第一区域强度进行混合处理,得到第一贴图区域对应的中间强度结果;基于中间强度结果以及预设的局部强度调整参数,生成上述当前画面帧的局部强度调整贴图。
128.上述装置还包括第五获取模块,用于对体积光强度贴图进行划分处理,得到多个第二贴图区域;其中,第二贴图区域的区域尺寸大于所述第一贴图区域的贴图尺寸;确定第二贴图区域的第二区域亮度;基于第一贴图区域和第二贴图区域之间的位置关系,以及预设的强度混合比例,对全局平均强度、第一区域强度和第二区域强度进行混合处理,得到第一贴图区域对应的中间强度结果。
129.上述装置还包括第六获取模块,用于基于预设的强度调整范围参数和强度偏移参数,对中间强度结果进行调整处理,得到贴图区域对应的调整强度结果;基于贴图区域对应的调整强度结果,以及历史画面帧对应的局部强度调整贴图,得到当前画面帧的局部强度调整贴图。
130.上述装置还包括第七获取模块,用于基于预设的强度调整范围参数,将上述中间强度结果限定在指定的强度范围内,得到第一强度结果;通过强度偏移参数对上述第一强度结果进行偏移处理,得到贴图区域对应的调整强度结果。
131.上述装置还包括第八获取模块,用于获取上述虚拟场景中虚拟光源的光源方向;基于光源方向,确定待渲染光束效果的体积光各向异性参数;将体积光各向异性参数与调整强度结果进行混合处理,得到上述贴图区域对应的最终的调整强度结果。
132.上述装置还包括第九获取模块,用于将每个贴图区域对应的调整强度结果,组成当前画面帧的初始调整贴图;基于预设第二权重,将初始调整贴图和当前画面帧的上一个画面帧的局部强度调整贴图进行混合处理,得到当前画面帧的局部强度调整贴图。
133.本实施例还提供一种电子设备,包括处理器和存储器,存储器存储有能够被处理器执行的计算机可执行指令,处理器执行计算机可执行指令以实现上述光束效果的渲染方法。该电子设备可以是服务器,也可以是终端设备。参见图7所示,该电子设备包括处理器100和存储器101,该存储器101存储有能够被处理器100执行的计算机可执行指令,该处理器100执行计算机可执行指令以实现上述光束效果的渲染方法。
134.进一步地,图7所示的电子设备还包括总线102和通信接口103,处理器100、通信接口103和存储器101通过总线102连接。其中,存储器101可能包含高速随机存取存储器(ram,random access memory),也可能还包括非不稳定的存储器(non-volatile memory),例如至少一个磁盘存储器。通过至少一个通信接口103(可以是有线或者无线)实现该系统网元与至少一个其他网元之间的通信连接,可以使用互联网,广域网,本地网,城域网等。总线102可以是isa总线、pci总线或eisa总线等。所述总线可以分为地址总线、数据总线、控制总线等。为便于表示,图7中仅用一个双向箭头表示,但并不表示仅有一根总线或一种类型的总线。处理器100可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器100中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器100可以是通用处理器,包括中央处理器(central processing unit,简称cpu)、网络处理器(network processor,简称np)等;还可以是数字信号处理器(digital signal processor,简称dsp)、专用集成电路(application specific integrated circuit,简称asic)、现场可编程门阵列(field-programmable gate array,简称fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本发明实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本发明实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器101,处理器100读取存储器101中的信息,结合其硬件完成前述实施例的方法的步骤。
135.该方式中,根据当前画面帧对应的虚拟场景中的相机位置、阴影深度贴图以及历史画面帧的体积光强度贴图,确定当前画面帧的体积光强度贴图,减少了渲染的计算量;根据当前画面帧的体积光强度贴图和预设的局部强度调整参数,调整当前画面帧中指定局部区域体积光的光强度,得到当前画面帧的局部强度调整贴图,用于强调光束效果,并提高其他场景模型的显示清晰度;最后,根据体积光强度贴图、局部强度调整贴图以及预设的体积光颜色贴图,在当前画面帧上渲染光束效果。该方式下,减少了体积光渲染过程的计算量,提高了光束效果下其他场景模型的显示清晰度。
136.上述电子设备中的处理器,通过执行计算机可执行指令,可以实现上述光束效果
的渲染方法的下述操作:确定当前画面帧中像素位置在虚拟场景中对应的场景位置;在场景位置和相机位置之间确定指定数量的目标位置,基于阴影深度贴图确定目标位置的光照状态;基于目标位置的光照状态,确定像素位置对应的初始体积光强度;基于像素位置对应的初始体积光强度,以及历史体积光强度信息,确定当前画面帧的体积光强度贴图。
137.上述电子设备中的处理器,通过执行计算机可执行指令,可以实现上述光束效果的渲染方法的下述操作:获取当前画面帧的渲染深度贴图,从渲染深度贴图中获取像素位置的渲染深度值;基于渲染深度值,确定像素位置在虚拟相机的投影空间中的齐次坐标;基于预设的第一空间转换矩阵,将齐次坐标转换至虚拟场景对应的世界空间,得到像素位置在虚拟场景中对应的场景位置。
138.上述电子设备中的处理器,通过执行计算机可执行指令,可以实现上述光束效果的渲染方法的下述操作:基于场景位置和相机位置,生成目标射线;在目标射线上获取指定数量的目标位置;其中,相邻的目标位置之间的距离相同;距离相机位置最近的目标位置,在指定的射线范围内随机确定。
139.上述电子设备中的处理器,通过执行计算机可执行指令,可以实现上述光束效果的渲染方法的下述操作:基于预设的第二空间转换矩阵,将目标位置转换至阴影深度贴图空间,得到目标位置在阴影深度贴图空间中的位置坐标;从阴影深度贴图中获取目标位置对应的深度值;基于位置坐标的深度分量和目标位置对应的深度值之间的大小关系,确定目标位置的光照状态;其中,光照状态包括:目标位置被虚拟场景中的虚拟光源照射,或者,目标位置没有被虚拟场景中的虚拟光源照射。
140.上述电子设备中的处理器,通过执行计算机可执行指令,可以实现上述光束效果的渲染方法的下述操作:统计目标位置中,被虚拟光源照射的目标位置的第一数量,以及没有被虚拟光源照射的目标位置的第二数量;基于第一数量和所述第二数量,确定像素位置对应的初始体积光强度;其中,第一数量越大,初始体积光强度越大;第二数量越大,初始体积光强度越小。
141.上述历史体积光强度信息包括:所述当前画面帧的上一个画面帧的体积光强度贴图;上述电子设备中的处理器,通过执行计算机可执行指令,可以实现上述光束效果的渲染方法的下述操作:将当前画面帧中每个像素位置对应的初始体积光强度,组成当前画面帧的初始强度贴图;按照预设第一权重,将初始强度贴图和上一个画面帧的体积光强度贴图进行混合处理,得到上述当前画面帧的体积光强度贴图。
142.上述电子设备中的处理器,通过执行计算机可执行指令,可以实现上述光束效果的渲染方法的下述操作:基于预设的模糊程度参数,对体积光强度贴图进行模糊处理,得到当前画面帧的最终的体积光强度贴图。
143.上述电子设备中的处理器,通过执行计算机可执行指令,可以实现上述光束效果的渲染方法的下述操作:确定体积光强度贴图对应的全局平均强度,以及体积光强度贴图中多个第一贴图区域的第一区域强度;基于预设的强度混合比例,对全局平均强度和第一区域强度进行混合处理,得到第一贴图区域对应的中间强度结果;基于中间强度结果以及预设的局部强度调整参数,生成上述当前画面帧的局部强度调整贴图。
144.上述电子设备中的处理器,通过执行计算机可执行指令,可以实现上述光束效果的渲染方法的下述操作:对体积光强度贴图进行划分处理,得到多个第二贴图区域;其中,
第二贴图区域的区域尺寸大于所述第一贴图区域的贴图尺寸;确定第二贴图区域的第二区域亮度;基于第一贴图区域和第二贴图区域之间的位置关系,以及预设的强度混合比例,对全局平均强度、第一区域强度和第二区域强度进行混合处理,得到第一贴图区域对应的中间强度结果。
145.上述电子设备中的处理器,通过执行计算机可执行指令,可以实现上述光束效果的渲染方法的下述操作:基于预设的强度调整范围参数和强度偏移参数,对中间强度结果进行调整处理,得到贴图区域对应的调整强度结果;基于贴图区域对应的调整强度结果,以及历史画面帧对应的局部强度调整贴图,得到当前画面帧的局部强度调整贴图。
146.上述电子设备中的处理器,通过执行计算机可执行指令,可以实现上述光束效果的渲染方法的下述操作:基于预设的强度调整范围参数,将上述中间强度结果限定在指定的强度范围内,得到第一强度结果;通过强度偏移参数对上述第一强度结果进行偏移处理,得到贴图区域对应的调整强度结果。
147.上述电子设备中的处理器,通过执行计算机可执行指令,可以实现上述光束效果的渲染方法的下述操作:获取上述虚拟场景中虚拟光源的光源方向;基于光源方向,确定待渲染光束效果的体积光各向异性参数;将体积光各向异性参数与调整强度结果进行混合处理,得到上述贴图区域对应的最终的调整强度结果。
148.上述电子设备中的处理器,通过执行计算机可执行指令,可以实现上述光束效果的渲染方法的下述操作:将每个贴图区域对应的调整强度结果,组成当前画面帧的初始调整贴图;基于预设第二权重,将初始调整贴图和当前画面帧的上一个画面帧的局部强度调整贴图进行混合处理,得到当前画面帧的局部强度调整贴图。
149.本实施例还提供一种计算机可读存储介质,计算机可读存储介质存储有计算机可执行指令,计算机可执行指令在被处理器调用和执行时,计算机可执行指令促使处理器实现上述光束效果的渲染方法。
150.该方式中,根据当前画面帧对应的虚拟场景中的相机位置、阴影深度贴图以及历史画面帧的体积光强度贴图,确定当前画面帧的体积光强度贴图,减少了渲染的计算量;根据当前画面帧的体积光强度贴图和预设的局部强度调整参数,调整当前画面帧中指定局部区域体积光的光强度,得到当前画面帧的局部强度调整贴图,用于强调光束效果,并提高其他场景模型的显示清晰度;最后,根据体积光强度贴图、局部强度调整贴图以及预设的体积光颜色贴图,在当前画面帧上渲染光束效果。该方式下,减少了体积光渲染过程的计算量,提高了光束效果下其他场景模型的显示清晰度。
151.上述计算机可读存储介质存储中的计算机可执行指令,通过执行该计算机可执行指令,可以实现上述光束效果的渲染方法中的下述操作:确定当前画面帧中像素位置在虚拟场景中对应的场景位置;在场景位置和相机位置之间确定指定数量的目标位置,基于阴影深度贴图确定目标位置的光照状态;基于目标位置的光照状态,确定像素位置对应的初始体积光强度;基于像素位置对应的初始体积光强度,以及历史体积光强度信息,确定当前画面帧的体积光强度贴图。
152.上述计算机可读存储介质存储中的计算机可执行指令,通过执行该计算机可执行指令,可以实现上述光束效果的渲染方法中的下述操作:获取当前画面帧的渲染深度贴图,从渲染深度贴图中获取像素位置的渲染深度值;基于渲染深度值,确定像素位置在虚拟相
机的投影空间中的齐次坐标;基于预设的第一空间转换矩阵,将齐次坐标转换至虚拟场景对应的世界空间,得到像素位置在虚拟场景中对应的场景位置。
153.上述计算机可读存储介质存储中的计算机可执行指令,通过执行该计算机可执行指令,可以实现上述光束效果的渲染方法中的下述操作:基于场景位置和相机位置,生成目标射线;在目标射线上获取指定数量的目标位置;其中,相邻的目标位置之间的距离相同;距离相机位置最近的目标位置,在指定的射线范围内随机确定。
154.上述计算机可读存储介质存储中的计算机可执行指令,通过执行该计算机可执行指令,可以实现上述光束效果的渲染方法中的下述操作:基于预设的第二空间转换矩阵,将目标位置转换至阴影深度贴图空间,得到目标位置在阴影深度贴图空间中的位置坐标;从阴影深度贴图中获取目标位置对应的深度值;基于位置坐标的深度分量和目标位置对应的深度值之间的大小关系,确定目标位置的光照状态;其中,光照状态包括:目标位置被虚拟场景中的虚拟光源照射,或者,目标位置没有被虚拟场景中的虚拟光源照射。
155.上述计算机可读存储介质存储中的计算机可执行指令,通过执行该计算机可执行指令,可以实现上述光束效果的渲染方法中的下述操作:统计目标位置中,被虚拟光源照射的目标位置的第一数量,以及没有被虚拟光源照射的目标位置的第二数量;基于第一数量和所述第二数量,确定像素位置对应的初始体积光强度;其中,第一数量越大,初始体积光强度越大;第二数量越大,初始体积光强度越小。
156.上述历史体积光强度信息包括:所述当前画面帧的上一个画面帧的体积光强度贴图;上述计算机可读存储介质存储中的计算机可执行指令,通过执行该计算机可执行指令,可以实现上述光束效果的渲染方法中的下述操作:将当前画面帧中每个像素位置对应的初始体积光强度,组成当前画面帧的初始强度贴图;按照预设第一权重,将初始强度贴图和上一个画面帧的体积光强度贴图进行混合处理,得到上述当前画面帧的体积光强度贴图。
157.上述计算机可读存储介质存储中的计算机可执行指令,通过执行该计算机可执行指令,可以实现上述光束效果的渲染方法中的下述操作:基于预设的模糊程度参数,对体积光强度贴图进行模糊处理,得到当前画面帧的最终的体积光强度贴图。
158.上述计算机可读存储介质存储中的计算机可执行指令,通过执行该计算机可执行指令,可以实现上述光束效果的渲染方法中的下述操作:确定体积光强度贴图对应的全局平均强度,以及体积光强度贴图中多个第一贴图区域的第一区域强度;基于预设的强度混合比例,对全局平均强度和第一区域强度进行混合处理,得到第一贴图区域对应的中间强度结果;基于中间强度结果以及预设的局部强度调整参数,生成上述当前画面帧的局部强度调整贴图。
159.上述计算机可读存储介质存储中的计算机可执行指令,通过执行该计算机可执行指令,可以实现上述光束效果的渲染方法中的下述操作:对体积光强度贴图进行划分处理,得到多个第二贴图区域;其中,第二贴图区域的区域尺寸大于所述第一贴图区域的贴图尺寸;确定第二贴图区域的第二区域亮度;基于第一贴图区域和第二贴图区域之间的位置关系,以及预设的强度混合比例,对全局平均强度、第一区域强度和第二区域强度进行混合处理,得到第一贴图区域对应的中间强度结果。
160.上述计算机可读存储介质存储中的计算机可执行指令,通过执行该计算机可执行指令,可以实现上述光束效果的渲染方法中的下述操作:基于预设的强度调整范围参数和
强度偏移参数,对中间强度结果进行调整处理,得到贴图区域对应的调整强度结果;基于贴图区域对应的调整强度结果,以及历史画面帧对应的局部强度调整贴图,得到当前画面帧的局部强度调整贴图。
161.上述计算机可读存储介质存储中的计算机可执行指令,通过执行该计算机可执行指令,可以实现上述光束效果的渲染方法中的下述操作:基于预设的强度调整范围参数,将上述中间强度结果限定在指定的强度范围内,得到第一强度结果;通过强度偏移参数对上述第一强度结果进行偏移处理,得到贴图区域对应的调整强度结果。
162.上述计算机可读存储介质存储中的计算机可执行指令,通过执行该计算机可执行指令,可以实现上述光束效果的渲染方法中的下述操作:获取上述虚拟场景中虚拟光源的光源方向;基于光源方向,确定待渲染光束效果的体积光各向异性参数;将体积光各向异性参数与调整强度结果进行混合处理,得到上述贴图区域对应的最终的调整强度结果。
163.上述计算机可读存储介质存储中的计算机可执行指令,通过执行该计算机可执行指令,可以实现上述光束效果的渲染方法中的下述操作:将每个贴图区域对应的调整强度结果,组成当前画面帧的初始调整贴图;基于预设第二权重,将初始调整贴图和当前画面帧的上一个画面帧的局部强度调整贴图进行混合处理,得到当前画面帧的局部强度调整贴图。
164.本发明实施例所提供的光束效果的渲染方法、装置和电子设备的计算机程序产品,包括存储了程序代码的机器可读存储介质,所述程序代码包括的指令可用于执行前面方法实施例中所述的方法,具体实现可参见方法实施例,在此不再赘述。
165.所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统和装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
166.另外,在本发明实施例的描述中,除非另有明确的规定和限定,术语“安装”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域技术人员而言,可以具体情况理解上述术语在本发明中的具体含义。
167.所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个机器可读存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-only memory)、随机存取存储器(ram,random access memory)、磁碟或者光盘等各种可以存储程序代码的介质。
168.在本发明的描述中,需要说明的是,术语“中心”、“上”、“下”、“左”、“右”、“竖直”、“水平”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。此外,术语“第一”、“第二”、“第三”仅用于描述目的,而不能理解为指示或暗示相对重要性。
169.最后应说明的是:以上实施例,仅为本发明的具体实施方式,用以说明本发明的技
术方案,而非对其限制,本发明的保护范围并不局限于此,尽管参照前述实施例对本发明进行了详细的说明,本领域技术人员应当理解:任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本发明实施例技术方案的精神和范围,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。
技术特征:
1.一种光束效果的渲染方法,其特征在于,所述方法包括:获取虚拟场景的当前画面帧;基于所述当前画面帧对应的相机位置、阴影深度贴图以及历史体积光强度信息,确定所述当前画面帧的体积光强度贴图;其中,所述相机位置包括:拍摄所述当前画面帧时,虚拟相机在所述虚拟场景中的位置;所述历史体积光强度信息包括:所述当前画面帧之前的历史画面帧的体积光强度贴图;基于所述当前画面帧的体积光强度贴图以及预设的局部强度调整参数,生成所述当前画面帧的局部强度调整贴图;其中,所述局部强度调整贴图用于:调整所述当前画面帧中指定区域中体积光的光强度;基于所述体积光强度贴图、所述局部强度调整贴图以及预设的体积光颜色贴图,在所述当前画面帧上渲染光束效果。2.根据权利要求1所述的方法,其特征在于,基于所述当前画面帧对应的相机位置、阴影深度贴图以及历史体积光强度信息,确定所述当前画面帧的体积光强度贴图的步骤,包括:确定所述当前画面帧中像素位置在所述虚拟场景中对应的场景位置;在所述场景位置和所述相机位置之间确定指定数量的目标位置,基于所述阴影深度贴图确定所述目标位置的光照状态;基于所述目标位置的光照状态,确定所述像素位置对应的初始体积光强度;基于所述像素位置对应的初始体积光强度,以及历史体积光强度信息,确定所述当前画面帧的体积光强度贴图。3.根据权利要求2所述的方法,其特征在于,确定所述当前画面帧中像素位置在所述虚拟场景中对应的场景位置的步骤,包括:获取所述当前画面帧的渲染深度贴图,从所述渲染深度贴图中获取所述像素位置的渲染深度值;基于所述渲染深度值,确定所述像素位置在所述虚拟相机的投影空间中的齐次坐标;基于预设的第一空间转换矩阵,将所述齐次坐标转换至所述虚拟场景对应的世界空间,得到所述像素位置在所述虚拟场景中对应的场景位置。4.根据权利要求2所述的方法,其特征在于,在所述场景位置和所述相机位置之间确定指定数量的目标位置的步骤,包括:基于所述场景位置和所述相机位置,生成目标射线;在所述目标射线上获取指定数量的目标位置;其中,相邻的所述目标位置之间的距离相同;距离所述相机位置最近的目标位置,在指定的射线范围内随机确定。5.根据权利要求2所述的方法,其特征在于,基于所述阴影深度贴图确定所述目标位置的光照状态的步骤,包括:基于预设的第二空间转换矩阵,将所述目标位置转换至阴影深度贴图空间,得到所述目标位置在所述阴影深度贴图空间中的位置坐标;从所述阴影深度贴图中获取所述目标位置对应的深度值;基于所述位置坐标的深度分量和所述目标位置对应的深度值之间的大小关系,确定所述目标位置的光照状态;其中,所述光照状态包括:所述目标位置被所述虚拟场景中的虚拟
光源照射,或者,所述目标位置没有被所述虚拟场景中的虚拟光源照射。6.根据权利要求2所述的方法,其特征在于,基于所述目标位置的光照状态,确定所述像素位置对应的初始体积光强度的步骤,包括:统计所述目标位置中,被所述虚拟光源照射的目标位置的第一数量,以及没有被所述虚拟光源照射的目标位置的第二数量;基于所述第一数量和所述第二数量,确定所述像素位置对应的初始体积光强度;其中,所述第一数量越大,所述初始体积光强度越大;所述第二数量越大,所述初始体积光强度越小。7.根据权利要求2所述的方法,其特征在于,所述历史体积光强度信息包括:所述当前画面帧的上一个画面帧的体积光强度贴图;所述基于所述像素位置对应的初始体积光强度,以及历史体积光强度信息,确定所述当前画面帧的体积光强度贴图的步骤,包括:将所述当前画面帧中每个像素位置对应的初始体积光强度,组成所述当前画面帧的初始强度贴图;按照预设第一权重,将所述初始强度贴图和所述上一个画面帧的体积光强度贴图进行混合处理,得到所述当前画面帧的体积光强度贴图。8.根据权利要求1所述的方法,其特征在于,基于所述当前画面帧对应的相机位置、阴影深度贴图以及历史体积光强度信息,确定所述当前画面帧的体积光强度贴图的步骤之后,所述方法还包括:基于预设的模糊程度参数,对所述体积光强度贴图进行模糊处理,得到所述当前画面帧的最终的体积光强度贴图。9.根据权利要求1所述的方法,其特征在于,基于所述当前画面帧的体积光强度贴图以及预设的局部强度调整参数,生成所述当前画面帧的局部强度调整贴图的步骤,包括:确定所述体积光强度贴图对应的全局平均强度,以及所述体积光强度贴图中多个第一贴图区域的第一区域强度;基于预设的强度混合比例,对所述全局平均强度和所述第一区域强度进行混合处理,得到所述第一贴图区域对应的中间强度结果;基于所述中间强度结果以及预设的局部强度调整参数,生成所述当前画面帧的局部强度调整贴图。10.根据权利要求9所述的方法,其特征在于,基于预设的强度混合比例,对所述全局平均强度和所述第一区域强度进行混合处理,得到所述第一贴图区域对应的中间强度结果的步骤,包括:对所述体积光强度贴图进行划分处理,得到多个第二贴图区域;其中,所述第二贴图区域的区域尺寸大于所述第一贴图区域的贴图尺寸;确定所述第二贴图区域的第二区域强度;基于所述第一贴图区域和所述第二贴图区域之间的位置关系,以及预设的强度混合比例,对所述全局平均强度、所述第一区域强度和所述第二区域强度进行混合处理,得到所述第一贴图区域对应的中间强度结果。11.根据权利要求9所述的方法,其特征在于,基于所述中间强度结果以及预设的局部
强度调整参数,生成所述当前画面帧的局部强度调整贴图的步骤,包括:基于预设的强度调整范围参数和强度偏移参数,对所述中间强度结果进行调整处理,得到所述贴图区域对应的调整强度结果;基于所述贴图区域对应的调整强度结果,以及所述历史画面帧对应的局部强度调整贴图,得到所述当前画面帧的局部强度调整贴图。12.根据权利要求11所述的方法,其特征在于,基于预设的强度调整范围参数和强度偏移参数,对所述中间强度结果进行调整处理,得到所述贴图区域对应的调整强度结果的步骤,包括:基于预设的强度调整范围参数,将所述中间强度结果限定在指定的强度范围内,得到第一强度结果;通过所述强度偏移参数对所述第一强度结果进行偏移处理,得到所述贴图区域对应的调整强度结果。13.根据权利要求11所述的方法,其特征在于,基于预设的强度调整范围参数和强度偏移参数,对所述中间强度结果进行调整处理,得到所述贴图区域对应的调整强度结果的步骤之后,所述方法还包括:获取所述虚拟场景中虚拟光源的光源方向;基于所述光源方向,确定待渲染光束效果的体积光各向异性参数;将所述体积光各向异性参数与所述调整强度结果进行混合处理,得到所述贴图区域对应的最终的调整强度结果。14.根据权利要求11所述的方法,其特征在于,基于所述贴图区域对应的调整强度结果,以及所述历史画面帧对应的局部强度调整贴图,得到所述当前画面帧的局部强度调整贴图的步骤,包括:将每个所述贴图区域对应的调整强度结果,组成所述当前画面帧的初始调整贴图;基于预设第二权重,将所述初始调整贴图和所述当前画面帧的上一个画面帧的局部强度调整贴图进行混合处理,得到当前画面帧的局部强度调整贴图。15.一种光束效果的渲染装置,其特征在于,所述装置包括:第一获取模块,用于获取虚拟场景的当前画面帧;第一确定模块,用于基于所述当前画面帧对应的相机位置、阴影深度贴图以及历史体积光强度信息,确定所述当前画面帧的体积光强度贴图;其中,所述相机位置包括:拍摄所述当前画面帧时,虚拟相机在所述虚拟场景中的位置;所述历史体积光强度信息包括:所述当前画面帧之前的历史画面帧的体积光强度贴图;第一生成模块,用于基于所述当前画面帧的体积光强度贴图以及预设的局部强度调整参数,生成所述当前画面帧的局部强度调整贴图;其中,所述局部强度调整贴图用于:调整所述当前画面帧中指定区域中体积光的光强度;第一渲染模块,用于基于所述体积光强度贴图、所述局部强度调整贴图以及预设的体积光颜色贴图,在所述当前画面帧上渲染光束效果。16.一种电子设备,其特征在于,包括处理器和存储器,所述存储器存储有能够被所述处理器执行的计算机可执行指令,所述处理器执行所述计算机可执行指令以实现权利要求1-14任一项所述的光束效果的渲染方法。
17.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机可执行指令,所述计算机可执行指令在被处理器调用和执行时,所述计算机可执行指令促使所述处理器实现权利要求1-14任一项所述的光束效果的渲染方法。
技术总结
本发明提供了一种光束效果的渲染方法、装置和电子设备,其中,方法包括:获取虚拟场景的当前画面帧;基于当前画面帧对应的相机位置、阴影深度贴图以及历史体积光强度信息,确定当前画面帧的体积光强度贴图;其中,历史体积光强度信息包括:当前画面帧之前的历史画面帧的体积光强度贴图;基于当前画面帧的体积光强度贴图以及预设的局部强度调整参数,生成当前画面帧的局部强度调整贴图;其中,局部强度调整贴图用于:调整当前画面帧中指定区域中体积光的光强度;基于体积光强度贴图、局部强度调整贴图以及预设的体积光颜色贴图,在当前画面帧上渲染光束效果,该方式下,减少了体积光渲染过程的计算量,提高了光束效果下其他场景模型的显示清晰度。的显示清晰度。的显示清晰度。
技术研发人员:陈昱 刘志斌
受保护的技术使用者:网易(杭州)网络有限公司
技术研发日:2023.06.05
技术公布日:2023/10/19
版权声明
本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)
航空之家 https://www.aerohome.com.cn/
航空商城 https://mall.aerohome.com.cn/
航空资讯 https://news.aerohome.com.cn/