本公开实施例涉及图像显示领域,具体涉及一种光照渲染方法、装置、电子设备及存储介质。
背景技术:
1、全局光照系统用于模拟和计算场景中的光照效果,可以增强图像的真实感和细节,使得场景更加逼真。通过考虑光线的传播和相互作用,全局光照系统能够模拟出阴影、反射、折射和间接光等效果,使得场景中的物体更加真实和有层次感。然而,计算全局光照所需的时间和计算量通常很大。
2、为了提高计算的速度和性能,提出了光照缓存技术。光照缓存是一种用于优化全局光照系统的方法。通过预先计算和存储光照数据,以避免重复的光照计算。光照缓存将场景光照的计算结果进行存储,当光线遇到已经计算过的位置时,可以直接使用缓存中的光照数据,而不需要重新计算,从而可以节省大量的计算时间,提高全局光照系统的速度和效率。通过使用光照缓存技术,可以提高全局光照系统的性能,使得渲染过程更加快速和高效。
3、现有的光照缓存技术大多基于光照贴图实现,通过将场景中的光照信息渲染到纹理中,并在渲染过程中使用这些纹理来模拟光照效果。但是,光照贴图需要大量的存储空间存储纹理数据,从而无法兼顾存储空间与渲染精度。
技术实现思路
1、鉴于上述问题,提出了本公开以便提供一种克服上述问题或者至少部分地解决上述问题的一种光照渲染方法、装置、电子设备及存储介质。
2、根据本公开实施例的一个方面,提供了一种光照渲染方法,包括:
3、确定虚拟场景中与光照位置点相匹配的目标体素,获取所述目标体素的体素缓存数据;
4、获取所述体素缓存数据中包含的极性分割数据,通过与所述极性分割数据相对应的极性分割平面,将所述目标体素分割为两个极性区域;其中,两个极性区域的光照强度不同,且所述体素缓存数据中还包含与两个极性区域相对应的两种极性光照数据;
5、根据所述极性光照数据,获取所述光照位置点的位置光照数据,并根据所述位置光照数据对所述光照位置点进行光照渲染。
6、在一种可选的实现方式中,所述根据所述极性光照数据,获取所述光照位置点的位置光照数据具体包括:
7、从所述两种极性光照数据中选择与光照位置点所属的极性区域相对应的一种极性光照数据;
8、根据选择的一种极性光照数据,计算所述光照位置点的位置光照数据。在一种可选的实现方式中,所述获取所述目标体素的体素缓存数据具体包括:
9、获取所述目标体素的体素句柄;其中,所述体素句柄中包含位置偏移信息,所述位置偏移信息用于表征所述目标体素在预设缓存空间中的存储地址;
10、在根据所述位置偏移信息,确定所述目标体素在预设缓存空间中的存储地址不为空的情况下,从所述预设缓存空间中获取所述目标体素的体素缓存数据。
11、在一种可选的实现方式中,在根据所述位置偏移信息,确定所述目标体素在预设缓存空间中的存储地址为空的情况下,所述方法还包括:
12、在所述预设缓存空间中,为所述目标体素分配存储地址;
13、根据已分配的存储地址,更新所述目标体素的体素句柄中包含的位置偏移信息。
14、在一种可选的实现方式中,所述体素句柄中还包括:体素位置哈希,所述体素位置哈希用于表征所述目标体素对应的位置点的哈希运算结果;
15、所述从所述预设缓存空间中获取所述目标体素的体素缓存数据之前,还包括:
16、计算所述光照位置点对应的光照位置哈希,将所述光照位置哈希与所述体素位置哈希进行匹配;
17、在匹配成功的情况下,从所述预设缓存空间中获取所述目标体素的体素缓存数据。
18、在一种可选的实现方式中,在根据位置偏移信息,确定所述目标体素在预设缓存空间中的存储地址为空的情况下;或者,在光照位置哈希与体素位置哈希匹配失败的情况下,所述方法还包括:
19、更新所述目标体素的体素缓存数据,并根据更新后的体素缓存数据更新所述预设缓存空间。
20、在一种可选的实现方式中,所述确定虚拟场景中与光照位置点相匹配的目标体素之后,还包括:针对所述目标体素设置查询标志;
21、并且,所述方法还包括:
22、按照预设的体素遍历条件,遍历所述虚拟场景中的多个体素;
23、在根据遍历结果确定任一体素为设置有查询标志的已查询体素的情况下,更新所述已查询体素的体素缓存数据,并根据更新后的体素缓存数据更新所述预设缓存空间。
24、在一种可选的实现方式中,所述体素缓存数据中进一步包括:体素剩余生命值;
25、所述在根据遍历结果确定任一体素为设置有查询标志的已查询体素的情况下,更新所述已查询体素的体素缓存数据具体包括:
26、在根据遍历结果确定任一体素为设置有查询标志的已查询体素的情况下,判断所述预设缓存空间中是否已存储有所述已查询体素的体素缓存数据;
27、若是,更新所述已查询体素的体素缓存数据,以使所述已查询体素的体素缓存数据中的体素剩余生命值增大;
28、若否,生成所述已查询体素的体素缓存数据,以根据所述已查询体素的体素缓存数据更新所述预设缓存空间。
29、在一种可选的实现方式中,所述若否,生成所述已查询体素的体素缓存数据具体包括:
30、将所述已查询体素添加至预设更新队列;
31、根据所述预设更新队列,生成所述已查询体素的体素缓存数据。
32、在一种可选的实现方式中,所述按照预设的体素遍历条件,遍历所述虚拟场景中的多个体素之后,还包括:
33、在根据遍历结果确定任一体素为未设置查询标志的未查询体素的情况下,若所述预设缓存空间中已存储有所述未查询体素的体素缓存数据,则更新所述未查询体素的体素缓存数据,以使所述未查询体素的体素缓存数据中的体素剩余生命值减小;
34、并且,所述方法还包括:将所述预设缓存空间中体素剩余生命值为零的体素确定为超期体素,删除所述超期体素的体素缓存数据。
35、在一种可选的实现方式中,所述方法还包括:
36、按照预设选择策略,从所述预设缓存空间中选择部分体素作为待更新体素,将所述待更新体素添加至预设更新队列;
37、根据所述预设更新队列,生成所述待更新体素的体素缓存数据。
38、在一种可选的实现方式中,所述体素缓存数据通过以下方式生成:
39、获取体素的实时光照数据,确定所述实时光照数据中包含的光源强度信息以及光源方位信息;
40、根据所述光源强度信息以及光源方位信息,确定所述体素的受光范围以及背光范围;
41、根据所述受光范围以及背光范围,生成所述体素的体素缓存数据中的极性分割数据;
42、其中,所述极性分割数据用于生成所述极性分割平面,且所述极性分割平面用于将所述体素分割为两个极性区域,所述两个极性区域分别对应于所述受光范围以及背光范围。
43、在一种可选的实现方式中,所述两个极性区域包括:对应于受光范围的受光极性区域,以及对应于背光范围的背光极性区域;
44、所述生成所述体素的体素缓存数据中的极性分割数据之后,还包括:
45、确定所述实时光照数据中包含的受光光源强度信息以及受光光源方位信息,根据所述受光光源强度信息以及受光光源方位信息,生成所述与所述受光极性区域相对应的极性光照数据;
46、确定所述实时光照数据中包含的背光光源强度信息以及背光光源方位信息,根据所述背光光源强度信息以及背光光源方位信息,生成所述与所述背光极性区域相对应的极性光照数据。
47、在一种可选的实现方式中,所述根据所述与所述目标极性区域相对应的极性光照数据,计算所述光照位置点的位置光照数据包括:
48、根据所述与所述目标极性区域相对应的极性光照数据中的光源强度信息以及光源方位信息,确定光源方位向量;
49、获取光照查询请求中包含的方位参数,根据所述方位参数,确定与所述光照位置点相对应的光照方位向量;
50、根据光源方位向量与所述光照方位向量之间的点乘运算结果,确定所述光照位置点的位置光照数据。
51、在一种可选的实现方式中,所述受光光源和/或所述背光光源包括:主平行光源、以及多个辅光源;并且,所述极性光照数据中的光源强度信息以及光源方位信息包括:所述主平行光源的光源强度信息,以及每个辅光源的光源强度信息以及光源方位信息。
52、在一种可选的实现方式中,所述受光光源和/或所述背光光源还包括:漫反射光源,则所述光照位置点的位置光照数据根据所述点乘运算结果以及所述漫反射光源的漫反射数值确定。
53、在一种可选的实现方式中,所述确定虚拟场景中与光照位置点相匹配的目标体素之前,还包括:
54、响应于接收到的光照查询请求,获取所述光照查询请求中包含的位置参数;
55、根据所述位置参数,确定所述光照位置点。
56、依据本公开的再一方面,提供了一种光照渲染系统,包括:
57、缓存获取模块,适于确定虚拟场景中与光照位置点相匹配的目标体素,获取所述目标体素的体素缓存数据;
58、极性分割模块,适于获取所述体素缓存数据中包含的极性分割数据,通过与所述极性分割数据相对应的极性分割平面,将所述目标体素分割为两个极性区域;其中,两个极性区域的光照强度不同,且所述体素缓存数据中还包含与两个极性区域相对应的两种极性光照数据;
59、计算渲染模块,适于根据所述极性光照数据,获取所述光照位置点的位置光照数据,并根据所述位置光照数据对所述光照位置点进行光照渲染。
60、在一种可选的实现方式中,所述缓存获取模块具体适于:
61、获取所述目标体素的体素句柄;其中,所述体素句柄中包含位置偏移信息,所述位置偏移信息用于表征所述目标体素在预设缓存空间中的存储地址;
62、在根据所述位置偏移信息,确定所述目标体素在预设缓存空间中的存储地址不为空的情况下,从所述预设缓存空间中获取所述目标体素的体素缓存数据。
63、在一种可选的实现方式中,在根据所述位置偏移信息,确定所述目标体素在预设缓存空间中的存储地址为空的情况下,所述缓存获取模块还适于:
64、在所述预设缓存空间中,为所述目标体素分配存储地址;
65、根据已分配的存储地址,更新所述目标体素的体素句柄中包含的位置偏移信息。
66、在一种可选的实现方式中,所述体素句柄中还包括:体素位置哈希,所述体素位置哈希用于表征所述目标体素对应的位置点的哈希运算结果;
67、所述缓存获取模块具体适于:
68、计算所述光照位置点对应的光照位置哈希,将所述光照位置哈希与所述体素位置哈希进行匹配;
69、在匹配成功的情况下,从所述预设缓存空间中获取所述目标体素的体素缓存数据。
70、在一种可选的实现方式中,在根据位置偏移信息,确定所述目标体素在预设缓存空间中的存储地址为空的情况下;或者,在光照位置哈希与体素位置哈希匹配失败的情况下,所述缓存获取模块还适于:
71、更新所述目标体素的体素缓存数据,并根据更新后的体素缓存数据更新所述预设缓存空间。
72、在一种可选的实现方式中,所述缓存获取模块在确定虚拟场景中与光照位置点相匹配的目标体素之后,还适于:针对所述目标体素设置查询标志;
73、并且,所述系统还包括:
74、更新模块,适于按照预设的体素遍历条件,遍历所述虚拟场景中的多个体素;在根据遍历结果确定任一体素为设置有查询标志的已查询体素的情况下,更新所述已查询体素的体素缓存数据,并根据更新后的体素缓存数据更新所述预设缓存空间。
75、在一种可选的实现方式中,所述体素缓存数据中进一步包括:体素剩余生命值;
76、所述更新模块具体适于:
77、在根据遍历结果确定任一体素为设置有查询标志的已查询体素的情况下,判断所述预设缓存空间中是否已存储有所述已查询体素的体素缓存数据;
78、若是,更新所述已查询体素的体素缓存数据,以使所述已查询体素的体素缓存数据中的体素剩余生命值增大;
79、若否,生成所述已查询体素的体素缓存数据,以根据所述已查询体素的体素缓存数据更新所述预设缓存空间。
80、在一种可选的实现方式中,所述更新模块具体适于:
81、将所述已查询体素添加至预设更新队列;
82、根据所述预设更新队列,生成所述已查询体素的体素缓存数据。
83、在一种可选的实现方式中,所述更新模块具体适于:
84、在根据遍历结果确定任一体素为未设置查询标志的未查询体素的情况下,若所述预设缓存空间中已存储有所述未查询体素的体素缓存数据,则更新所述未查询体素的体素缓存数据,以使所述未查询体素的体素缓存数据中的体素剩余生命值减小;
85、并且,所述更新模块还适于:将所述预设缓存空间中体素剩余生命值为零的体素确定为超期体素,删除所述超期体素的体素缓存数据。
86、在一种可选的实现方式中,所述更新模块具体适于:
87、按照预设选择策略,从所述预设缓存空间中选择部分体素作为待更新体素,将所述待更新体素添加至预设更新队列;
88、根据所述预设更新队列,生成所述待更新体素的体素缓存数据。
89、在一种可选的实现方式中,所述体素缓存数据通过以下方式生成:
90、获取体素的实时光照数据,确定所述实时光照数据中包含的光源强度信息以及光源方位信息;
91、根据所述光源强度信息以及光源方位信息,确定所述体素的受光范围以及背光范围;
92、根据所述受光范围以及背光范围,生成所述体素的体素缓存数据中的极性分割数据;
93、其中,所述极性分割数据用于生成所述极性分割平面,且所述极性分割平面用于将所述体素分割为两个极性区域,所述两个极性区域分别对应于所述受光范围以及背光范围。
94、在一种可选的实现方式中,所述两个极性区域包括:对应于受光范围的受光极性区域,以及对应于背光范围的背光极性区域;
95、所述更新模块具体适于:
96、确定所述实时光照数据中包含的受光光源强度信息以及受光光源方位信息,根据所述受光光源强度信息以及受光光源方位信息,生成所述与所述受光极性区域相对应的极性光照数据;
97、确定所述实时光照数据中包含的背光光源强度信息以及背光光源方位信息,根据所述背光光源强度信息以及背光光源方位信息,生成所述与所述背光极性区域相对应的极性光照数据。
98、在一种可选的实现方式中,所述计算渲染模块具体适于:
99、根据所述与所述目标极性区域相对应的极性光照数据中的光源强度信息以及光源方位信息,确定光源方位向量;
100、获取光照查询请求中包含的方位参数,根据所述方位参数,确定与所述光照位置点相对应的光照方位向量;
101、根据光源方位向量与所述光照方位向量之间的点乘运算结果,确定所述光照位置点的位置光照数据。
102、在一种可选的实现方式中,所述受光光源和/或所述背光光源包括:主平行光源、以及多个辅光源;并且,所述极性光照数据中的光源强度信息以及光源方位信息包括:所述主平行光源的光源强度信息,以及每个辅光源的光源强度信息以及光源方位信息。
103、在一种可选的实现方式中,所述受光光源和/或所述背光光源还包括:漫反射光源,则所述光照位置点的位置光照数据根据所述点乘运算结果以及所述漫反射光源的漫反射数值确定。
104、在一种可选的实现方式中,所述系统还包括:
105、接收模块,适于响应于接收到的光照查询请求,获取所述光照查询请求中包含的位置参数;根据所述位置参数,确定所述光照位置点。
106、依据本公开的再一方面,提供了一种电子设备,包括:处理器、存储器、通信接口和通信总线,所述处理器、所述存储器和所述通信接口通过所述通信总线完成相互间的通信;
107、所述存储器用于存放至少一可执行指令,所述可执行指令使所述处理器执行如上述的图像显示方法。
108、依据本公开的再一方面,提供了一种计算机存储介质,所述存储介质中存储有至少一可执行指令,所述可执行指令使处理器执行如上述的图像显示方法。
109、在本公开的实施例中,首先,获取虚拟场景中与光照位置点相匹配的目标体素的体素缓存数据;然后,根据体素缓存数据中包含的极性分割数据生成极性分割平面,从而将所述目标体素分割为两个极性区域;接下来,将光照位置点所属的极性区域确定为目标极性区域,从两种极性光照数据中获取与目标极性区域相对应的极性光照数据;最后,根据获取到的极性光照数据,计算光照位置点的位置光照数据,从而对所述光照位置点进行光照渲染。由此可见,该方式是基于体素实现的,相较于光照贴图的实现方式而言,更加节省存储空间。并且,该方式通过在体素缓存数据中添加极性分割数据,从而能够将一个体素根据光照强度划分为两个不同的极性区域,且每个极性区域分别对应于不同的极性光照数据,以便根据光照位置点所属的极性区域所对应的极性光照数据计算位置光照数据,从而能够在不增加体素划分粒度的前提下,提升体素渲染的精度,从而兼顾存储空间与渲染精度。
110、上述说明仅是本公开技术方案的概述,为了能够更清楚了解本公开的技术手段,而可依照说明书的内容予以实施,并且为了让本公开的上述和其它目的、特征和优点能够更明显易懂,以下特举本公开的具体实施方式。