一种用于实时交互应用的GPU流体仿真方法

文档序号:33733952发布日期:2023-04-06 05:34阅读:59来源:国知局
一种用于实时交互应用的GPU流体仿真方法

本发明涉及流体仿真,尤其涉及一种用于实时交互应用的gpu流体仿真方法。


背景技术:

1、随着流体仿真技术的发展,真实感实时流体动画模拟仿真已被广泛应用到商业电影、大型游戏和城市灾害预测系统当中,其中,稳定精确的数值求解模型与高计算效率一直是研究中的重要内容。

2、在实时应用当中,由于模拟仿真对算力消耗非常敏感,因此常用的流体模拟仿真解决方案有三种:一是使用离线烘焙的二维图像序列或者三维模型序列,通过循环播放的方式实现流体的变化效果。这种方法通常使用无网格的方法进行模拟,其中光滑粒子流体动力学(sph)是最受欢迎的模拟流体的方法,因为它比其他方法计算简单、效率高。但是,模拟得到的粒子转换为可以用于渲染的三维模型,仍需要进行大量计算,目前主要使用屏幕空间技术从粒子数据生成多边形网格或行进立方体(marching cube)。由于网格生成方法无一例外在计算上非常昂贵。

3、二是使用粒子系统发射大量粒子,通过调节粒子的速度,大小变换与计算重力,碰撞等外力,实现近似的流体效果。近年来,随着计算机算力的提升,尤其是gpu通用计算技术的普及,让原本只用于图像渲染的擅长大规模并行计算的gpu可以参与到粒子计算当中,大大扩展了粒子系统能够维护的粒子数量和粒子运动规则的复杂性,为实时流体粒子模拟提供了基础。

4、三是基于二维网格的实时平面流体模拟。这种基于网格的模拟方式能比较好的模拟二维平面内的流体运动。由于二维空间与三维空间有着维度差异,这种方法的计算规模较三维空间模拟有着显著降低,因此,可以实现实时的流体结算,满足交互需求。结算得到的二维密度图像也可以使用光线步进(raymarching)方法进行渲染,得到一种伪三维的视觉效果。

5、虽然基于离线烘焙的方法能够实现较高精度的流体效果,但是需要大量预烘焙数据,并且流体无法与场景中的动态物体交互;使用简单粒子发射器的方式能够高效的实现流体效果,但是没有物理仿真且视觉效果较差;基于网格的二维流体实时解算方法能实现可交互的流体效果,但是仅限于水面,地面等平面流体场景,无法对三维空间中的流体进行仿真。


技术实现思路

1、本发明要解决的技术问题是针对上述现有技术的不足,提供一种用于实时交互应用的gpu流体仿真方法,实现对流体的动画仿真。

2、为解决上述技术问题,本发明所采取的技术方案是:一种用于实时交互应用的gpu流体仿真方法,计算过程均在gpu端运行,首先使用粒子系统发射大量粒子,并使用基于位置的流体粒子模拟算法计算流体粒子位置,进行粒子运动状态的更新,再根据粒子位置通过屏幕空间处理得到光滑流体表面,最后使用真实感渲染方式对流体表面进行着色,得到水体图像;具体包括以下步骤:

3、步骤1、使用粒子系统发射大量粒子,再使用基于位置的流体粒子模拟算法更新流体粒子位置,完成粒子运动状态的更新;

4、步骤1.1、使用粒子系统在流体模拟空间发射大量粒子,并将流体模拟空间均匀的划分为若干三维网格区域,构建临近粒子查找网格;

5、在更新流体粒子位置时,将粒子的索引写入对应网格;在需要查询某粒子的临近粒子时,能在线性时间内根据粒子坐标求出粒子所在网格,然后只需要遍历该网格内的粒子得到一定范围内的所有粒子;

6、步骤1.2、计算重力和碰撞两种外力对粒子的影响;其中,重力对粒子的影响如下公式所示:

7、

8、其中,δpg为重力产生的位置影响分量,v0为粒子当前速度,δt为两次更新之间的间隔时间,g为重力加速度;

9、所述碰撞对粒子的影响通过虚拟场景的深度场确定,具体为:

10、使用粒子坐标对虚拟场景的深度场进行采样得到粒子到场景中最近表面的距离;如果粒子在表面内或者粒子到表面距离小于预先给定的粒子半径,表示粒子发生了碰撞,需要进行碰撞计算;在基于位置的流体粒子模拟算法中,碰撞的计算也不需要计算碰撞的受力情况,只需要针对不同情况分析:当粒子在表面内时,粒子新的位置为碰撞位置加粒子到碰撞位置的方向乘粒子半径;当粒子与表面距离小于预先给定的粒子半径时,粒子新的位置为碰撞位置加碰撞位置到粒子中心的方向乘粒子半径;

