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

流体碰撞效果的展示方法、装置、电子设备及存储介质与流程

2022-08-17 09:04:44 来源:中国专利 TAG:


1.本公开涉及计算机图像学技术领域,具体而言,本公开涉及一种流体碰撞效果的展示方法、装置、电子设备及存储介质。


背景技术:

2.流体模拟是计算机图形学和动画的一个非常重要的技术,逼真的流体将为用户带来更真实的体验。但流体的模拟很困难,因为正确的模拟流体行为,模拟流体行为包括对流,扩散,湍流及表面张力的模拟是很复杂的。
3.流体模拟通常有两种方法:基于网格的流体展示方法和基于流体粒子的流体展示方法。
4.1)基于网络的流体展示方法是把流体看成是连续的,而把空间区域离散成网格,再使用有限差分法即欧拉模型来实现基于网格的流体模拟的全过程。基于网格的流体模拟的方法的缺点是:扩散,湍流及表面张力的模拟过程中需要计算的强度大,而且整个模拟过程不能逼真的模拟例如模拟空间有界的一些模拟效果。
5.2)基于粒子的流体展示方法所采用的模型为拉格朗日模型,是把流体表示成一组离散的流体粒子,通过求解粒子动力学来模拟整个流体运动的全过程。目前被广泛采用的基于粒子的流体展示方法是光滑粒子流体动力学方法,该方法存在边界粒子计算精度低和张力不稳定的固有缺陷。
6.在目前的流体展示效果中,当粒子运动到空间壁时,粒子速度强制设置为0,显然这与真实的流体碰撞效果存在很大差异,模拟出的流体仿真性很差,并且还会有部分流体粒子移动到三维虚拟空间的外部,造成显示效果损失。


技术实现要素:

