一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种数字孪生的三维场景渲染方法、装置及设备和介质与流程

2023-01-15 20:57:28 来源:中国专利 TAG:


1.本技术涉及三维渲染技术领域,更具体地说,涉及一种数字孪生的三维场景渲染方法、装置及一种电子设备和一种计算机可读存储介质。


背景技术:

2.基于真实自然场景进行实时建模和绘制是基于数字孪生技术构建高仿真场景的热点和难点之一。在各种虚拟自然景物中,雨天地面虚实映射的效果对于阴雨天气下虚拟场景的真实再现起着不可或缺的作用。
3.在相关技术中,在构建好的雨后场景中采用路径跟踪技术和菲涅尔公式对路面湿润效果进行模拟绘制的方法,但其对象是已经构建好的虚拟场景,即积水面积和深度已经固定的情况下进行计算,不能根据实时降雨量和真实地形起伏在虚拟场景中真实同步积水深浅变化的动态表现效果,导致虚实映射效果僵硬,仿真效果不真实,无法达到数字孪生场景实时高仿真还原的要求。


技术实现要素:

4.本技术的目的在于提供一种数字孪生的三维场景渲染方法、装置及一种电子设备和一种计算机可读存储介质,以解决现有技术中虚拟场景对雨天地面虚实映射的效果僵硬,仿真效果不真实,无法达到数字孪生场景实时高仿真还原的要求的问题。
5.为实现上述目的,本技术提供了一种数字孪生的三维场景渲染方法,包括:在三维引擎中根据真实场景构建包含地面起伏的虚拟场景,并获取真实天气数据;根据所述真实天气数据确定所述虚拟场景中不同像素点的相对积水深度,并确定不同相对积水深度下的地面湿润效果;利用所述三维引擎基于不同积水深度下的地面湿润效果对所述虚拟场景进行三维渲染。
6.其中,所述在三维引擎中根据真实场景构建包含地面起伏的虚拟场景,包括:在三维引擎中构建虚拟场景;根据真实场景的高度数据生成虚拟地形的高度图;根据所述高度图在所述虚拟场景中生成与真实场景相对应的具有高低起伏的地面。
7.其中,所述真实天气数据包括不同像素点的积水数据;所述根据所述真实天气数据确定所述虚拟场景中不同像素点的相对积水深度,包括:确定所述虚拟场景中每个像素点的高度值;将所述虚拟场景中每个所述像素点的积水数据与历史最高积水数据的比值确定为每个所述像素点的相对积水度;根据目标对应关系确定每个像素点的高度值和相对积水度对应的相对积水深度;
其中,所述目标对应关系描述高度值与相对积水度的乘积与相对积水深度之间的线性关系。
8.其中,所述确定不同相对积水深度下的地面湿润效果,包括:根据每个所述像素点的相对积水深度对地面的凹凸材质和积水的材质进行混合,得到每个所述像素点最终的凹凸材质;基于每个所述像素点最终的凹凸材质确定每个所述像素点的地面湿润效果。
9.其中,所述基于每个所述像素点最终的凹凸材质确定每个所述像素点的地面湿润效果,包括:基于每个所述像素点最终的凹凸材质计算每个所述像素点相对于用户视角的反射值;基于每个所述像素点相对于用户视角的反射值计算每个所述像素点对周围环境的反射度;根据菲涅尔公式基于每个所述像素点对周围环境的反射度计算每个所述像素点的菲涅尔值;根据每个所述像素点的菲尼尔值对每个所述像素点的地面反射和积水反射进行差值混合计算,并叠加高光反射效果,得到每个所述像素点的地面湿润效果。
10.其中,所述真实天气数据包括降雨量;所述确定不同相对积水深度下的地面湿润效果之后,还包括:根据所述降雨量确定雨滴触及积水的涟漪扩散效果;相应的,所述利用所述三维引擎基于不同积水深度下的地面湿润效果对所述虚拟场景进行三维渲染,包括:利用所述三维引擎基于不同积水深度下的地面湿润效果、雨滴触及积水的涟漪扩散效果对所述虚拟场景进行三维渲染。
11.其中,所述根据所述降雨量确定雨滴触及积水的涟漪扩散效果,包括:根据所述降雨量确定降雨速度;获取涟漪随机出现的时间,并根据所述涟漪随机出现的时间和所述降雨速度计算涟漪产生消失速度;获取初始涟漪采样高度,并根据所述初始涟漪采样高度和所述降雨速度计算涟漪振幅;基于所述涟漪产生消失速度和所述涟漪振幅确定涟漪扩散效果。
12.为实现上述目的,本技术提供了一种数字孪生的三维场景渲染装置,包括:构建模块,用于在三维引擎中根据真实场景构建包含地面起伏的虚拟场景,并获取真实天气数据;第一确定模块,用于根据所述真实天气数据确定所述虚拟场景中不同像素点的相对积水深度,并确定不同相对积水深度下的地面湿润效果;渲染模块,用于利用所述三维引擎基于不同积水深度下的地面湿润效果对所述虚拟场景进行三维渲染。
13.为实现上述目的,本技术提供了一种电子设备,包括:存储器,用于存储计算机程序;
处理器,用于执行所述计算机程序时实现如上述三维场景渲染方法的步骤。
14.为实现上述目的,本技术提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如上述三维场景渲染方法的步骤。
15.通过以上方案可知,本技术提供的一种三维场景渲染方法,包括:在三维引擎中根据真实场景构建包含地面起伏的虚拟场景,并获取真实天气数据;根据所述真实天气数据确定所述虚拟场景中不同像素点的相对积水深度,并确定不同相对积水深度下的地面湿润效果;利用所述三维引擎基于不同积水深度下的地面湿润效果对所述虚拟场景进行三维渲染。
16.本技术提供的三维场景渲染方法,根据真实天气数据确定虚拟场景中不同像素点的相对积水深度和不同相对积水深度下的地面湿润效果,仿真效果真实,实现了数字孪生场景实时高仿真还原。本技术简化了雨后湿润效果计算过程,计算方式更简单,计算效率更高,提高了雨后湿润效果的表现力。本技术对真实场景进行孪生,能够在虚拟场景循序渐进地呈现地面下雨效果,同时能够让人不需要观看雨量相关数据,即可以通过视觉判定雨量的大小,真实度高,增加虚拟场景的表现力和代入感。本技术还公开了一种三维场景渲染装置及一种电子设备和一种计算机可读存储介质,同样能实现上述技术效果。
17.应当理解的是,以上的一般描述和后文的细节描述仅是示例性的,并不能限制本技术。
附图说明
18.为了更清楚地说明本技术实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。附图是用来提供对本公开的进一步理解,并且构成说明书的一部分,与下面的具体实施方式一起用于解释本公开,但并不构成对本公开的限制。在附图中:图1为根据一示例性实施例示出的一种三维场景渲染方法的流程图;图2为根据一示例性实施例示出的另一种三维场景渲染方法的流程图;图3为根据一示例性实施例示出的一种不下雨的地面效果图;图4为根据一示例性实施例示出的一种小雨的雨天地面效果图;图5为根据一示例性实施例示出的一种大雨的雨天地面效果图;图6为根据一示例性实施例示出的一种三维场景渲染装置的结构图;图7为根据一示例性实施例示出的一种电子设备的结构图。
具体实施方式
19.下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述。显然,所描述的实施例仅仅是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本技术保护的范围。另外,在本技术实施例中,“第一”、“第二”等是用于区别
类似的对象,而不必用于描述特定的顺序或先后次序。
20.本技术实施例公开了一种三维场景渲染方法,以解决现有技术中虚拟场景对雨天地面虚实映射的效果僵硬,仿真效果不真实,无法达到数字孪生场景实时高仿真还原的要求的问题。
21.参见图1,根据一示例性实施例示出的一种三维场景渲染方法的流程图,如图1所示,包括:s101:在三维引擎中根据真实场景构建包含地面起伏的虚拟场景,并获取真实天气数据;在本步骤中,根据真实场景在三维引擎构建一个对应的有地面起伏的虚拟场景,可以包括路面、建筑、植被以及通过粒子系统生成的雨点等。本实施例中的三维引擎可以包括unity、j3d等。
22.作为一种可行的实施方式,所述在三维引擎中根据真实场景构建包含地面起伏的虚拟场景,包括:在三维引擎中构建虚拟场景;根据真实场景的高度数据生成虚拟地形的高度图;根据所述高度图在所述虚拟场景中生成与真实场景相对应的具有高低起伏的地面。
23.在具体实施中,基于三维引擎构建一个虚拟场景,根据真实场景的gis高度数据生成虚拟地形的高度图,根据高度图在虚拟场景生成与实际场景相对应的具有高低起伏的地面。
24.进一步的,读取虚拟场景对应真实地理区域的真实天气数据,可以包括是否有雨、降雨量、积水数据等,并存储真实天气数据。
25.s102:根据所述真实天气数据确定所述虚拟场景中不同像素点的相对积水深度,并确定不同相对积水深度下的地面湿润效果;在本步骤中,根据积水数据孪生控制地面积水面积和不同积水深度下水面渲染效果。具体的,根据积水数据确定虚拟场景中不同像素点的相对积水深度,然后确定不同相对积水深度下的地面湿润效果,以确定虚拟场景中不同像素点的地面湿润效果。
26.作为一种可行的实施方式,所述真实天气数据包括不同像素点的积水数据;所述根据所述真实天气数据确定所述虚拟场景中不同像素点的相对积水深度,包括:确定所述虚拟场景中每个像素点的高度值;将所述虚拟场景中每个所述像素点的积水数据与历史最高积水数据的比值确定为每个所述像素点的相对积水度;根据目标对应关系确定每个像素点的高度值和相对积水度对应的相对积水深度;其中,所述目标对应关系描述高度值与相对积水度的乘积与相对积水深度之间的线性关系。
27.在具体实施中,根据积水数据、历史最高积水数据与对高度图进行alpha通道的采样建立线性对应关系,获取每个像素点在三维空间的积水相对高度,从而实时控制地面积水的深度和面积。具体的,具体地区的高度图可以通过地图软件直接获取,高度图的原理是将该地区的高度范围变为0-1,将当前地区的高度信息存储在高度图的alpha通道里。根据高度图的uv坐标获取每个像素点存储在高度图alpha通道中的高度数据,该高度数据的范围为0~1。获取的积水数据,将积水数据与该地区历史最高积水数据相除,获得当前的相对积水度。因为每个地区的积水还会受到排水速度等因素影响,所以开放用户可自动调节的当前地区积水调节参数,用户可以根据实际情况对积水数据和积水高度和面积进行相应的调整。将每个像素点的高度值、相对积水度和积水调节参数相乘,获得每个像素点的相对积
水深度。
28.作为一种可行的实施方式,所述确定不同相对积水深度下的地面湿润效果,包括:根据每个所述像素点的相对积水深度对地面的凹凸材质和积水的材质进行混合,得到每个所述像素点最终的凹凸材质;基于每个所述像素点最终的凹凸材质确定每个所述像素点的地面湿润效果。
29.在具体实施中,根据每个像素点的相对积水深度对地面的凹凸材质和积水的材质进行混合,得到该地区最终的凹凸材质,积水高度越高,水面的效果越明显。根据雨后深润效果的算法,利用菲涅尔公式和积水反射理论,实时绘制在不同场景和不同积水深度情况下的地面湿润效果。
30.作为一种可行的实施方式,所述基于每个所述像素点最终的凹凸材质确定每个所述像素点的地面湿润效果,包括:基于每个所述像素点最终的凹凸材质计算每个所述像素点相对于用户视角的反射值;基于每个所述像素点相对于用户视角的反射值计算每个所述像素点对周围环境的反射度;根据菲涅尔公式基于每个所述像素点对周围环境的反射度计算每个所述像素点的菲涅尔值;根据每个所述像素点的菲尼尔值对每个所述像素点的地面反射和积水反射进行差值混合计算,并叠加高光反射效果,得到每个所述像素点的地面湿润效果。
31.在具体实施中,基于积水反射理论计算积水对周围环境的反射度,根据菲涅尔公式计算当前水面湿润效果的菲涅尔值,如果不下雨,就对地面贴图进行正常采样;如果下雨,则根据菲尼尔值对地面和积水反射进行差值混合计算,并叠加高光反射效果,最终呈现雨后地面湿润效果。
32.s103:利用所述三维引擎基于不同积水深度下的地面湿润效果对所述虚拟场景进行三维渲染。
33.在本步骤中,利用三维引擎基于不同积水深度下的地面湿润效果对虚拟场景进行实时渲染,形成基于数字孪生的雨天地面实时虚拟映射效果。
34.本技术实施例提供的三维场景渲染方法,根据真实天气数据确定虚拟场景中不同像素点的相对积水深度和不同相对积水深度下的地面湿润效果,仿真效果真实,实现了数字孪生场景实时高仿真还原。本技术实施例简化了雨后湿润效果计算过程,计算方式更简单,计算效率更高,提高了雨后湿润效果的表现力。本技术实施例对真实场景进行孪生,能够在虚拟场景循序渐进地呈现地面下雨效果,同时能够让人不需要观看雨量相关数据,即可以通过视觉判定雨量的大小,真实度高,增加虚拟场景的表现力和代入感。
35.本技术实施例公开了一种三维场景渲染方法,相对于上一实施例,本实施例对技术方案作了进一步的说明和优化。具体的:参见图2,根据一示例性实施例示出的另一种三维场景渲染方法的流程图,如图2所示,包括:s201:在三维引擎中根据真实场景构建包含地面起伏的虚拟场景,并获取真实天气数据;s202:根据所述真实天气数据确定所述虚拟场景中不同像素点的相对积水深度,并确定不同相对积水深度下的地面湿润效果;s203:根据所述降雨量确定雨滴触及积水的涟漪扩散效果;
在本步骤中,根据实时降雨量孪生控制雨滴打到积水上的速度快慢以及积水涟漪扩散效果。
36.作为一种可行的实施方式,所述根据所述降雨量确定雨滴触及积水的涟漪扩散效果,包括:根据所述降雨量确定降雨速度;获取涟漪随机出现的时间,并根据所述涟漪随机出现的时间和所述降雨速度计算涟漪产生消失速度;获取初始涟漪采样高度,并根据所述初始涟漪采样高度和所述降雨速度计算涟漪振幅;基于所述涟漪产生消失速度和所述涟漪振幅确定涟漪扩散效果。
37.在具体实施中,将初始涟漪采样高度存储在涟漪采样贴图g通道和b通道,将涟漪随机出现的时间存储在alpha通道,从而构建波纹涟漪采样rgba贴图。对涟漪采样贴图的alpha通道(从涟漪中心向外线性渐变,范围1~0,涟漪存在时间的初始数据)、降雨速度和引擎自带时间参数来控制涟漪产生消失的速度。对涟漪采样贴图的g通道和b通道进行采样,并与降雨量构建水面涟漪振幅数学模型,控制涟漪的振幅。
38.s204:利用所述三维引擎基于不同积水深度下的地面湿润效果、雨滴触及积水的涟漪扩散效果对所述虚拟场景进行三维渲染。
39.在本步骤中,利用三维引擎基于不同积水深度下的地面湿润效果对虚拟场景进行实时渲染,形成基于数字孪生的雨天地面实时虚拟映射效果。
40.本技术实施例提供的三维场景渲染方法根据真实天气数据确定虚拟场景中不同像素点的相对积水深度和不同相对积水深度下的地面湿润效果,仿真效果真实,实现了数字孪生场景实时高仿真还原。本技术实施例利用计算机图形学简化了雨后湿润效果和涟漪扩散效果的计算过程,计算方式更简单,计算效率更高,提高了雨后湿润效果的表现力。本技术实施例对真实场景进行孪生,能够在虚拟场景循序渐进地呈现地面下雨效果,同时能够让人不需要观看雨量相关数据,即可以通过视觉判定雨量的大小,真实度高,增加虚拟场景的表现力和代入感。
41.下面介绍本技术提供的一种应用实施例,具体包括以下步骤:步骤1:在unity中建立一个对应真实场景的虚拟场景,包括路面、建筑、植被以及通过粒子系统生成的雨点等。
42.步骤2:建立数据处理模块,用来读取和存储真实天气数据。
43.步骤3:根据积水数据、历史最高积水数据与对高度图进行alpha通道的采样建立线性对应关系,获取每个像素点在三维空间的积水相对高度,从而实时控制地面积水的深度和面积。
44.每个像素点在三维空间的相对积水高度=saturate(tex2d(高度图,高度图uv坐标).a*(积水数据/历史最高积水数据)*当前地区积水调节参数);其中,具体地区的高度图可以通过高德地图直接获取,高度图的原理是将该地区的高度范围变为0-1,将当前地区的高度信息存储在高度图的alpha通道里。通过cg语言自带的tex2d() 2d纹理采样函数根据高度图的uv坐标获取每个像素点存储在高度图alpha通道中的高度数据,该高度数据的范围为0-1。获取的积水数据,将积水数据与该地区历史最高积水数据相除,获得当前的相对积水度。因为每个地区的积水还会受到排水速度等因素影响,所以开放用户可自动调节的当前地区积水调节参数,用户可以根据实际情况对积水数据和积水高度和面积进行相应的调整。通过高度数据、相对积水度、当前地区积水调节
参数相乘,获得每个坐标点的相对积水高度。因采样范围在0-1,所以应用cg语言自带的saturate()函数将每个坐标点的相对积水高度限制在0-1内。
45.步骤4:根据每个坐标点的相对积水高度,对地面的凹凸材质和积水的材质进行混合,得到该地区最终的凹凸材质,即worldnormal,积水高度越高,水面的效果越明显。
46.步骤5:根据雨后湿润效果的算法,利用菲涅尔公式和积水反射理论,实时绘制在不同场景和不同积水深度情况下的地面湿润效果。
47.5.1积水反射理论计算积水对周围环境的反射度。
48.worldrefl=reflect(worldpos-viewdir,worldnormal);reflcol=texcube(_cubemap,worldrefl).rgb;通过cg语言自带的reflect()反射计算函数计算当前坐标点(信息存储在worldpos中)在不同凹凸材质(信息存储在worldnormal中)的情况下,相对于用户视角方向(信息存储在viewdir中)的反射值。通过cg语言自带的texcube()立方体采样函数根据反射值对需要反射的环境(信息存储在_cubemap中)进行积水反射计算。
49.5.2根据菲涅尔公式计算当前水面湿润效果的菲涅尔值。
50.fresnel=f_base (1-f_scale)*pow(1.0-dot(viewdir,worldnormal),power);通过计算机图形学中已经公开的菲涅尔反射简化计算公式:fresnel = f_base f_scale*((1-v*n)^power);其中, f_base、f_scale、power都是菲涅尔控制系数,这三个系数是开放出来的,可以动态调节水面效果的。viewdir是指用户的视角方向,worldnormal是指当前位置点的凹凸材质。
51.5.3如果不下雨,就对地面贴图进行正常采样;如果下雨,则根据菲尼尔值对地面和积水反射进行差值混合计算,并叠加高光反射效果,最终呈现雨后地面湿润效果。
52.根据当前地区是否下雨,决定颜色混合度。当_rain为0时,代表不下雨;当_rain不为0时,需要cg语言自带的lerp()基于5.2中获得的菲涅尔值和每个像素点在三维空间的相对积水高度对地面和水面进行渲染混合。
53.步骤6:根据实时降雨量孪生控制雨滴打到积水上的速度快慢以及积水涟漪扩散效果。
54.6.1通过cg语言自带的tex2d() 2d纹理采样函数对波纹涟漪贴图的uv坐标(uv)对波纹涟漪贴图(_ripplenormal)进行采样,获取不同通道的数值:ripple=tex2d(_ripplenormal,uv);6.2建立水面涟漪持续数学模型,通过波纹涟漪采样贴图的alpha通道(从涟漪中心向外线性渐变,范围1-0,涟漪存在时间的初始数据)、降雨速度和引擎自带时间参数来控制涟漪产生消失的速度;dropfrac=frac(ripple.a 降雨速度*_time.y);rippleduration=1.0-frac(ripple.a 降雨速度*_time.y);获取波纹涟漪采样贴图alpha通道的数值(不同涟漪区域设置不同的透明度,范围1~0,涟漪存在时间的初始数据)。通过cg语言自带的_time.y来表示时间(每次刷新场景会
重新变化计数),通过降雨速度与时间相乘获得降雨速度对涟漪存在时间的影响参数;将涟漪存在时间的初始数据与降雨速度对涟漪存在时间的影响参数相加,并用cg语言自带的frac()函数,将该参数限制在0-1内,并最终获得涟漪的存在时间。
55.6.3建立水面涟漪振幅数学模型,通过对涟漪采样贴图的g通道和b通道采样和实时降雨量控制涟漪的振幅:finalripple=ripple.gb*rippleduration*sin(dropfrac*lerp(涟漪波谷调节参数,涟漪波峰调节参数,dropfrac))*unity_pi);其中,ripple.gb为波纹涟漪贴图的g通道和b通道,用于存储波纹涟漪的初始起伏数据。
56.通过cg语言自带的lerp()函数基于降雨速度对涟漪存在时间的影响参数获取涟漪波峰波谷高度数据,并通过cg语言自带的sin()函数模拟波峰波谷起伏。unity_pi为cg语言自定义的静态数据,代表π。将波纹涟漪的初始起伏数据(ripple.gb)与涟漪波峰波谷高度数据和涟漪存在时间一同控制涟漪的最终渲染效果。
57.步骤7:通过unity三维引擎对虚拟场景进行实时渲染,形成基于数字孪生的雨天地面实时虚拟映射效果。
58.下面介绍本技术提供的另一种应用实施例,具体包括以下步骤:步骤1:在j3d中建立一个对应真实场景的虚拟场景,包括路面、建筑、植被以及通过粒子系统生成的雨点等。
59.步骤2:建立数据处理模块,用来读取和存储真实天气数据。
60.步骤3:根据积水数据、历史最高积水数据与对高度图进行alpha通道的采样建立线性对应关系,从而实时控制地面积水的面积。
61.每个像素点在三维空间的相对积水高度=saturate(texture(高度图,高度图uv坐标).a*(积水数据/历史最高积水数据)*当前地区积水调节参数);其中,具体地区的高度图可以通过高德地图直接获取,高度图的原理是将该地区的高度范围变为0-1,将当前地区的高度信息存储在高度图的alpha通道里。通过glsl语言自带的texture() 2d纹理采样函数根据高度图的uv坐标获取每个像素点存储在高度图alpha通道中的高度数据,该高度数据的范围为0-1。获取的积水数据,将积水数据与该地区历史最高积水数据相除,获得当前的相对积水度。因为每个地区的积水还会受到排水速度等因素影响,所以开放用户可自动调节的当前地区积水调节参数,用户可以根据实际情况对积水数据和积水高度和面积进行相应的调整。通过高度数据、相对积水度、当前地区积水调节参数相乘,获得每个坐标点的相对积水高度。因采样范围在0-1,所以应用glsl语言自带的saturate()函数将每个坐标点的相对积水高度限制在0~1内。
62.步骤4:根据每个坐标点的相对积水高度,对地面的凹凸材质和积水的材质进行混合,得到该地区最终的凹凸材质,即worldnormal,积水高度越高,水面的效果越明显。
63.步骤5:根据雨后湿润效果的算法,利用菲涅尔公式和积水反射理论,实时绘制在不同场景和不同积水深度情况下的地面湿润效果。
64.5.1积水反射理论计算积水对周围环境的反射度。
65.worldrefl=reflect(worldpos
‑ꢀ
viewdir,worldnormal);reflcol=texcube(_cubemap,worldrefl).rgb*_reflectintensity;
通过glsl语言自带的reflect()反射计算函数计算当前坐标点(信息存储在worldpos中)在不同凹凸材质(信息存储在worldnormal中)的情况下,相对于用户视角方向(信息存储在viewdir中)的反射值。通过glsl语言自带的texcube()立方体采样函数根据(1)中获得的反射值对需要反射的环境(信息存储在_cubemap中)进行积水反射计算。
66.5.2根据菲涅尔公式计算当前水面湿润效果的菲涅尔值。
67.fresnel=f_base (1-f_scale)*pow(1.0-dot(viewdir,worldnormal),power);通过计算机图形学中已经公开的菲涅尔反射简化计算公式:fresnel = f_base f_scale*((1-v*n)^power);其中, f_base、f_scale、power都是菲涅尔控制系数,这三个系数是开放出来的,可以动态调节水面效果的。viewdir是指用户的视角方向,worldnormal是指当前位置点的凹凸材质。
68.5.3如果不下雨,就对地面贴图进行正常采样;如果下雨,则根据菲尼尔值对地面和积水反射进行差值混合计算,并叠加高光反射效果,最终呈现雨后地面湿润效果。
69.根据当前地区是否下雨,决定颜色混合度。当_rainarea为0时,代表不下雨;当_rainarea不为0时,需要glsl语言自带的mix()基于5.2中获得的菲涅尔值和每个像素点在三维空间的相对积水高度对地面和水面进行渲染混合。
70.步骤6:根据实时降雨量孪生控制雨滴打到积水上的速度快慢以及积水涟漪扩散效果。
71.6.1通过glsl语言自带的texture() 2d纹理采样函数对波纹涟漪贴图(_ripplenormal)的uv坐标(uv)对波纹涟漪贴图(_ripplenormal)进行采样,获取不同通道的数值:ripple=texture(_ripplenormal,uv);6.2建立水面涟漪持续数学模型,通过波纹涟漪采样贴图的alpha通道(从涟漪中心向外线性渐变,范围1-0,涟漪存在时间的初始数据)、降雨速度和引擎自带时间参数来控制涟漪产生消失的速度:dropfrac=frac(ripple.a 降雨速度*time);rippleduration=1.0-frac(ripple.a 降雨速度*time);获取波纹涟漪采样贴图alpha通道的数值(不同涟漪区域设置不同的透明度,范围1~0,涟漪存在时间的初始数据);通过glsl语言自带的time来表示时间(每次刷新场景会重新变化计数),通过降雨速度与时间相乘获得降雨速度对涟漪存在时间的影响参数;将涟漪存在时间的初始数据与降雨速度对涟漪存在时间的影响参数相加,并用glsl语言自带的frac()函数,将该参数限制在0-1内,并最终获得涟漪的存在时间。
72.6.3建立水面涟漪振幅数学模型,通过对涟漪采样贴图的g通道和b通道采样和实时降雨量控制涟漪的振幅:finalripple=ripple.gb*rippleduration*sin(dropfrac*mix(涟漪波谷调节参数,涟漪波峰调节参数,dropfrac))*j3d_pi);其中,ripple.gb为波纹涟漪贴图的g通道和b通道,用于存储波纹涟漪的初始起伏
数据。
73.通过glsl语言自带的mix()函数基于降雨速度对涟漪存在时间的影响参数获取涟漪波峰波谷高度数据,并通过glsl语言自带的sin()函数模拟波峰波谷起伏。j3d_pi为自定义的静态数据,代表π。将波纹涟漪的初始起伏数据(ripple.gb)与涟漪波峰波谷高度数据和涟漪存在时间一同控制涟漪的最终渲染效果。
74.步骤7:通过j3d三维引擎对虚拟场景进行实时渲染,形成基于数字孪生的雨天地面实时虚拟映射效果。
75.其中,不下雨的地面效果图如图3所示,小雨的雨天地面效果图如图4所示,大雨的雨天地面效果图如图5所示。
76.下面对本技术实施例提供的一种三维场景渲染装置进行介绍,下文描述的一种三维场景渲染装置与上文描述的一种三维场景渲染方法可以相互参照。
77.参见图6,根据一示例性实施例示出的一种三维场景渲染装置的结构图,如图6所示,包括:构建模块601,用于在三维引擎中根据真实场景构建包含地面起伏的虚拟场景,并获取真实天气数据;第一确定模块602,用于根据所述真实天气数据确定所述虚拟场景中不同像素点的相对积水深度,并确定不同相对积水深度下的地面湿润效果;渲染模块603,用于利用所述三维引擎基于不同积水深度下的地面湿润效果对所述虚拟场景进行三维渲染。
78.本技术实施例提供的三维场景渲染装置,根据真实天气数据确定虚拟场景中不同像素点的相对积水深度和不同相对积水深度下的地面湿润效果,仿真效果真实,实现了数字孪生场景实时高仿真还原。本技术实施例简化了雨后湿润效果计算过程,计算方式更简单,计算效率更高,提高了雨后湿润效果的表现力。本技术实施例对真实场景进行孪生,能够在虚拟场景循序渐进地呈现地面下雨效果,同时能够让人不需要观看雨量相关数据,即可以通过视觉判定雨量的大小,真实度高,增加虚拟场景的表现力和代入感。
79.在上述实施例的基础上,作为一种优选实施方式,所述构建模块601具体用于:在三维引擎中构建虚拟场景;根据真实场景的高度数据生成虚拟地形的高度图;根据所述高度图在所述虚拟场景中生成与真实场景相对应的具有高低起伏的地面;获取真实天气数据。
80.在上述实施例的基础上,作为一种优选实施方式,所述第一确定模块602包括:第一确定单元,用于确定所述虚拟场景中每个像素点的高度值;第二确定单元,用于将所述虚拟场景中每个所述像素点的积水数据与历史最高积水数据的比值确定为每个所述像素点的相对积水度;第三确定单元,用于根据目标对应关系确定每个像素点的高度值和相对积水度对应的相对积水深度;其中,所述目标对应关系描述高度值与相对积水度的乘积与相对积水深度之间的线性关系。
81.在上述实施例的基础上,作为一种优选实施方式,所述第一确定模块602包括:混合单元,用于根据每个所述像素点的相对积水深度对地面的凹凸材质和积水的材质进行混合,得到每个所述像素点最终的凹凸材质;
第四确定单元,用于基于每个所述像素点最终的凹凸材质确定每个所述像素点的地面湿润效果。
82.在上述实施例的基础上,作为一种优选实施方式,所述第四确定单元具体用于:基于每个所述像素点最终的凹凸材质计算每个所述像素点相对于用户视角的反射值;基于每个所述像素点相对于用户视角的反射值计算每个所述像素点对周围环境的反射度;根据菲涅尔公式基于每个所述像素点对周围环境的反射度计算每个所述像素点的菲涅尔值;根据每个所述像素点的菲尼尔值对每个所述像素点的地面反射和积水反射进行差值混合计算,并叠加高光反射效果,得到每个所述像素点的地面湿润效果。
83.在上述实施例的基础上,作为一种优选实施方式,所述真实天气数据包括降雨量;所述装置还包括:第二确定模块,用于根据所述降雨量确定雨滴触及积水的涟漪扩散效果;相应的,所述渲染模块603具体用于:利用所述三维引擎基于不同积水深度下的地面湿润效果、雨滴触及积水的涟漪扩散效果对所述虚拟场景进行三维渲染。
84.在上述实施例的基础上,作为一种优选实施方式,所述第二确定模块具体用于:根据所述降雨量确定降雨速度;获取涟漪随机出现的时间,并根据所述涟漪随机出现的时间和所述降雨速度计算涟漪产生消失速度;获取初始涟漪采样高度,并根据所述初始涟漪采样高度和所述降雨速度计算涟漪振幅;基于所述涟漪产生消失速度和所述涟漪振幅确定涟漪扩散效果。
85.关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。
86.基于上述程序模块的硬件实现,且为了实现本技术实施例的方法,本技术实施例还提供了一种电子设备,图7为根据一示例性实施例示出的一种电子设备的结构图,如图7所示,电子设备包括:通信接口1,能够与其它设备比如网络设备等进行信息交互;处理器2,与通信接口1连接,以实现与其它设备进行信息交互,用于运行计算机程序时,执行上述一个或多个技术方案提供的三维场景渲染方法。而所述计算机程序存储在存储器3上。
87.当然,实际应用时,电子设备中的各个组件通过总线系统4耦合在一起。可理解,总线系统4用于实现这些组件之间的连接通信。总线系统4除包括数据总线之外,还包括电源总线、控制总线和状态信号总线。但是为了清楚说明起见,在图7中将各种总线都标为总线系统4。
88.本技术实施例中的存储器3用于存储各种类型的数据以支持电子设备的操作。这些数据的示例包括:用于在电子设备上操作的任何计算机程序。
89.可以理解,存储器3可以是易失性存储器或非易失性存储器,也可包括易失性和非易失性存储器两者。其中,非易失性存储器可以是只读存储器(rom,read only memory)、可编程只读存储器(prom,programmable read-only memory)、可擦除可编程只读存储器(eprom,erasable programmable read-only memory)、电可擦除可编程只读存储器(eeprom,electrically erasable programmable read-only memory)、磁性随机存取存储器(fram,ferromagnetic random access memory)、快闪存储器(flash memory)、磁表面存
储器、光盘、或只读光盘(cd-rom,compact disc read-only memory);磁表面存储器可以是磁盘存储器或磁带存储器。易失性存储器可以是随机存取存储器(ram,random access memory),其用作外部高速缓存。通过示例性但不是限制性说明,许多形式的ram可用,例如静态随机存取存储器(sram,static random access memory)、同步静态随机存取存储器(ssram,synchronous static random access memory)、动态随机存取存储器(dram,dynamic random access memory)、同步动态随机存取存储器(sdram,synchronous dynamic random access memory)、双倍数据速率同步动态随机存取存储器(ddrsdram,double data rate synchronous dynamic random access memory)、增强型同步动态随机存取存储器(esdram,enhanced synchronous dynamic random access memory)、同步连接动态随机存取存储器(sldram,synclink dynamic random access memory)、直接内存总线随机存取存储器(drram,direct rambus random access memory)。本技术实施例描述的存储器3旨在包括但不限于这些和任意其它适合类型的存储器。
90.上述本技术实施例揭示的方法可以应用于处理器2中,或者由处理器2实现。处理器2可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器2中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器2可以是通用处理器、dsp,或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。处理器2可以实现或者执行本技术实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者任何常规的处理器等。结合本技术实施例所公开的方法的步骤,可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于存储介质中,该存储介质位于存储器3,处理器2读取存储器3中的程序,结合其硬件完成前述方法的步骤。
91.处理器2执行所述程序时实现本技术实施例的各个方法中的相应流程,为了简洁,在此不再赘述。
92.在示例性实施例中,本技术实施例还提供了一种存储介质,即计算机存储介质,具体为计算机可读存储介质,例如包括存储计算机程序的存储器3,上述计算机程序可由处理器2执行,以完成前述方法所述步骤。计算机可读存储介质可以是fram、rom、prom、eprom、eeprom、flash memory、磁表面存储器、光盘、或cd-rom等存储器。
93.本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:移动存储设备、rom、ram、磁碟或者光盘等各种可以存储程序代码的介质。
94.或者,本技术上述集成的单元如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。基于这样的理解,本技术实施例的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台电子设备(可以是个人计算机、服务器、或者网络设备等)执行本技术各个实施例所述方法的全部或部分。而前述的存储介质包括:移动存储设备、rom、ram、磁碟或者光盘等各种可以存储程序代码的介质。
95.以上所述,仅为本技术的具体实施方式,但本技术的保护范围并不局限于此,任何
熟悉本技术领域的技术人员在本技术揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本技术的保护范围之内。因此,本技术的保护范围应以所述权利要求的保护范围为准。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献