11、步骤1.3、计算流体内部粒子之间的相互作用,根据不可压缩的约束计算出粒子的位移向量δp;

12、首先遍历当前计算粒子i周围h距离内的所有粒子,基于粒子间的距离计算出核函数wpoly6的值,如下公式所示:

13、

14、其中,wpoly6(r,h)为核函数,r为其他粒子到粒子i的距离向量,h为预设的最大查找距离;

15、再遍历粒子i周围h距离内的所有粒子,计算出该粒子i所在位置的密度ρi,如下公式所示:

16、

17、其中,mj为粒子i周围h距离内的粒子j的质量;pi为当前计算粒子i的位置,pj为粒子i周围h距离内的粒子j的位置;

18、由于液体具有不可压缩性,因此需要保证每一个粒子i的密度与流体的静态密度相同;对于当前计算粒子i,定义ci为它的密度约束,如下公式所示:

19、

20、其中,p1,…,pn表示粒子i的位置及其相邻粒子的位置,ρi为上一步计算出的当前粒子所在位置的密度,ρ0为流体静止状态下的密度;

21、然后计算粒子i对应的拉格朗日乘子λi:

22、

23、其中,∈是松弛参数,为第i个粒子的密度约束ci在位置pk处关于位置的梯度;

24、进而求出粒子i经过自身密度约束以及邻居粒子密度约束后得到的位移向量δpi:

25、

26、其中,λj为粒子j对应的拉格朗日乘子;

27、其中,wspiky(r,h)为在进行密度约束ci在位置pk处关于位置的梯度计算时,使用的spiky核函数,如下公式所示:

28、

29、对wspiky(r,h)对r求导得:

30、

31、设定流体中所有粒子的质量相同,进一步得:

32、

33、则ci关于位置pk梯度如下公式所示:

34、

35、其中,k∈1,…,n;

36、针对k的取值不同,分别为:

37、

38、步骤1.4、将步骤1.2得到的粒子受外力影响产生的位移与步骤1.3得到的粒子间相互作用产生的位移相加,得到粒子的位置变化量δp;粒子的位置变化量δp与粒子的原始位置相加得到粒子的新位置;同时用粒子的位置变化量δp除以单位时间δt得到粒子在该时刻的速度,用于下一轮粒子位置更新时计算粒子受外力的影响;

39、步骤2、在完成粒子运动状态的更新后采用屏幕空间进行流体表面重建;

40、步骤2.1、将所有流体粒子从三维世界空间映射到二维屏幕空间;

41、使用虚拟相机的透视投影矩阵m与流体粒子的三维世界空间齐次坐标进行相乘得到流体粒子在屏幕空间中的二维坐标,得到映射到二维屏幕空间的流体表面图像;

42、步骤2.2、对映射到二维屏幕空间的流体表面图像进行平滑处理,得到平滑流体表面图像;

43、首先对粒子的深度图像进行采样,再使用双边滤波,将深度值的差值小于设定阈值的区域进行平滑,从而保留流体图像前景后景的边界;

44、步骤3、根据平滑流体表面图像与场景的帧缓存进行流体的真实感渲染;

45、步骤3.1、基于深度缓冲和颜色缓冲对流体表面进行着色;

46、首先根据流体的深度图像与场景原本深度缓冲的插值,计算流体厚度;

47、再使用入射光颜色依据流体厚度不同进行不同程度的衰减得到流体的基础色;

48、然后根据流体的不透明度,将流体的基础颜色与颜色缓冲中的场景颜色叠加,得到流体表面的颜色;

49、步骤3.2、渲染流体上漂浮泡沫的效果;在进行流体模拟时将临近粒子数量少于设定阈值的粒子标记为泡沫粒子,再通过屏幕空间映射得到泡沫粒子图像;着色渲染时对泡沫粒子图像采样,根据采样结果将流体表面颜色与泡沫颜色混合;

50、步骤3.3、焦散效果渲染;在对场景深度缓冲采样时,通过矩阵变换得到屏幕空间坐标对应的世界坐标,将世界坐标的坐标的x,y方向分量当作uv空间的坐标,对预烘焙的焦散贴图进行采样,将采样的得到的颜色与场景颜色缓冲的采样结果相加,得到焦散效果;对多张焦散贴图进行循环采样,使焦散效果动态显示。

51、采用上述技术方案所产生的有益效果在于:本发明提供的一种用于实时交互应用的gpu流体仿真方法,包括使用基于位置的流体模拟算法,与传统的模拟算法相比,本算法具有模拟效率高,稳定性强等优点;使用屏幕空间流体表面重建方法,能够高效的得到平滑的流体表面图像;基于帧缓存实现了折射,反射等水体效果,还使用泡沫焦散等流体效果增强渲染的真实感。本发明方法作为一种高效的物理拟真的实时流体仿真方法,可以广泛的应用于工业仿真与电子游戏领域内的多种需求场景。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1