7.本发明实施例提供一种克服上述问题或者至少部分地解决上述问题的流体碰撞效果的展示方法、装置、电子设备及存储介质。
8.第一方面,提供了一种流体碰撞效果的展示方法,该方法包括:
9.对展示三维流体的三维虚拟空间进行网格化处理,获得网格集合,获得三维流体中各流体粒子在当前帧的三维坐标和速度,以确定各流体粒子在当前帧所在的网格;
10.对于网格集合中的每个网格,根据网格内部以及预设范围内的周边网格内的流体粒子在当前帧的速度,获得网格在当前帧的速度;
11.根据预设加速度调整网格在当前帧的速度,获得网格的调整后的速度,根据网格的调整后的速度、网格与三维虚拟空间中预设的容器壁的位置关系以及预设的反弹速度,获得网格在下一帧的速度;
12.根据网格在下一帧的速度以及网格内的流体粒子在当前帧的速度,获得流体粒子在下一帧的速度,根据流体粒子在下一帧的速度以及在当前帧的三维坐标,获得流体粒子在下一帧的三维坐标;
13.根据三维流体中所有流体粒子在下一帧的三维坐标,在三维虚拟空间中展示下一帧的三维流体。
14.第二方面,提供了一种流体碰撞效果的展示装置,包括:
15.网格处理模块,用于对展示三维流体的三维虚拟空间进行网格化处理,获得网格集合,获得三维流体中各流体粒子在当前帧的三维坐标和速度,以确定各流体粒子在当前帧所在的网格;
16.网格速度模块,用于对于网格集合中的每个网格,根据网格内部以及预设范围内的周边网格内的流体粒子在当前帧的速度,获得网格在当前帧的速度;
17.网格速度更新模块,用于根据预设加速度调整网格在当前帧的速度,获得网格的调整后的速度,根据网格的调整后的速度、网格与三维虚拟空间中预设的容器壁的位置关系以及预设的反弹速度,获得网格在下一帧的速度;
18.粒子坐标确定模块,用于根据网格在下一帧的速度以及网格内的流体粒子在当前帧的速度,获得流体粒子在下一帧的速度,根据流体粒子在下一帧的速度以及在当前帧的三维坐标,获得流体粒子在下一帧的三维坐标;
19.展示模块,用于根据三维流体中所有流体粒子在下一帧的三维坐标,在三维虚拟空间中展示下一帧的三维流体。
20.第三方面,本发明实施例提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行程序时实现如第一方面所提供的方法的步骤。
21.第四方面,本发明实施例提供一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如第一方面所提供的方法的步骤。
22.第五方面,本发明实施例提供一种计算机程序,该计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中,当计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行实现如第一方面所提供的方法的步骤。
23.本发明实施例提供的流体碰撞效果的展示方法、装置、电子设备及存储介质,使用网格来辅助粒子的运动模拟计算,能够较好地处理加速度和流体压强对流体运动的影响,且额外开销较小。另外,使用网格的速度变化量来更新粒子速度,而不是把网格速度直接换算为粒子速度,能够减少粒子速度转网格再转回粒子带来的数值耗散,并且通过考虑网格与三维虚拟空间中容器壁的位置关系以及反弹速度,能够展示更加真实自然的流体碰撞效果。
附图说明
24.为了更清楚地说明本公开实施例中的技术方案,下面将对本公开实施例描述中所需要使用的附图作简单地介绍。
25.图1为本公开实施例提供的一种流体碰撞效果的展示方法的流程示意图;
26.图2为本公开实施例提供的网格、第一参考网格、第二参考网格以及容器壁的空间位置关系示意图;
27.图3为本公开实施例提供的三维虚拟空间中的网格映射到二维纹理图像的示意
图;
28.图4为本公开实施例提供的基础网格和周边网格的位置关系图;
29.图5为本公开实施例提供的网格散度的计算流程图;
30.图6为本公开实施例提供的过渡网格和邻接网格的位置关系示意图;
31.图7为本公开实施例提供的一种流体碰撞效果的展示装置的结构示意图;
32.图8为本公开实施例提供的一种电子设备的结构示意图。
具体实施方式
33.下面详细描述本公开的实施例,实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本公开,而不能解释为对本发明的限制。
34.本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”和“该”也可包括复数形式。应该进一步理解的是,本公开的说明书中使用的措辞“包括”是指存在特征、整数、步骤、操作、元件和/或组件,但是并不排除存在或添加一个或多个其他特征、整数、步骤、操作、元件、组件和/或它们的组。应该理解,当我们称元件被“连接”或“耦接”到另一元件时,它可以直接连接或耦接到其他元件,或者也可以存在中间元件。此外,这里使用的“连接”或“耦接”可以包括无线连接或无线耦接。这里使用的措辞“和/或”包括一个或更多个相关联的列出项的全部或任一单元和全部组合。
35.为使本公开的目的、技术方案和优点更加清楚,下面将结合附图对本公开实施方式作进一步地详细描述。
36.本公开提供的流体碰撞效果的展示方法、装置、电子设备和计算机可读存储介质,旨在解决现有技术的如上技术问题。
37.下面以具体地实施例对本公开的技术方案以及本公开的技术方案如何解决上述技术问题进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例中不再赘述。下面将结合附图,对本公开的实施例进行描述。
38.参见图1,为本公开实施例提供的一种流体碰撞效果的展示方法的流程示意图,如图所示,包括:
39.s101、对展示三维流体的三维虚拟空间进行网格化处理,获得网格集合,获得三维流体中各流体粒子在当前帧的三维坐标和速度,以确定各流体粒子在当前帧所在的网格。
40.应当理解的是,三维流体是在预设的三维虚拟空间中进行展示,本公开的三维流体碰撞效果的展示方法(以下简称展示方法)首先对三维虚拟空间进行网格化处理,也即将三维虚拟空间划分为若干个立方体结构的网格,这样操作能够为后续将粒子速度转换为网格速度奠定基础。
41.本公开中的网格为六面体网格,将网格中垂直于z轴的两个面称为底面和顶面,且顶面中任意一个点的z轴坐标大于底面中任意一个点的z轴坐标;将垂直于x轴的两个面称为左侧面和右侧面,且右侧面中任意一个点的x轴坐标大于左侧面中任意一个点的x轴坐标;将垂直于y轴的两个面称为前侧面和后侧面,且后侧面中任意一个点的y轴坐标大于前侧面中任意一个点的y轴坐标。六面体网格共有12条边和8个顶点,相应的,每条边与4个六面体网格接触,每个顶点与8个六面体接触。
42.进一步地,在将三维虚拟空间划分为网格后可以确定每个网格的三维坐标,根据网格中每条边的长度可以确定每个网格的三维坐标。本公开可以将每个网格中同时具有x、y和z轴坐标最小分量的顶点的三维坐标作为网格的坐标,除此之外,也可以将网格中心点的坐标作为网格的坐标,或者将网格中同时具有x、y和z轴坐标最大分量的顶点的三维坐标作为网格的坐标,本公开不作进一步的限定。为了叙述方便,本公开后续实施例均以网格中同时具有x、y和z轴最小分量的顶点的三维坐标作为网格的坐标。
43.应当理解的是,在三维流体的展示过程中至少会存储流体粒子当前帧的三维坐标和速度,在获得流体粒子在当前帧的三维坐标后,结合每个网格的坐标,就可以确定各个流体粒子在当前帧所在的网格。例如某一流体粒子的三维坐标为(5.1,7.2,6.1),由于每个网格的坐标是以同时具有x、y和z轴最小分量的顶点的坐标定义的,并且网格的边长为单位长度,因此可知该流体粒子位于坐标为(5,7,6)的网格内。
44.s102、对于网格集合中的每个网格,根据网格内部以及预设范围内的周边网格内的流体粒子在当前帧的速度,获得网格在当前帧的速度。
45.本公开在三维流体的展示过程中至少会存储流体粒子当前帧的三维坐标和速度,当然也可以对三维流体的每一帧的三维坐标和速度进行存储。考虑到如果直接对流体粒子的速度进行更新,由于流体粒子数量堪比海量,会严重影响绘制三维流体的效率,而通过对三维虚拟空间进行网格化处理,以数量较少的网格表征海量的流体粒子,通过对网格的速度进行更新,能够大幅降低运算开销,更重要的是,在考虑流体压强对流体的运动产生影响时,利用网格的速度比利用粒子速度进行运算更加准确。
46.网格本身是固定不变的,实际发生位移的是网格中的流体粒子,本公开对每个粒子设置影响半径,每个粒子的速度、坐标都会对该粒子影响半径内的网格顶点的速度和坐标发生影响,对于每个网格,该网格内部以及预设范围内的周边网格内的流体粒子都作为对该网格产生影响的流体粒子,通过这些产生影响的流体粒子的速度获得该网格在当前帧的速度,从而先对该网格的速度进行更新,再利用更新后的网格的速度更新流体粒子的速度,能够提高流体粒子速度的更新效率。
47.本公开实施例中每个网格的预设范围内的周边网格包括与该网格处于同一平面的周边网格和处于不同平面的周边网格,也就是说,包括了该网格在三维虚拟空间内、而不是二维平面内的多个周边网格。
48.可选的,本公开可以将预设范围设定为2,同时网格的边长为单位长度1,那么对于一个网格坐标为(c
x
,cy,cz)的网格而言,其中c
x
、cy和cz分别表示该网格的坐标在x轴、y轴和z轴上的分量,其预设范围内的周边网格包括以下坐标的网格:(c
x
,cy,cz)、(c
x
1,cy,cz)、(c
x-1,cy,cz)、(c
x
2,cy,cz)、(c
x-2,cy,cz)、(c
x
,cy 1,cz)、(c
x
,c
y-1,cz)、(c
x
,cy 2,cz)、(c
x
,c
y-2,cz)、(c
x
,cy,cz 1)、(c
x
,cy,c
z-1)、(c
x
,cy,cz 2)、(c
x
,cy,c
z-2)、(c
x
1,cy 1,cz)、(c
x
1,c
y-1,cz)、(c
x
2,cy 1,cz)、(c
x
1,cy 2,cz)。需要注意的是,上述预设范围的具体值仅为示例,本公开实施例对于预设范围的具体大小不作限定,可根据实际情况,例如三维流体划分的网格数量等进行设置。
49.s103、根据预设加速度调整网格在当前帧的速度,根据网格的调整后的速度、网格与三维虚拟空间中预设的容器壁的位置关系以及预设的反弹速度,获得网格在下一帧的速度。
50.通过对网格在当前帧的速度增加预设方向的加速度,可以使网格顶点在下一帧的速度朝预设方向更新。本公开对外力的施加方向不作具体的限制,例如可以是重力方向在三维虚拟空间中对应的坐标轴的方向。
51.本公开为了实现三维流体的碰撞效果,在调整网格在当前帧的速度后,还会结合网格与三维虚拟空间中预设容器壁的位置关系以及反弹速度,获得网格在下一帧的速度,从而会后续实现流体粒子的碰撞效果奠定基础。
52.应当理解的是,容器壁用于限制三维流体运动的运动范围,可以理解为是三维虚拟空间的边界,本公开的容器壁可以是平面,也可以是曲面,对此不作进一步的限定。
53.本公开可以根据预设加速度调整网格在当前帧的速度,根据网格的调整后的速度、网格与三维虚拟空间中预设的容器壁的位置关系以及预设的反弹速度,获得网格在下一帧的速度。
54.s104、根据网格在下一帧的速度以及网格内的流体粒子在当前帧的速度,获得流体粒子在下一帧的速度,根据流体粒子在下一帧的速度以及在当前帧的三维坐标,获得流体粒子在下一帧的三维坐标。
55.由于网格的速度变化能够反应出网格内存在的粒子的速度变化,因此使用网格在下一帧的速度与当前帧的速度的差值作为流体粒子的速度变化量,将该速度变化量与流体粒子在当前帧的速度相加,即可获得流体粒子在下一帧的速度。通过利用网格的速度更新流体粒子的速度,为后续确定流体粒子在下一帧的三维坐标奠定基础。
56.进一步地,本公开可以根据流体粒子在下一帧的速度与时间步长的乘积,获得流体粒子从当前帧到下一帧的时间内发生的位移,然后在流体粒子在当前帧的三维坐标上累加该位移,获得流体粒子在下一帧的三维坐标。
57.s105、根据三维流体中所有流体粒子在下一帧的三维坐标,在三维虚拟空间中展示下一帧的三维流体。
58.通过上述方法可以获取三维流体中所有流体粒子在下一帧的三维坐标,根据流体粒子在下一帧的三维坐标,将流体粒子在三维虚拟空间中进行位置更新,即可获得下一帧的三维流体,从而在三维虚拟空间中展示下一帧的三维流体。
59.本公开提供的流体碰撞效果的展示方法,使用网格来辅助粒子的运动模拟计算,能够较好地处理加速度和流体压强对流体运动的影响,且额外开销较小。另外,使用网格的速度变化量来更新粒子速度,而不是把网格速度直接换算为粒子速度,能够减少粒子速度转网格再转回粒子带来的数值耗散,并且通过考虑网格与三维虚拟空间中容器壁的位置关系以及反弹速度,能够展示更加真实自然的流体碰撞效果。
60.应当理解的是,gpu(graphics proceing unit,图形处理器)在进行图像处理时相比cpu(central proceing unit,中央处理器)具有明显的优势,但由于gpu只能处理二维图像,而不能直接处理三维图像,因此现有在进行三维流体展示时,往往只利用cpu完成。现有在利用gpu进行三维流体模拟时,仍然需要利用cpu对三维流体数据进行预处理,也即目前尚不存在只利用gpu实现三维流体展示的方法。
61.为了实现利用gpu实现三维流体的展示方法,在上述各实施例的基础上,作为一种可选实施例,步骤s104之后还包括:
62.根据流体粒子在下一帧的三维坐标,将流体粒子映射至下一帧的第一二维纹理图
像和第二二维纹理图像,获得流体粒子在下一帧的第一二维纹理图像和第二二维纹理图像中对应的像素点;将流体粒子在下一帧的三维坐标转换成流体粒子在下一帧的第一二维纹理图像中对应的像素点的rgb值;将流体粒子在下一帧的速度转换成流体粒子在下一帧的第二二维纹理图像中对应的像素点的rgb值。
63.具体的,流体粒子在二维纹理图像中的横坐标为x width*z,其中x为流体粒子在下一帧的三维坐标的x轴分量,z为流体粒子在下一帧的三维坐标的z轴分量,width为三维虚拟空间在z轴方向的宽度。
64.例如,若三维虚拟空间的大小为3*4*5,可知三维虚拟空间在z轴方向的宽度为5,若一个流体粒子在下一帧的三维坐标为(1,2,3),那么流体粒子映射到二维纹理图像的横坐标为1 5*3=16,纵坐标为2,即流体粒子在二维纹理图像的二维坐标为(16,2)。通过上述方法,所有流体粒子的三维坐标均可以映射到二维纹理图像中,进一步可知,该二维纹理图像的大小为28*4。
65.由于流体粒子的三维坐标、速度以及rgb值均是三维向量,因此可以根据三维坐标和速度在三轴上的分量直接作为r、g、b的值,例如某流体粒子的三维坐标为(1,2,3),速度为(4,5,6),那么该流体粒子在第一二维纹理图像中的rgb值为:红色通道(r)的值为1,绿色通道(g)的值为2,蓝色通道(b)的值为3,那么该流体粒子在第二二维纹理图像中的rgb值为:红色通道(r)的值为4,绿色通道(g)的值为5,蓝色通道(b)的值为6;应当理解的是,上述速度中的4、5和6分别表示该流体粒子在x、y和z轴的速度分量。
66.本公开实施例可将流体粒子的三维坐标按照相同的方法映射到两幅二维纹理图像中,之后将流体粒子的三维坐标和速度分别在两幅二维纹理图像中以rgb值进行表征,从而gpu可以直接读取两幅二维纹理图像,通过解析rgb值确定流体粒子的三维坐标和速度,实现完全在gpu上进行三维流体模拟的效果。
67.在上述各实施例的基础上,作为一种可选实施例,获得三维流体中各流体粒子在当前帧的三维坐标和速度,包括:
68.获取当前帧的第一二维纹理图像和第二二维纹理图像;
69.对于第一二维纹理图像中的每个像素点,根据像素点中的rgb值,确定与像素点对应的流体粒子在当前帧的三维坐标;
70.对于第二二维纹理图像中的每个像素点,根据像素点中的rgb值,确定与像素点对应的流体粒子在当前帧的速度。
71.本公开的第一二维纹理图像和第二二维纹理图像中的像素点分别为三维流体的流体粒子在第一二维纹理图像和第二二维纹理图像的映射,第一二维纹理图像和第二二维纹理图像中的像素点的rgb值分别用于表征对应的流体粒子在当前帧的三维坐标和速度。
72.在上述各实施例的基础上,作为一种可选实施例,步骤s103中根据网格的调整后的速度、网格与三维虚拟空间中预设的容器壁的位置关系以及预设的反弹速度,获得网格在下一帧的速度,包括:
73.s201、将调整后的速度作为第一速度。
74.本公开可以通过对网格在当前帧的速度增加一个加速度,从而获得第一速度,例如,定义网格在当前帧的速度为v
t
,增加的加速度为a,时间步长为dt,则第一速度v
t’可以表示为v
t’=v
t
a*dt。
75.s202、根据网格与容器壁的位置关系,更新第一速度,获得网格的第二速度。
76.本公开在计算第二速度时,可以分别计算第二速度在每个坐标轴上的分量,本公开将三维虚拟空间所在坐标系中的每一个坐标轴作为目标轴,将网格在目标轴正方向上相邻的网格作为第一参考网格,将网格在目标轴负方向上相邻的网格作为第二参考网格,以x轴为例,若网格的坐标p=(p1,p2,p3),其中p1、p2和p3分别是网格的坐标在x轴、y轴和z轴的分量,该网格在x轴正方向上相邻的网格的坐标为p1=(p1 1,p2,p3),该网格在x轴负方向上相邻的网格的坐标为p2=(p
1-1,p2,p3);并且,本公开在计算第二速度时,可以根据网格和第一参考网格与容器壁是否相交以及网格与第二参考网格与容器壁是否相交,获得网格的第二速度在目标轴的分量。
77.s203、根据第二速度求解三维流体的压强场,获得网格的第三速度。
78.本公开根据网格的第二速度确定网格的散度,通过对网格的散度进行雅各比(jocabi)迭代,获得网格的压强场梯度,之后再根据第二速度和压强场梯度的差值,获得网格的第三速度。
79.散度(divergence)可用于表征空间各点矢量场发散的强弱程度,在流体力学中密度的变化率等于动量的散度,散度如果是正的,代表矢量场是往外散出的,如果是负的,代表这些矢量场是往内集中的。也就是说,散度表明了向量的流动方向,而这个流动的程度越大,散的越快,那么对应的散度值也就越大。
80.在对网格的散度进行雅各比迭代的过程中,首先初始化每个网格的压强为0,在每次迭代过程中,首先确定该网格上下前后左右六个网格在上一轮迭代的压强,并计算6个压强之和;然后计算6个压强之和与该网格的散度的差值;将差值除以6,即可获得网格在本轮迭代的压强。本公开对迭代的次数不作具体的限定,例如可以为20次。
81.进一步地,本公开对于没有流体粒子的网格,压强始终设置为0。
82.压强场梯度即沿流体流动(运动)方向,单位路程长度上的压强变化值,通过统计每个网格与其在速度方向上相邻的另一个网格的压强的差,即可获得网格的压强场梯度。
83.本公开在计算第二速度后,进一步计算网格的压强场梯度,并利用第二速度和压强场梯度的差值,获得网格的第三速度,能够使得流体在被施加外力后不至于过于聚集,模拟效果更加真实。
84.s204、根据网格与容器壁的位置关系以及预设的反弹速度更新第三速度,获得网格在下一帧的速度。
85.本公开在计算网格在下一帧的速度时,会分别计算下一帧的速度在每个坐标轴上的分量,与计算第二速度类似的,也需要考虑网格与第一参考网格的连线是否与容器壁相交的判断结果以及网格与第二参考网格的连线是否与容器壁相交的判断结果,结合预设的反弹速度对第三速度在目标轴的分量进行更新,从而获得下一帧的速度在每个坐标轴上的分量。
86.在上述各实施例的基础上,作为一种可选实施例,步骤s202中的根据网格与容器壁的位置关系,更新第一速度,获得网格的第二速度,包括:
87.s301、将三维虚拟空间所在坐标系中的任意一个坐标轴作为目标轴,将网格在目标轴正方向上相邻的网格作为第一参考网格,将网格在目标轴负方向上相邻的网格作为第二参考网格;
88.s302、根据网格与第一参考网格的连线是否与容器壁相交,更新第一速度在目标轴的分量,获得第一参考速度在目标轴的分量;
89.s303、根据网格与第二参考网格的连线是否与容器壁相交,更新第一参考速度在目标轴的分量,获得第二速度在目标轴的分量。
90.本公开在由第一速度获得第二速度的过程中,首先根据网格和第一参考网格的连线是否与容器壁相交,获得第一参考速度,然后再根据网格和第二参考网格的连线是否与容器壁相交,对第一参考速度进行更新,获得第二速度,具体地:
91.若网格与第一参考网格的连线不与容器壁相交,则将第一速度在目标轴的分量作为第一参考速度在目标轴的分量;若网格与第一参考网格的连线与容器壁相交,则将第一速度在目标轴的分量和预设速度阈值在目标轴的分量间的较小值作为第一参考速度在目标轴的分量。
92.若网格与第二参考网格的连线不与容器壁相交,则将第一参考速度在目标轴的分量作为第二速度在目标轴的分量;若网格与第二参考网格的连线与容器壁相交,则将第一参考速度在目标轴更新的分量和预设速度阈值在目标轴的分量间的较大值作为第二速度在目标轴的分量。
93.请参见图2,其示例性地示出了本公开实施例提供的网格、第一参考网格、第二参考网格以及容器壁的空间位置关系示意图,如图,网格c1和网格c2分别是与网格g1在x轴上的第一参考网格和第二参考网格,r1和r2均是三维虚拟空间中的容器壁,一个网格和另一个网格间的连线可以是一个网格中的任意一个点与另一个网格中的任意一个点的连线,为了方便起见,本公开实施例将定义网格坐标的点间的连线作为两个网格间的连线。由图2可知,网格g1与网格c1的连线与容器壁r1相交,网格g1与网格c2的连线不与容器壁r1和r2相交。
94.以计算网格g1的第二速度在x轴的分量为例,若定义网格g1的速度为(v
x
,vy,vz),其中v
x
,vy,vz分别为网格g1的速度在x、y、z轴上的分量,预设速度阈值为(v
xa
,v
ya
,v
za
),v
xa
,v
ya
,v
za
分别为预设速度阈值在x、y、z轴上的分量,且v
x
>v
xa
,vy>v
ya
,vz>v
za

95.首先由于网格g1与网格c1的连线与容器壁相交,因此第一参考速度在x轴的分量是第一速度在x轴的分量和预设速度阈值间的较小值,也即v
xa
;又由于网格g1与网格c2的连线不与容器壁相交,因此第二速度在x轴的分量为第一参考速度在x轴的分量,也即v
xa

96.可选地,本公开的预设速度阈值为0,也就是说,如果网格与第一参考网格的连线与容器壁相交,同时网格与第二参考网格的连线与容器壁不相交,那么网格的第二速度将更新为0。
97.在上述各实施例的基础上,作为一种可选实施例,步骤s204中的根据网格与容器壁的位置关系以及预设的反弹速度更新第三速度,获得网格在下一帧的速度,包括:
98.s401、将三维虚拟空间中的任意一个坐标轴作为目标轴,将网格在目标轴正方向上相邻的网格作为第一参考网格,将网格在目标轴负方向上相邻的网格作为第二参考网格;
99.s402、根据预设的反弹速度以及网格与第一参考网格的连线是否与容器壁相交,更新第三速度在目标轴的分量,获得第二参考速度在目标轴的分量。
100.具体的,若网格与第一参考网格的连线不与容器壁相交,则将第三速度在目标值
的分量作为第二参考速度在目标轴的分量;
101.若网格与第一参考网格的连线与容器壁相交,则将第三速度在目标值的分量和反弹速度在目标轴的分量的负值间的较小值作为第二参考速度在目标轴的分量。
102.s403、根据预设的反弹速度以及网格与第二参考网格的连线是否与容器壁相交,更新第二参考速度在目标轴的分量,获得网格在下一帧的速度在目标轴的分量。
103.若网格与第二参考网格的连线不与容器壁相交,则将第二参考速度在目标轴的分量作为网格顶点在下一帧的速度在目标轴的分量;
104.若网格与第二参考网格的连线与容器壁相交,则将第三速度在目标轴的分量与反弹速度在目标轴的分量间的较大值,作为网格顶点在下一帧的速度在目标轴的分量。
105.以图2所示的空间位置关系为例,首先由于网格g1与网格c1的连线与容器壁相交,因此第二参考速度在x轴的分量是第一速度在x轴的分量和反弹速度在目标轴的分量的负值间的较小值;又由于网格g1与网格c2的连线不与容器壁相交,因此第二速度在x轴的分量为第二参考速度在x轴的分量。
106.在上述各实施例的基础上,作为一种可选实施例,获得网格在下一帧的速度,之后还包括:
107.若网格在下一帧的速度在三维虚拟空间所在坐标系的任意一轴的分量大于预设阈值,则将任意一轴的分量更新为预设值。
108.需要注意的是,为了避免因粒子运动至三维虚拟空间的外部而导致流体粒子无法渲染显示的问题,本公开获得网格在下一帧的速度后,还会检测每一轴的分量是否大于预设值,若大于预设值,则将该轴的分量更新为预设值。由于通常是在z轴给流体粒子施加一个重力加速度,所以流体粒子在下一帧的速度在z轴的分量最有可能超过预设值。
109.在上述各实施例的基础上,作为一种可选实施例,本公开实施例在获取网格在当前帧的速度时,将网格的周边网格分为与网格处于同一水平面的周边网格和处于不同水平面两种不同的情况,并针对两种不同的情况获得网格在当前帧的速度。之所以这样操作,是因为在将三维虚拟空间中的点映射到二维纹理图像时,原本处于同一水平面的两个点在二维纹理图像中的相对位置没有改变,而原本处于不同水平面的两个点在二维纹理图像中的相对位置会发生改变,这就导致不同水平面的流体粒子之间的相互作用在三维虚拟空间和二维空间是不同的。
110.请参见图3,其示例性地示出了三维虚拟空间中的网格映射到二维纹理图像的示意图,如图所示,三维虚拟空间中存在8个网格,网格的边长为单位长度,其中包括位于下层的4个网格1~4和位于上层的4个网格5~8,8个网格到二维纹理图像的过程实际上是一个平铺的过程,即将每一层的网格平铺在二维纹理图像,原本2*2*2的三维结构平铺后就成为了4*2的长方形,原本网格1和5在三维虚拟空间是直接接触的,但映射到二维纹理图像后,网格1和5之间隔着网格2。
111.基于此,根据网格内部以及预设范围内的周边网格内的流体粒子在当前帧的速度,获得网格在当前帧的速度,包括:
112.将每个网格作为基础网格,并且,针对每个基础网格,执行如下操作:
113.s501、将每个基础网格内部以及预设范围内的周边网格内的流体粒子作为参考流体粒子,确定参考流体粒子与对应的目标网格的相对位置。
114.本公开在计算每个网格在当前帧的速度时,将每个网格作为基础网格,首先将基础网格内部以及预设范围内周边网格内的流体粒子均作为参考流体粒子,以预设范围为单位长度为例,那么对于每个基础网格,与其同一水平面的8个网格以及处于上、下两个水平面的18个网格,一共26个网格内的流体粒子均属于参考流体粒子。
115.在确定参考流体粒子后,进一步确定参考流体粒子对应的目标网格。本公开根据参考流体粒子所在的网格与基础网格是否处于同一平面,设置了两种目标网格的确定方式:
116.(1)当基础网格对应的参考流体粒子位于基础网格或者所在的网格与基础网格处于同一水平面时,则参考流体粒子对应的目标网格为参考流体粒子所在的网格;
117.(2)当基础网格对应的参流体粒子所在的网格与基础网格处于不同水平面,则参考流体粒子对应的目标网格为基础网格。
118.参见图4,其示例性地示出了本公开实施例的基础网格和周边网格的位置关系图,如图所示,网格1为基础网格,网格2和网格3均是基础网格1的周边网格,定义x-y平面为水平面,网格2与网格1处于同一水平面,网格3与网格1处于不同的水平面。
119.对于基础网格1内的参考流体粒子,该参考流体粒子的目标网格即为其所在的网格,即基础网格1;
120.对于与网格1处于同一平面的网格,该网格内的参考流体粒子的目标网格即为该参考流体粒子所在的网格,比如网格2内的参考流体粒子的目标网格即为网格2;
121.而对于与网格1处于不同平面的网格,该网格内的参考流体粒子的目标网格即为参考网格1,比如网格3内的参考流体粒子的目标网格即为网格1。
122.在确定每个参考流体粒子的目标网格后,即可根据参考流体粒子的坐标以及目标网格的坐标,确定参考流体粒子和目标网格间的相对位置。例如,本公开可以将目标网格的坐标与参考流体粒子的坐标间的差值定义为参考流体粒子和目标网格间的相对位置。例如,目标网格的坐标为(2,2,2),参考流体粒子的坐标为(3,3,3),则参考流体粒子和目标网格间的相对位置为(1,1,1)。
123.s502、根据相对位置获得参考流体粒子相对于对应的目标网格的权重。
124.相对位置能够表征参考流体粒子与目标网格在每个坐标轴上的远近关系,例如,参考流体粒子更靠近目标网格的垂直于x轴的面,那么可以认为参考流体粒子的速度在x轴的分量对目标网格的速度影响更多,而参考流体粒子的速度在y轴和z轴的分量对目标网格的速度影响更少,基于此,本公开可以将相对位置转换为参考流体粒子相对于目标网格的权重。本公开中的权重可以用向量进行表示,向量中的元素分别对应参考流体粒子对于目标网格的权重在每个坐标轴的分量。
125.s503、根据参考流体粒子在当前帧的速度以及参考流体粒子相对于对应的目标网格的权重,获得参考流体粒子相对于对应的目标网格的速度加权值。
126.本公开可以将参考流体粒子在当前帧的速度与参考流体粒子相对于对应的目标网格的权重的乘积,作为参考流体粒子相对于对应的目标网格的速度加权值。
127.例如,参考流体粒子在当前帧的速度为(vx,vy,vz),vx,vy,vz分别表示参考流体粒子在当前帧的速度在x轴、y轴和z轴的分量。
128.参考流体粒子相对于对应的目标网格的权重为(w
x
,wy,wz),w
x
,wy,wz分别表示参考
流体粒子相对于对应的目标网格的权重在x轴、y轴和z轴的分量。
129.参考流体粒子相对于对应的目标网格的速度加权值为(v
x
*w
x
,vy*wy,vz*wz),其中,*表示乘法运算。
130.s504、根据所有参考流体粒子相对于对应的目标网格的速度加权值之和以及所有参考流体粒子相对于对应的目标网格的权重之和,获得基础网格在当前帧的速度。
131.具体的,本公开在获得所有参考流体粒子对于目标网格的速度加权值后进行求和,获得总的速度加权值;对所有参考流体粒子对于目标网格的权重进行求和,获得总的权重,将总的速度加权值与总的权重相除,作为网格在当前帧的速度。
132.本公开根据参考流体粒子和对应的目标网格的相对位置确定参考流体粒子与对应的目标网格的权重,利用权重对参考流体子在当前帧的速度进行加权,获得参考流体粒子相对于对应的目标网格的速度加权值,最后根据所有参考流体粒子相对于对应的目标网格的速度加权值之和以及所有参考流体粒子相对于对应的目标网格的权重之和,获得基础网格在当前帧的速度,整个过程充分考虑了参考流体粒子和目标网格的位置关系,使得获得的网格的速度更符合流体在三维虚拟空间的运动规律。
133.在上述各实施例的基础上,作为一种可选实施例,根据相对位置获得参考流体粒子对于对应的目标网格的权重,包括:
134.s601、将三维虚拟空间所在坐标系中的每一轴作为目标轴,将对应的目标网格中垂直于目标轴方向的一个面作为目标面,获取参考流体粒子与目标面的中间点之间的距离分别在三轴方向上的投影长度。
135.本公开将参考流体粒子在所处网格内的相对位置以参考流体粒子分别与所处网格在x、y和z轴方向的三个面上的中间点之间的距离进行表征。
136.应当理解的是,所有网格选取的x、y和z轴方向的三个面应当是统一的,本公开选择与网格中同时具有x、y和z轴最小分量的顶点接触的三个面,也即,如果网格的三维坐标为(c
x
,cy,cz),也即x、y和z轴最小分量的顶点的三维坐标为(c
x
,cy,cz),同时网格的边长为单位长度1,那么所处网格在x、y和z轴方向的三个面上的中间点可以为:(c
x
,cy 0.5,cz 0.5)、(c
x
0.5,cy,cz 0.5)和(c
x
0.5,cy 0.5,cz),由此可以理解的是,本公开的网格在某一轴方向的面,也即垂直于该轴的面。
137.由于本公开的流体是三维流体,因此在计算权重时,也应对计算每个轴上的权重分量。在计算每个轴上的权重分量时,本公开是以参考流体粒子与所处网格在该轴方向的面的中心点间的距离计算的。
138.例如,在计算x轴上的权重分量时,获取参考流体粒子与所处网格在x方向的面的中心点之间的距离,由于该距离是一个三维虚拟空间内两点间的距离,本公开进一步获取该距离在x、y和z轴方向上的投影长度,实际上也即,参考流体粒子的x、y和z轴的坐标值分别与所处网格在x方向的面的中心点的x、y和z轴的坐标值相减,即可获得投影长度。例如,若参考流体粒子的坐标为(a,b,c),而所处网格在x方向的面的中心点的坐标为(e,f,g),则参考流体粒子与所处网格在目标轴方向的面的中间点之间的距离在x、y和z轴方向上的投影长度分别为|a-e|、|b-f|和|c-g|。
139.s602、分别比较三个投影长度与单位长度的差值,获得第一差值、第二差值和第三差值,将第一差值与预设值之间较大的数作为第一参数,将第二差值与预设值之间较大的
数作为第二参数,将第三差值与预设值之间较大的数作为第三参数;
140.s603、根据第一参数、第二参数以及第三参数的乘积获得参考流体粒子对于目标网格的权重在目标轴的分量,根据分量获得参考流体粒子对于对应的目标网格的权重。
141.具体的,本公开可以将第一参数、第二参数与第三参数的乘积作为参考流体粒子对于对应的目标网格的权重在目标轴的分量。
142.本公开的根据相对位置获得参考流体粒子对于对应的目标网格的权重还可以基于以下公式计算:
143.w=(k(p-c
x
),k(p-cy),k(p-cz));
144.k(u)=h(u
x
)
·
h(uy)
·
h(uz);
145.h(x)=max{0,1-|x|};
146.其中,w表示参考流体粒子p对于目标网格的权重,k(u)表示自变量为u的函数k,k(p-c
x
)表示根据参考流体粒子p与目标网格在x轴方向的面的中间点c
x
获得的参考流体粒子p对于目标网格的权重在x轴的分量,k(p-cy)表示根据参考流体粒子p与目标网格在y轴方向的面的中间点cy获得的参考流体粒子p对于目标网格的权重在y轴的分量,k(p-cz)表示根据参考流体粒子p与目标网格在z轴方向的面的中间点cz获得的参考流体粒子p对于目标网格的权重在z轴的分量,h(u
x
)表示参数u在x轴的分量,h(uy)表示参数u在y轴的分量,h(uz)表示参数u在z轴的分量。h(x)表示自变量为x的函数h。
147.例如,若粒子位置为p(p
x
,py,pz),所在网格三维坐标为c(c
x
,cy,cz),网格在x、y和z轴方向的边界中心点分别为c
x
(c
x
,cy 0.5,cz 0.5),cy(c
x
0.5,cy,cz 0.5),cz(c
x
0.5,cy 0.5,cz);
148.以k(p-c
x
)为例,k(p-c
x
)=h(p
x-c
x
)*h(p
y-c
y-0.5)*h(p
z-c
z-0.5);
149.h(p
x-c
x
)=max{0,1-|p
x-c
x
|};
150.h(p
y-c
y-0.5)=max{0,1-|p
y-c
y-0.5|};
151.h(p
z-cz)=max{0,1-|p
z-c
z-0.5|}。
152.本公开根据参考流体粒子与目标网格在目标轴方向的面的中间点之间的距离获得参考流体粒子对于目标网格的权重在目标轴的分量,根据权重与参考流体粒子在当前帧的速度进一步获得参考流体粒子对于目标网格的速度加权值,然后利用所有参考流体粒子对于目标网格的速度加权值之和以及所有参考流体粒子对于目标网格的权重之和,获得基础网格在当前帧的速度,由于基础网格考虑了一定范围内的参考流体粒子的影响,因此获得的网格的速度的准确性更高。
153.在上述各实施例的基础上,作为一种可选实施例,本公开根据第二速度求解三维流体的压强场,获得网格的第三速度,包括:根据每个网格的第二速度获得网格的散度,根据网格的散度进行雅各比迭代,获得网格的压强场梯度,根据网格的第二速度和压强场梯度的差值,获得网格的第三速度。
154.在上述各实施例的基础上,作为一种可选实施例,根据每个网格的第二速度获得网格的散度,包括:
155.s701、对于每个网格顶点,根据网格顶点接触的所有网格的第二速度,获得网格顶点的速度。
156.具体的,由于每个网格顶点接触8个网格,因此将接触的8个网格在的第二速度的
平均值,作为网格顶点的速度。
157.s702、对于网格的每一面,根据每一面的所有网格顶点的速度的平均值,作为每一面的速度。
158.在确定每个网格顶点的速度后,考虑到每个面具有4个网格顶点,因此可以将4个网格顶点在下一帧的速度的平均值,作为每个面的速度。
159.s703、对于网格中任意的两个相对面,根据两个相对面的速度,获得两个相对面的速度差,根据网格所有相对面的速度差之和,获得网格的散度。
160.参见图5,其示例性地示出了本公开实施例提供的网格散度的计算流程图,如图所示,网格中垂直于x轴的面分别为x1和x2,其中x1上任意一点坐标的x轴分量大于x2上任意一点坐标的x轴分量;垂直于y轴的面分别为y1和y2,其中y1上任意一点坐标的y轴分量大于y2上任意一点坐标的y轴分量;垂直于z轴的面分别为z1和z2,其中z1上任意一点坐标的z轴分量大于z2上任意一点坐标的z轴分量;在获得上述六个面的速度后,分别计算相对的两个面的速度的差值,即计算面x1与面x2的速度的差值dx、面y1与面y2的速度的差值dy、面z1与面z2的速度的差值dz,将dx、dy和dz求和,即可获得该网格的散度。
161.进一步地,本公开在计算散度后,还可以将该散度与预设的最大散度进行比较,若该散度大于预设的最大散度,则将该散度更新为最大散度,若该散度没有大于预设的最大散度,则不需要更新。通过设置最大散度的限制,能够使得模拟的三维流体的膨胀(流体粒子扩散)和压缩(流体粒子凝聚),更符合真实的流体运动效果。
162.在上述各实施例的基础上,根据流体粒子在下一帧的速度以及在当前帧的三维坐标,获得流体粒子在下一帧的三维坐标,包括:
163.s801、根据流体粒子在下一帧的速度、当前帧与下一帧的时差以及流体粒子在当前帧的三维坐标,获得流体粒子的过渡位置。
164.本公开在确定流体粒子在下一帧的位置时,首先会根据流体粒子在下一帧的速度、当前帧与下一帧的时差以及流体粒子在当前帧的三维坐标计算出流体粒子的过渡位置。过渡位置是本公开假想出的位置,目的是为了更平滑地更新流体粒子的位置,从计算过渡位置所需的参量可知,选取当前帧与下一帧的时差的一半,是为了获取粒子按照流体粒子在下一帧的速度和当前帧的三维坐标运动时,在当前帧对应的时刻到下一帧对应的时刻这一时段内的中间时刻所在的位置。
165.s802、确定流体粒子的过渡位置所在的网格,作为过渡网格。
166.s803、根据过渡网格以及过渡网格在三个坐标轴的延长线上相邻的邻接网格的坐标和速度,获得流体粒子在过渡位置的过渡速度。
167.对于每个流体粒子而言,在确定了流体粒子对应的过渡网格后,利用过渡网格以及过渡网格在三个坐标轴的延长线上相邻的邻接网格的坐标和速度,计算出该流体在过渡位置的过渡速度,过渡速度在速度大小和速度方向上相比下一帧的速度能够更平滑地衔接上一帧的速度,为后续重新根据过渡速度计算流体粒子在下一帧的三维坐标奠定基础。
168.具体地,步骤s803包括:
169.将三维虚拟环境所在坐标系的每一轴作为目标轴,确定过渡网格在目标轴的延长线上相邻的邻接网格,确定过渡网格以及邻接网格垂直于目标轴的目标面。
170.参见图6,其示例性地示出了本公开实施例提供的过渡网格和邻接网格的位置关
系示意图,如图所示,本公开实施例中的过渡网格g1具有三个邻接网格,其中邻接网格l1位于过渡网格g1在x轴方向的延长线上,邻接网格l2位于过渡网格g1在y轴方向的延长线上,邻接网格l3位于过渡网格g1在z轴方向的延长线上。
171.根据过渡网格的目标面的网格顶点接触的所有网格在下一帧的速度,获得过渡网格的目标面的第一中心点的速度;根据邻接网格的目标面的网格顶点接触的所有网格在下一帧的速度,获得邻接网格的目标面的第二中心点的速度。
172.本公开在计算目标面的中心点的速度时,采用先计算网格顶点的速度,然后再对目标面上的四个网格顶点的速度取平均值,即可获得目标面的中心点的速度,由上述实施例可知,每个网格顶点的速度是该网格顶点接触的8个网格的速度的平均值。
173.例如,以z轴为例,定义过渡位置为(p
x
,py,pz),过渡网格的坐标为则过渡网格在z轴方向的面(也即垂直于z轴的面)的中心点,即第一中心点为c
z,1
=(c1 0.5,c2 0.5,c3),对于该面上中心点的速度,本公开采用该面上的四个网格顶点在下一帧的速度的平均值进行表征,定义计算出的第一中心点的速度为v
z,1
=(v1,v2,v3)。
174.过渡网格在z轴延长线方向上相邻的网格,即邻接网格的坐标为则邻接网格在z轴方向的面的中心点,即第二中心点为c
z,2
=(c1 0.5,c2 0.5,c3 1),定义计算出的第二中心点的速度为v
z,1
=(v4,v5,v6)。
175.根据邻接网格的坐标、过渡位置以及过渡网格的坐标在坐标轴的分量和第一中心点和第二中心点的速度在目标轴的分量,获得过渡速度在目标轴的分量,根据过渡速度在所有坐标轴的分量,获得过渡速度。
176.在上述各实施例的基础上,作为一种可选实施例,根据邻接网格的坐标、过渡位置以及过渡网格的坐标在坐标轴的分量和第一中心点和第二中心点的速度在坐标轴的分量,获得过渡速度在坐标轴的分量,包括:
177.首先根据参考网格和过渡位置的三维坐标在目标轴的分量之差,获得第一权重;根据过渡位置与目标网格的三维坐标在目标轴的分量之差,获得第二权重;
178.将第一权重与第二中心点的速度在目标轴的分量的乘积作为第一速度,将第二权重与第一中心点的速度在目标轴的分量的乘积作为第二速度,将第一速度与第二速度的和作为流体粒子的过渡速度在目标轴的分量。
179.以z轴为例,本公开可根据以下公式计算流体粒子的过渡速度在z轴的分量vz:
[0180]vz
=(c3 1-pz)*v6 (p
z-c3)*v3[0181]
在该公式中,c3 1-pz为z轴上的邻接网格与过渡位置的三维坐标在z轴的分量之差,也即第一权重;p
z-c3即过渡位置与过渡网格的三维坐标在目标轴的分量之差,也即第二权重;(c3 1-pz)*v6即第一速度,(p
z-c3)*v3即第二速度。
[0182]
通过上述方法即可确定流体粒子的过渡速度在x坐标轴的分量v
x
和在x坐标轴的分量vy,从而流体粒子的过渡速度可以表示为(vx,vy,vz)。
[0183]
s604、根据流体粒子的过渡速度、时间步长以及流体在当前帧的三维坐标,获得流体粒子在下一帧的三维坐标。
[0184]
具体的,本公开可以根据流体粒子的过渡速度和时间步长的乘积,获得流体粒子
从当前帧至下一帧的位移,然后根据该位移与当前帧的三维坐标相加,即可获得流体粒子在下一帧的三维坐标。进一步根据所有流体粒子在下一帧的三维坐标,在三维虚拟环境中展示下一帧的三维流体。
[0185]
本公开实施例在根据流体粒子在下一帧的速度以及在当前帧的三维坐标,获得流体粒子在下一帧的三维坐标的流程中,首先根据流体粒子在下一帧的速度、相邻两帧的时差以及流体粒子在当前帧的三维坐标,获得流体粒子的过渡位置,能够更平滑地更新流体粒子的位置,根据过渡位置所在的网格在坐标轴延长线上的邻接网格的坐标和速度,进一步获得流体粒子在过渡位置的过渡速度,过渡速度在速度大小和速度方向上相比下一帧的速度能够更平滑地衔接上一帧的速度,之后利用过渡速度计算流体粒子的三维坐标更符合流体的运动特点。
[0186]
根据本公开实施例的流体碰撞效果的展示方法,可以使用网格来辅助粒子的运动模拟计算,能够较好地处理加速度和流体压强对流体运动的影响,且额外开销较小。另外,使用网格的速度变化量来更新粒子速度,而不是把网格速度直接换算为粒子速度,能够减少粒子速度转网格再转回粒子带来的数值耗散,并且通过考虑网格与三维虚拟空间中容器壁的位置关系以及反弹速度,能够展示更加真实自然的流体碰撞效果。
[0187]
本公开实施例提供了一种流体碰撞效果的展示装置,如图7所示,该装置可以包括:网格处理模块101、网格速度模块102、网格速度更新模块103、粒子坐标确定模块104和展示模块105,具体地:
[0188]
网格处理模块101,用于对展示三维流体的三维虚拟空间进行网格化处理,获得网格集合,获得三维流体中各流体粒子在当前帧的三维坐标和速度,以确定各流体粒子在当前帧所在的网格;
[0189]
网格速度模块102,用于网格集合中的每个网格,根据网格内部以及预设范围内的周边网格内的流体粒子在当前帧的速度,获得网格在当前帧的速度;
[0190]
网格速度更新模块103,用于根据预设加速度调整网格在当前帧的速度,根据网格的调整后的速度、网格与三维虚拟空间中预设的容器壁的位置关系以及预设的反弹速度,获得网格在下一帧的速度;
[0191]
粒子坐标确定模块104,用于根据网格在下一帧的速度以及网格内的流体粒子在当前帧的速度,获得流体粒子在下一帧的速度,根据流体粒子在下一帧的速度以及在当前帧的三维坐标,获得流体粒子在下一帧的三维坐标;
[0192]
展示模块105,用于根据三维流体中所有流体粒子在下一帧的三维坐标,在三维虚拟空间中展示下一帧的三维流体。
[0193]
本发明实施例提供的流体碰撞效果的展示装置,具体执行上述方法实施例流程,具体请详见上述流体碰撞效果的展示方法实施例的内容,在此不再赘述。本发明实施例提供的流体碰撞效果的展示装置,使用网格来辅助粒子的运动模拟计算,能够较好地处理加速度和流体压强对流体运动的影响,且额外开销较小。另外,使用网格的速度变化量来更新粒子速度,而不是把网格速度直接换算为粒子速度,能够减少粒子速度转网格再转回粒子带来的数值耗散,并且通过考虑网格与三维虚拟空间中容器壁的位置关系以及反弹速度,能够展示更加真实自然的流体碰撞效果。
[0194]
在上述各实施例的基础上,作为一种可选实施例,网格速度更新模块,包括:
[0195]
第二速度获取模块,用于将调整后的速度作为第一速度,根据网格与容器壁的位置关系,更新第一速度,获得网格的第二速度;
[0196]
第三速度获取模块,用于根据第二速度求解三维流体的压强场,获得网格的第三速度;
[0197]
第三速度更新模块,用于根据网格与容器壁的位置关系以及预设的反弹速度更新第三速度,获得网格在下一帧的速度。
[0198]
在上述各实施例的基础上,作为一种可选实施例,第二速度获取模块包括:
[0199]
第一参考网格确定子模块,用于将三维虚拟空间所在坐标系中的任意一个坐标轴作为目标轴,将网格在目标轴正方向上相邻的网格作为第一参考网格,将网格在目标轴负方向上相邻的网格作为第二参考网格;
[0200]
第一参考速度更新子模块,用于根据网格与第一参考网格的连线是否与容器壁相交,更新第一速度在目标轴的分量,获得第一参考速度在目标轴的分量;
[0201]
第二速度获取子模块,用于根据网格与第二参考网格的连线是否与容器壁相交,更新第一参考速度在目标轴的分量,获得第二速度在目标轴的分量。
[0202]
在上述各实施例的基础上,作为一种可选实施例,第一参考速度更新子模块,具体用于:若网格与第一参考网格的连线不与容器壁相交,则将第一速度在目标轴的分量作为第一参考速度在目标轴的分量;若网格与第一参考网格的连线与容器壁相交,则将第一速度在目标轴的分量和预设速度阈值在目标轴的分量间的较小值作为第一参考速度在目标轴的分量。
[0203]
在上述各实施例的基础上,作为一种可选实施例,第二速度获取子模块具体用于:若网格与第二参考网格的连线不与容器壁相交,则将第一参考速度在目标轴的分量作为第二速度在目标轴的分量;若网格与第二参考网格的连线与容器壁相交,则将第一参考速度在目标轴更新的分量和预设速度阈值在目标轴的分量间的较大值作为第二速度在目标轴的分量。
[0204]
在上述各实施例的基础上,作为一种可选实施例,第三速度更新模块包括:
[0205]
第二参考网格确定子模块,用于将三维虚拟空间中的任意一个坐标轴作为目标轴,将网格在目标轴正方向上相邻的网格作为第一参考网格,将网格在目标轴负方向上相邻的网格作为第二参考网格;
[0206]
第二参考速度获取子模块,用于根据预设的反弹速度以及网格与第一参考网格的连线是否与容器壁相交,更新第三速度在目标轴的分量,获得第二参考速度在目标轴的分量;
[0207]
下一帧速度获取子模块,用于根据预设的反弹速度以及网格与第二参考网格的连线是否与容器壁相交,更新第二参考速度在目标轴的分量,获得网格在下一帧的速度在目标轴的分量。
[0208]
在上述各实施例的基础上,作为一种可选实施例,第二参考速度获取子模块具体用于:
[0209]
若网格与第一参考网格的连线不与容器壁相交,则将第三速度在目标值的分量作为第二参考速度在目标轴的分量;若网格与第一参考网格的连线与容器壁相交,则将第三速度在目标值的分量和反弹速度在目标轴的分量的负值间的较小值作为第二参考速度在
目标轴的分量。
[0210]
在上述各实施例的基础上,作为一种可选实施例,下一帧速度获取子模块具体用于:
[0211]
若网格与第二参考网格的连线不与容器壁相交,则将第二参考速度在目标轴的分量作为网格顶点在下一帧的速度在目标轴的分量;若网格与第二参考网格的连线与容器壁相交,则将第三速度在目标轴的分量与反弹速度在目标轴的分量间的较大值,作为网格顶点在下一帧的速度在目标轴的分量。
[0212]
在上述各实施例的基础上,作为一种可选实施例,展示装置还包括:
[0213]
速度限制模块,用于在获得网格在下一帧的速度之后,若网格在下一帧的速度在三维虚拟空间中的任意一轴的分量大于预设值,则将任意一轴的分量更新为预设值。
[0214]
在上述各实施例的基础上,作为一种可选实施例,网格速度模块包括:
[0215]
参考信息确定子模块,用于将每个网格作为基础网格,并且,针对每个基础网格,将基础网格内部以及预设范围内的周边网格内的流体粒子作为参考流体粒子,确定参考流体粒子与对应的目标网格的相对位置;
[0216]
权重获取子模块,用于根据相对位置获得参考流体粒子相对于对应的目标网格的权重;
[0217]
速度加权获取子模块,用于根据参考流体粒子在当前帧的速度以及参考流体粒子相对于对应的目标网格的权重,获得参考流体粒子相对于对应的目标网格的速度加权值;
[0218]
网格速度获取子模块,用于根据所有参考流体粒子相对于对应的目标网格的速度加权值之和以及所有参考流体粒子相对于对应的目标网格的权重之和,获得基础网格在当前帧的速度。
[0219]
在上述各实施例的基础上,作为一种可选实施例,针对每个基础网格,当所述基础网格对应的所述参考流体粒子位于所述基础网格或者所在的网格与所述基础网格处于同一水平面时,则所述参考流体粒子对应的目标网格为所述参考流体粒子所在的网格,当所述参流体粒子所在的网格与所述基础网格处于不同水平面,则所述参考流体粒子对应的目标网格为所述基础网格。
[0220]
在上述各实施例的基础上,作为一种可选实施例,权重获取子模块包括:
[0221]
投影单元,用于将三维虚拟空间所在坐标系的每一轴作为目标轴,将对应的目标网格中垂直于目标轴方向的一个面作为目标面,获取参考流体粒子与目标面的中间点之间的距离分别在三轴方向上的投影长度;
[0222]
参数计算单元,用于分别比较三个投影长度与单位长度的差值,获得第一差值、第二差值和第三差值,将第一差值与预设值之间较大的数作为第一参数,将第二差值与预设值之间较大的数作为第二参数,将第三差值与预设值之间较大的数作为第三参数;
[0223]
权重计算单元,用于根据第一参数、第二参数以及第三参数的乘积获得参考流体粒子对于所在网格的权重在目标轴的分量,根据分量获得参考流体粒子对于对应的目标网格的权重。
[0224]
在上述各实施例的基础上,作为一种可选实施例,第三速度获取模块包括:
[0225]
散度计算子模块,用于根据每个网格的第二速度获得网格的散度;
[0226]
压强场计算子模块,用于根据网格的散度进行雅各比迭代,获得网格的压强场梯
度;
[0227]
差值确定子模块,用于根据网格的第二速度和压强场梯度的差值,获得网格的第三速度。
[0228]
在上述各实施例的基础上,作为一种可选实施例,粒子坐标确定模块包括:
[0229]
过渡位置子模块,用于根据流体粒子在下一帧的速度、当前帧与下一帧的时差以及流体粒子在当前帧的三维坐标,获得流体粒子的过渡位置;
[0230]
过渡网格子模块,用于确定流体粒子的过渡位置所在的网格,作为过渡网格;
[0231]
过渡速度子模块,用于根据过渡网格以及过渡网格在三个坐标轴的延长线上相邻的邻接网格的坐标和速度,获得流体粒子在过渡位置的过渡速度;
[0232]
坐标确定子模块,用于根据流体粒子的过渡速度、时间步长以及流体在当前帧的三维坐标,获得流体粒子在下一帧的三维坐标。
[0233]
在上述各实施例的基础上,作为一种可选实施例,过渡速度子模块包括:
[0234]
邻接网格确定单元,用于将三维虚拟空间所在坐标系的每一轴作为目标轴,确定过渡网格在目标轴的延长线上相邻的邻接网格,确定过渡网格以及邻接网格垂直于目标轴的目标面;
[0235]
面中心点速度确定单元,用于根据过渡网格的目标面的网格顶点接触的所有网格在下一帧的速度,获得过渡网格的目标面的第一中心点的速度;根据邻接网格的目标面的网格顶点接触的所有网格在下一帧的速度,获得邻接网格的目标面的第二中心点的速度;
[0236]
过渡速度确定单元,用于根据邻接网格的坐标、过渡位置以及过渡网格的坐标在目标轴的分量和第一中心点和第二中心点的速度在坐标轴的分量,获得过渡速度在目标轴的分量,根据过渡速度在所有坐标轴的分量,获得过渡速度。
[0237]
本公开实施例中提供了一种电子设备,该电子设备包括:存储器和处理器;至少一个程序,存储于存储器中,用于被处理器执行时,对展示三维流体的三维虚拟空间进行网格化处理,获得网格集合,获得三维流体中各流体粒子在当前帧的三维坐标和速度,以确定各流体粒子在当前帧所在的网格;对于网格集合中的每个网格,根据网格内部以及预设范围内的周边网格内的流体粒子在当前帧的速度,获得网格在当前帧的速度;根据预设加速度调整网格在当前帧的速度,获得网格的调整后的速度,根据网格的调整后的速度、网格与三维虚拟空间中预设的容器壁的位置关系以及预设的反弹速度,获得网格在下一帧的速度;根据网格在下一帧的速度以及网格内的流体粒子在当前帧的速度,获得流体粒子在下一帧的速度,根据流体粒子在下一帧的速度以及在当前帧的三维坐标,获得流体粒子在下一帧的三维坐标;根据三维流体中所有流体粒子在下一帧的三维坐标,在三维虚拟空间中展示下一帧的三维流体。与现有技术相比可实现:使用网格来辅助粒子的运动模拟计算,能够较好地处理加速度和流体压强对流体运动的影响,且额外开销较小。另外,使用网格的速度变化量来更新粒子速度,而不是把网格速度直接换算为粒子速度,能够减少粒子速度转网格再转回粒子带来的数值耗散,并且通过考虑网格与三维虚拟空间中容器壁的位置关系以及反弹速度,能够展示更加真实自然的流体碰撞效果。
[0238]
在一个可选实施例中提供了一种电子设备,如图8所示,图8所示的电子设备600包括:处理装置(例如中央处理器、图形处理器等)601,其可以根据存储在只读存储器(rom)602中的程序或者从存储装置606存储装置608加载到随机访问存储器(ram)603中的程序而
执行各种适当的动作和处理。在ram 603中,还存储有电子设备600操作所需的各种程序和数据。处理装置601、rom 602以及ram 603通过总线604彼此相连。输入/输出(i/o)接口605也连接至总线604。
[0239]
通常,以下装置可以连接至i/o接口605:包括例如触摸屏、触摸板、键盘、鼠标、摄像头、麦克风、加速度计、陀螺仪等的输入装置606;包括例如液晶显示器(lcd)、扬声器、振动器等的输出装置607;包括例如磁带、硬盘等的存储装置606存储装置608;以及通信装置609。通信装置609可以允许电子设备600与其他设备进行无线或有线通信以交换数据。虽然图8示出了具有各种装置的电子设备600,但是应理解的是,并不要求实施或具备所有示出的装置。可以替代地实施或具备更多或更少的装置。
[0240]
本公开实施例提供了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,当其在计算机上运行时,使得计算机可以执行前述方法实施例中相应内容。与现有技术相比,使用网格来辅助粒子的运动模拟计算,能够较好地处理加速度和流体压强对流体运动的影响,且额外开销较小。另外,使用网格的速度变化量来更新粒子速度,而不是把网格速度直接换算为粒子速度,能够减少粒子速度转网格再转回粒子带来的数值耗散,并且通过考虑网格与三维虚拟空间中容器壁的位置关系以及反弹速度,能够展示更加真实自然的流体碰撞效果。
[0241]
特别地,根据本公开的实施例,上文参考流程图描述的过程可以被实现为计算机程序产品。例如,本公开的实施例包括一种计算机程序产品,其包括承载在非暂态计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序产品可以通过通信装置609从网络上被下载和安装,或者从存储装置606被安装,或者从rom 602被安装。在该计算机程序产品被处理装置601执行时,执行本公开实施例的流体碰撞效果的展示方法中限定的上述功能。与现有技术相比,使用网格来辅助粒子的运动模拟计算,能够较好地处理加速度和流体压强对流体运动的影响,且额外开销较小。另外,使用网格的速度变化量来更新粒子速度,而不是把网格速度直接换算为粒子速度,能够减少粒子速度转网格再转回粒子带来的数值耗散,并且通过考虑网格与三维虚拟空间中容器壁的位置关系以及反弹速度,能够展示更加真实自然的流体碰撞效果。
[0242]
应该理解的是,虽然附图的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,其可以以其他的顺序执行。而且,附图的流程图中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,其执行顺序也不必然是依次进行,而是可以与其他步骤或者其他步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
[0243]
以上仅是本发明的部分实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

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

相关文献