CN115906703A - 一种用于实时交互应用的gpu流体仿真方法 - Google Patents

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

Info

Publication number
CN115906703A
CN115906703A CN202211547040.9A CN202211547040A CN115906703A CN 115906703 A CN115906703 A CN 115906703A CN 202211547040 A CN202211547040 A CN 202211547040A CN 115906703 A CN115906703 A CN 115906703A
Authority
CN
China
Prior art keywords
particle
fluid
particles
gpu
real
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202211547040.9A
Other languages
English (en)
Inventor
高天寒
陈鑫
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Northeastern University China
Original Assignee
Northeastern University China
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Northeastern University China filed Critical Northeastern University China
Priority to CN202211547040.9A priority Critical patent/CN115906703A/zh
Publication of CN115906703A publication Critical patent/CN115906703A/zh
Pending legal-status Critical Current

Links

Images

Landscapes

  • Management, Administration, Business Operations System, And Electronic Commerce (AREA)

Abstract

本发明提供一种用于实时交互应用的GPU流体仿真方法,涉及流体仿真技术领域。该方法首先使用粒子***发射大量粒子,并使用基于位置的流体粒子模拟算法计算流体粒子位置,进行粒子运动状态的更新,再根据粒子位置通过屏幕空间处理得到光滑流体表面,最后使用真实感渲染方式对流体表面进行着色,得到水体图像;由于大量粒子的状态更新与屏幕空间的像素级计算均为大规模并行计算,适合GPU处理,因此本方法涉及的所有计算过程均在GPU端运行。该方法可以广泛的应用于工业仿真与电子游戏领域内的多种需求场景。

Description

一种用于实时交互应用的GPU流体仿真方法
技术领域
本发明涉及流体仿真技术领域,尤其涉及一种用于实时交互应用的GPU流体仿真方法。
背景技术
随着流体仿真技术的发展,真实感实时流体动画模拟仿真已被广泛应用到商业电影、大型游戏和城市灾害预测***当中,其中,稳定精确的数值求解模型与高计算效率一直是研究中的重要内容。
在实时应用当中,由于模拟仿真对算力消耗非常敏感,因此常用的流体模拟仿真解决方案有三种:一是使用离线烘焙的二维图像序列或者三维模型序列,通过循环播放的方式实现流体的变化效果。这种方法通常使用无网格的方法进行模拟,其中光滑粒子流体动力学(SPH)是最受欢迎的模拟流体的方法,因为它比其他方法计算简单、效率高。但是,模拟得到的粒子转换为可以用于渲染的三维模型,仍需要进行大量计算,目前主要使用屏幕空间技术从粒子数据生成多边形网格或行进立方体(Marching Cube)。由于网格生成方法无一例外在计算上非常昂贵。
二是使用粒子***发射大量粒子,通过调节粒子的速度,大小变换与计算重力,碰撞等外力,实现近似的流体效果。近年来,随着计算机算力的提升,尤其是GPU通用计算技术的普及,让原本只用于图像渲染的擅长大规模并行计算的GPU可以参与到粒子计算当中,大大扩展了粒子***能够维护的粒子数量和粒子运动规则的复杂性,为实时流体粒子模拟提供了基础。
三是基于二维网格的实时平面流体模拟。这种基于网格的模拟方式能比较好的模拟二维平面内的流体运动。由于二维空间与三维空间有着维度差异,这种方法的计算规模较三维空间模拟有着显著降低,因此,可以实现实时的流体结算,满***互需求。结算得到的二维密度图像也可以使用光线步进(RayMarching)方法进行渲染,得到一种伪三维的视觉效果。
虽然基于离线烘焙的方法能够实现较高精度的流体效果,但是需要大量预烘焙数据,并且流体无法与场景中的动态物体交互;使用简单粒子发射器的方式能够高效的实现流体效果,但是没有物理仿真且视觉效果较差;基于网格的二维流体实时解算方法能实现可交互的流体效果,但是仅限于水面,地面等平面流体场景,无法对三维空间中的流体进行仿真。
发明内容
本发明要解决的技术问题是针对上述现有技术的不足,提供一种用于实时交互应用的GPU流体仿真方法,实现对流体的动画仿真。
为解决上述技术问题,本发明所采取的技术方案是:一种用于实时交互应用的GPU流体仿真方法,计算过程均在GPU端运行,首先使用粒子***发射大量粒子,并使用基于位置的流体粒子模拟算法计算流体粒子位置,进行粒子运动状态的更新,再根据粒子位置通过屏幕空间处理得到光滑流体表面,最后使用真实感渲染方式对流体表面进行着色,得到水体图像;具体包括以下步骤:
步骤1、使用粒子***发射大量粒子,再使用基于位置的流体粒子模拟算法更新流体粒子位置,完成粒子运动状态的更新;
步骤1.1、使用粒子***在流体模拟空间发射大量粒子,并将流体模拟空间均匀的划分为若干三维网格区域,构建临近粒子查找网格;
在更新流体粒子位置时,将粒子的索引写入对应网格;在需要查询某粒子的临近粒子时,能在线性时间内根据粒子坐标求出粒子所在网格,然后只需要遍历该网格内的粒子得到一定范围内的所有粒子;
步骤1.2、计算重力和碰撞两种外力对粒子的影响;其中,重力对粒子的影响如下公式所示:
Figure BDA0003980473090000021
其中,Δpg为重力产生的位置影响分量,v0为粒子当前速度,Δt为两次更新之间的间隔时间,g为重力加速度;
所述碰撞对粒子的影响通过虚拟场景的深度场确定,具体为:
使用粒子坐标对虚拟场景的深度场进行采样得到粒子到场景中最近表面的距离;如果粒子在表面内或者粒子到表面距离小于预先给定的粒子半径,表示粒子发生了碰撞,需要进行碰撞计算;在基于位置的流体粒子模拟算法中,碰撞的计算也不需要计算碰撞的受力情况,只需要针对不同情况分析:当粒子在表面内时,粒子新的位置为碰撞位置加粒子到碰撞位置的方向乘粒子半径;当粒子与表面距离小于预先给定的粒子半径时,粒子新的位置为碰撞位置加碰撞位置到粒子中心的方向乘粒子半径;
步骤1.3、计算流体内部粒子之间的相互作用,根据不可压缩的约束计算出粒子的位移向量Δp;
首先遍历当前计算粒子i周围h距离内的所有粒子,基于粒子间的距离计算出核函数WPoly6的值,如下公式所示:
Figure BDA0003980473090000022
其中,WPoly6(r,h)为核函数,r为其他粒子到粒子i的距离向量,h为预设的最大查找距离;
再遍历粒子i周围h距离内的所有粒子,计算出该粒子i所在位置的密度ρi,如下公式所示:
Figure BDA0003980473090000031
其中,mj为粒子i周围h距离内的粒子j的质量;pi为当前计算粒子i的位置,pj为粒子i周围h距离内的粒子j的位置;
由于液体具有不可压缩性,因此需要保证每一个粒子i的密度与流体的静态密度相同;对于当前计算粒子i,定义Ci为它的密度约束,如下公式所示:
Figure BDA0003980473090000032
其中,p1,…,pn表示粒子i的位置及其相邻粒子的位置,ρi为上一步计算出的当前粒子所在位置的密度,ρ0为流体静止状态下的密度;
然后计算粒子i对应的拉格朗日乘子λi
Figure BDA0003980473090000033
其中,∈是松弛参数,
Figure BDA0003980473090000034
为第i个粒子的密度约束Ci在位置pk处关于位置的梯度;
进而求出粒子i经过自身密度约束以及邻居粒子密度约束后得到的位移向量Δpi
Figure BDA0003980473090000035
其中,λj为粒子j对应的拉格朗日乘子;
其中,WSpiky(r,h)为在进行密度约束Ci在位置pk处关于位置的梯度计算时,使用的Spiky核函数,如下公式所示:
Figure BDA0003980473090000041
对WSpiky(r,h)对r求导得:
Figure BDA0003980473090000042
设定流体中所有粒子的质量相同,进一步得:
Figure BDA0003980473090000043
则Ci关于位置pk梯度
Figure BDA0003980473090000044
如下公式所示:
Figure BDA0003980473090000045
其中,k∈1,…,n;
针对k的取值不同,
Figure BDA0003980473090000046
分别为:
Figure BDA0003980473090000047
步骤1.4、将步骤1.2得到的粒子受外力影响产生的位移与步骤1.3得到的粒子间相互作用产生的位移相加,得到粒子的位置变化量Δp;粒子的位置变化量Δp与粒子的原始位置相加得到粒子的新位置;同时用粒子的位置变化量Δp除以单位时间Δt得到粒子在该时刻的速度,用于下一轮粒子位置更新时计算粒子受外力的影响;
步骤2、在完成粒子运动状态的更新后采用屏幕空间进行流体表面重建;
步骤2.1、将所有流体粒子从三维世界空间映射到二维屏幕空间;
使用虚拟相机的透视投影矩阵M与流体粒子的三维世界空间齐次坐标进行相乘得到流体粒子在屏幕空间中的二维坐标,得到映射到二维屏幕空间的流体表面图像;
步骤2.2、对映射到二维屏幕空间的流体表面图像进行平滑处理,得到平滑流体表面图像;
首先对粒子的深度图像进行采样,再使用双边滤波,将深度值的差值小于设定阈值的区域进行平滑,从而保留流体图像前景后景的边界;
步骤3、根据平滑流体表面图像与场景的帧缓存进行流体的真实感渲染;
步骤3.1、基于深度缓冲和颜色缓冲对流体表面进行着色;
首先根据流体的深度图像与场景原本深度缓冲的插值,计算流体厚度;
再使用入射光颜色依据流体厚度不同进行不同程度的衰减得到流体的基础色;
然后根据流体的不透明度,将流体的基础颜色与颜色缓冲中的场景颜色叠加,得到流体表面的颜色;
步骤3.2、渲染流体上漂浮泡沫的效果;在进行流体模拟时将临近粒子数量少于设定阈值的粒子标记为泡沫粒子,再通过屏幕空间映射得到泡沫粒子图像;着色渲染时对泡沫粒子图像采样,根据采样结果将流体表面颜色与泡沫颜色混合;
步骤3.3、焦散效果渲染;在对场景深度缓冲采样时,通过矩阵变换得到屏幕空间坐标对应的世界坐标,将世界坐标的坐标的x,y方向分量当作UV空间的坐标,对预烘焙的焦散贴图进行采样,将采样的得到的颜色与场景颜色缓冲的采样结果相加,得到焦散效果;对多张焦散贴图进行循环采样,使焦散效果动态显示。
采用上述技术方案所产生的有益效果在于:本发明提供的一种用于实时交互应用的GPU流体仿真方法,包括使用基于位置的流体模拟算法,与传统的模拟算法相比,本算法具有模拟效率高,稳定性强等优点;使用屏幕空间流体表面重建方法,能够高效的得到平滑的流体表面图像;基于帧缓存实现了折射,反射等水体效果,还使用泡沫焦散等流体效果增强渲染的真实感。本发明方法作为一种高效的物理拟真的实时流体仿真方法,可以广泛的应用于工业仿真与电子游戏领域内的多种需求场景。
附图说明
图1为本发明实施例提供的一种用于实时交互应用的GPU流体仿真方法的流程图;
图2为本发明实施例提供的基于位置的流体粒子模拟算法更新流体粒子位置的流程图;
图3为本发明实施例提供的基于深度碰撞的示意图,其中,(a)为粒子在表面内,(b)为粒子接近表面但仍在表面以外;
图4为本发明实施例提供的屏幕映射示意图;
图5为本发明实施例提供的流体粒子的深度图像;
图6为本发明实施例提供的粒子模拟算法的实现
图7为本发明实施例提供的真实感渲染的水体效果图;
图8为本发明实施例提供的重建后的光滑流体表面图。
具体实施方式
下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。以下实施例用于说明本发明,但不用来限制本发明的范围。
本实施例中,一种用于实时交互应用的GPU流体仿真方法,所有计算过程均在GPU端运行,首先使用粒子***发射大量粒子,并使用基于位置的流体粒子模拟算法计算流体粒子位置,进行粒子运动状态的更新,再根据粒子位置通过屏幕空间处理得到光滑流体表面,最后使用真实感渲染方式对流体表面进行着色,得到流体图像;由于大量粒子的状态更新与屏幕空间的像素级计算均为大规模并行计算,非常适合GPU处理,因此本方法涉及的所有计算过程均在GPU端运行。
如图1所示,该方法具体包括以下步骤:
步骤1、使用粒子***发射大量粒子,再使用基于位置的流体粒子模拟算法(Position BasedFluids,即PBF)更新流体粒子位置,完成粒子运动状态的更新,如图2所示,具体包括以下步骤:
步骤1.1、使用粒子***在流体模拟空间发射大量粒子,并将流体模拟空间均匀的划分为若干三维网格区域,构建临近粒子查找网格;
在计算粒子约束时,需要获取周围一定距离内所有粒子的位置,若遍历所有粒子进行查找则需要消耗大量计算资源,无法保证实时性,因此需要使用均匀网格哈希结构进行加速。在更新流体粒子位置时,将粒子的索引写入对应网格;在需要查询某粒子的临近粒子时,由于网格是均匀划分的,因此能在线性时间内根据粒子坐标求出粒子所在网格,然后只需要遍历该网格内的粒子就能获取到一定范围内的绝大部分粒子;这种方法虽然不能确保得到全部的临近粒子,但是由于计算量显著降低并且非常适合GPU并行计算,因此能迅速的完成临近粒子查找工作。
步骤1.2、计算重力和碰撞两种外力对粒子的影响;其中,重力对粒子的影响如下公式所示:
Figure BDA0003980473090000061
其中,Δpg为重力产生的位置影响分量,v0为粒子当前速度,Δt为两次更新之间的间隔时间,g为重力加速度;
在传统的流体模拟领域,流体与场景物体的碰撞涉及大量的求交运算,因此效率较低,不适合实时模拟。在现代实时游戏引擎中,通常会维护着一个深度场。深度场通过预计算获得,其中保存着空间中各个位置到最近表面的距离。利用深度场可以非常方便的完成碰撞计算。
所述碰撞对粒子的影响通过虚拟场景的深度场确定,具体为:
使用粒子坐标对虚拟场景(即流体所在环境)的深度场进行采样得到粒子到场景中最近表面的距离;如果粒子在表面内或者粒子到表面距离小于预先给定的粒子半径,表示粒子发生了碰撞,需要进行碰撞计算;在基于位置的流体粒子模拟算法中,碰撞的计算也不需要计算碰撞的受力情况,只需要针对不同情况分析,如图3所示:当粒子在表面内时,粒子新的位置为碰撞位置加粒子到碰撞位置的方向乘粒子半径;当粒子与表面距离小于预先给定的粒子半径(即接近表面但仍在表面以外)时,粒子新的位置为碰撞位置加碰撞位置到粒子中心的方向乘粒子半径;通过这种方式就能确保粒子新的位置不发生碰撞。
步骤1.3、计算流体内部粒子之间的相互作用,根据不可压缩的约束计算出粒子的位移向量Δp;
首先遍历当前计算粒子i周围h距离内的所有粒子,基于粒子间的距离计算出核函数WPoly6的值,如下公式所示:
Figure BDA0003980473090000071
其中,WPoly6(r,h)为核函数,r为其他粒子到粒子i的距离向量,h为预设的最大查找距离;
再遍历粒子i周围h距离内的所有粒子,计算出该粒子i所在位置的密度ρi,如下公式所示:
Figure BDA0003980473090000073
其中,mj为粒子i周围h距离内的粒子j的质量;pi为当前计算粒子i的位置,pj为粒子i周围h距离内的粒子j的位置;
由于液体具有不可压缩性,因此需要保证每一个粒子i的密度与流体的静态密度相同;对于当前计算粒子i,定义Ci为它的密度约束,如下公式所示:
Figure BDA0003980473090000074
其中,p1,…,pn表示粒子i的位置及其相邻粒子的位置,ρi为上一步计算出的当前粒子所在位置的密度,ρ0为流体静止状态下的密度,是用户设置的常数;
然后计算粒子i对应的拉格朗日乘子λi
Figure BDA0003980473090000075
其中,∈是为了避免除零问题引入的松弛参数,由用户设定;
Figure BDA0003980473090000076
为第i个粒子的密度约束Ci在位置pk处关于位置的梯度;
进而求出粒子i经过自身密度约束以及邻居粒子密度约束后得到的位移向量Δpi
Figure BDA0003980473090000081
其中,λj为粒子j对应的拉格朗日乘子;
其中,WSpiky(r,h)为在进行密度约束Ci在位置pk处关于位置的梯度计算时,使用的Spiky核函数,如下公式所示:
Figure BDA0003980473090000082
对WSpiky(r,h)对r求导得:
Figure BDA0003980473090000083
设定流体中所有粒子的质量相同,进一步得:
Figure BDA0003980473090000084
则Ci关于位置pk梯度
Figure BDA0003980473090000085
如下公式所示:
Figure BDA0003980473090000086
其中,k∈1,…,n;
针对k的取值不同,
Figure BDA0003980473090000087
分别为:
Figure BDA0003980473090000088
步骤1.4、将步骤1.2得到的粒子受外力影响产生的位移与步骤1.3得到的粒子间相互作用产生的位移相加,得到粒子的位置变化量Δp;粒子的位置变化量Δp与粒子的原始位置相加得到粒子的新位置;同时用粒子的位置变化量Δp除以单位时间Δt得到粒子在该时刻的速度,用于下一轮粒子位置更新时计算粒子受外力的影响;
步骤2、在完成粒子运动状态的更新后采用屏幕空间进行流体表面重建;由于根据粒子构建三维模型需要消耗大量算力,因此难以在实时应用中实现,所以采用屏幕空间进行流体表面重建。包括以下两个步骤:
步骤2.1、将所有流体粒子从三维世界空间映射到二维屏幕空间,如图4所示;三维空间中的粒子无法直接滤波得到流体表面,因此需要将其映射到二维屏幕空间;首先根据虚拟相机参数计算相机透视投影矩阵M:
Figure BDA0003980473090000091
其中,aspect为摄像机裁剪平面的宽高比,α为摄像机的视场角(Field ofView),NearZ为摄像机到进裁剪平面的距离,FarZ为摄像机到远裁剪平面的距离;
然后使用虚拟相机的透视投影矩阵M与流体粒子的三维世界空间齐次坐标进行相乘得到流体粒子在屏幕空间中的二维坐标,得到映射到二维屏幕空间的流体表面图像;
步骤2.2、对映射到二维屏幕空间的流体表面图像进行平滑处理,得到平滑流体表面图像;
由于从世界空间映射到屏幕空间的流体表面图像颗粒感较强,无法直接用于渲染。因此需要通过滤波进行平滑。流体粒子的深度图像如图5所示,图中每个像素的明暗代表深度值,即该位置到相机的距离。为了保证流体前景后景有明确的边界,首先对粒子的深度图像进行采样,再使用双边滤波,将深度值的差值小于设定阈值的区域进行平滑,从而保留流体图像前景后景的边界;
步骤3、根据平滑流体表面图像与场景的帧缓存进行流体的真实感渲染;
步骤3.1、基于深度缓冲和颜色缓冲对流体表面进行着色;
首先根据流体的深度图像与场景原本深度缓冲的插值,计算流体厚度;
由于光线在传播时会逐渐被流体吸收,因此需要使用入射光颜色依据流体厚度不同进行不同程度的衰减得到流体的基础色;
然后根据流体的不透明度,将流体的基础颜色与颜色缓冲中的场景颜色叠加,得到流体表面的颜色;
步骤3.2、为了增强流体真实感,还需要渲染流体上漂浮泡沫的效果;在进行流体模拟时将临近粒子数量少于设定阈值的粒子标记为泡沫粒子,再通过屏幕空间映射得到泡沫粒子图像;着色渲染时对泡沫粒子图像采样,根据采样结果将流体表面颜色与泡沫颜色混合;
步骤3.3、焦散效果渲染;焦散现象是指当强光线照射到透明对象时,通过折射后形成聚光。在对场景深度缓冲采样时,通过矩阵变换得到屏幕空间坐标对应的世界坐标,将世界坐标的坐标的x,y方向分量当作UV空间的坐标,对预烘焙的焦散贴图进行采样,将采样的得到的颜色与场景颜色缓冲的采样结果相加,得到近似的焦散效果;随着***运行时间对多张焦散贴图进行循环采样,使焦散效果动态显示。
本实施例中,在Unity高精度渲染管线(HDRP)中基于本发明方法实现流体仿真,具体实现结果如下:
1)基于Compute Shader的PBF粒子模拟的实现
本实施例中,使用通用计算着色器,在GPU上实现了PBF流体模拟,模拟结果如图6所示。
GPU的大规模并行计算能力远远强于CPU,因此本实施例中,在GPU上能够以非常高的效率完成PBF流体模拟计算。在本实施例中,同时模拟七万个流体粒子的运动,仍能以每秒钟60帧的速率完成计算。
2)屏幕空间流体表面重建的实现
基于Unity可编程管线的特性,通过添加额外的渲染批次,可以获取到流体粒子的位置,法线等信息。通过双向滤波算法进行平滑,就能得到光滑的流体表面,实现效果如图7所示。
3)真实感流体渲染的实现
本实施例基于屏幕空间的流体信息以及场景中的灯光信息,使用自定义着色器进行真实感渲染,最终得到的水体效果如图8所示。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明权利要求所限定的范围。

Claims (10)

1.一种用于实时交互应用的GPU流体仿真方法,其特征在于:
在GPU端,使用粒子***发射大量粒子,并使用基于位置的流体粒子模拟算法计算流体粒子位置,进行粒子运动状态的更新;
根据粒子位置通过屏幕空间处理得到光滑流体表面;
使用真实感渲染方式对流体表面进行着色,得到水体图像。
2.根据权利要求1所述的一种用于实时交互应用的GPU流体仿真方法,其特征在于:所述用于实时交互应用的GPU流体仿真方法包括以下步骤:
步骤1、使用粒子***发射大量粒子,再使用基于位置的流体粒子模拟算法更新流体粒子位置,完成粒子运动状态的更新;
步骤2、在完成粒子运动状态的更新后采用屏幕空间进行流体表面重建;
步骤2.1、将所有流体粒子从三维世界空间映射到二维屏幕空间,得到映射到二维屏幕空间的流体表面图像;
步骤2.2、对映射到二维屏幕空间的流体表面图像进行平滑处理,得到平滑流体表面图像;
步骤3、根据平滑流体表面图像与场景的帧缓存进行流体的真实感渲染;
步骤3.1、基于深度缓冲和颜色缓冲对流体表面进行着色;
步骤3.2、渲染流体上漂浮泡沫的效果;
步骤3.3、焦散效果渲染。
3.根据权利要求2所述的一种用于实时交互应用的GPU流体仿真方法,其特征在于:所述步骤1的具体方法为:
步骤1.1、使用粒子***在流体模拟空间发射大量粒子,并将流体模拟空间均匀的划分为若干三维网格区域,构建临近粒子查找网格;
在更新流体粒子位置时,将粒子的索引写入对应网格;在需要查询某粒子的临近粒子时,能在线性时间内根据粒子坐标求出粒子所在网格,然后只需要遍历该网格内的粒子得到一定范围内的所有粒子;
步骤1.2、计算重力和碰撞两种外力对粒子的影响;
步骤1.3、计算流体内部粒子之间的相互作用,根据不可压缩的约束计算出粒子的位移向量;
步骤1.4、将步骤1.2得到的粒子受外力影响产生的位移与步骤1.3得到的粒子间相互作用产生的位移相加,得到粒子的位置变化量;粒子的位置变化量与粒子的原始位置相加得到粒子的新位置;同时用粒子的位置变化量除以单位时间得到粒子在该时刻的速度,用于下一轮粒子位置更新时计算粒子受外力的影响。
4.根据权利要求3所述的一种用于实时交互应用的GPU流体仿真方法,其特征在于:所述步骤1.2中重力对粒子的影响如下公式所示:
Figure FDA0003980473080000021
其中,Δpg为重力产生的位置影响分量,v0为粒子当前速度,Δt为两次更新之间的间隔时间,g为重力加速度;
碰撞对粒子的影响通过虚拟场景的深度场确定,具体为:
使用粒子坐标对虚拟场景的深度场进行采样得到粒子到场景中最近表面的距离;如果粒子在表面内或者粒子到表面距离小于预先给定的粒子半径,表示粒子发生了碰撞,需要进行碰撞计算;在基于位置的流体粒子模拟算法中,碰撞的计算也不需要计算碰撞的受力情况,只需要针对不同情况分析:当粒子在表面内时,粒子新的位置为碰撞位置加粒子到碰撞位置的方向乘粒子半径;当粒子与表面距离小于预先给定的粒子半径时,粒子新的位置为碰撞位置加碰撞位置到粒子中心的方向乘粒子半径。
5.根据权利要求4所述的一种用于实时交互应用的GPU流体仿真方法,其特征在于:所述步骤1.3的具体方法为:
首先遍历当前计算粒子i周围h距离内的所有粒子,基于粒子间的距离计算出核函数WPoly6的值,如下公式所示:
Figure FDA0003980473080000022
其中,WPoly6(r,h)为核函数,r为其他粒子到粒子i的距离向量,h为预设的最大查找距离;
再遍历粒子i周围h距离内的所有粒子,计算出该粒子i所在位置的密度ρi,如下公式所示:
Figure FDA0003980473080000023
其中,mj为粒子i周围h距离内的粒子j的质量;pi为当前计算粒子i的位置,pj为粒子i周围h距离内的粒子j的位置;
由于液体具有不可压缩性,因此需要保证每一个粒子i的密度与流体的静态密度相同;对于当前计算粒子i,定义Ci为它的密度约束,如下公式所示:
Figure FDA0003980473080000024
其中,p1,…,pn表示粒子i的位置及其相邻粒子的位置,ρi为上一步计算出的当前粒子所在位置的密度,ρ0为流体静止状态下的密度;
然后计算粒子i对应的拉格朗日乘子λi
Figure FDA0003980473080000031
其中,∈是松弛参数,
Figure FDA0003980473080000032
为第i个粒子的密度约束Ci在位置pk处关于位置的梯度;
进而求出粒子i经过自身密度约束以及邻居粒子密度约束后得到的位移向量Δpi
Figure FDA0003980473080000033
其中,λj为粒子j对应的拉格朗日乘子;
其中,WSpiky(r,h)为在进行密度约束Ci在位置pk处关于位置的梯度计算时,使用的Spiky核函数,如下公式所示:
Figure FDA0003980473080000034
对WSpiky(r,h)对r求导得:
Figure FDA0003980473080000035
设定流体中所有粒子的质量相同,进一步得:
Figure FDA0003980473080000036
则Ci关于位置pk梯度
Figure FDA0003980473080000037
如下公式所示:
Figure FDA0003980473080000038
其中,k∈1,…,n;
针对k的取值不同,
Figure FDA0003980473080000041
分别为:
Figure FDA0003980473080000042
6.根据权利要求2所述的一种用于实时交互应用的GPU流体仿真方法,其特征在于:所述步骤2.1使用虚拟相机的透视投影矩阵M与流体粒子的三维世界空间齐次坐标进行相乘得到流体粒子在屏幕空间中的二维坐标,进而得到映射到二维屏幕空间的流体表面图像。
7.根据权利要求2所述的一种用于实时交互应用的GPU流体仿真方法,其特征在于:所述步骤2.2首先对粒子的深度图像进行采样,再使用双边滤波,将深度值的差值小于设定阈值的区域进行平滑,保留流体图像前景后景的边界,进而得到平滑流体表面图像。
8.根据权利要求2所述的一种用于实时交互应用的GPU流体仿真方法,其特征在于:所述步骤3.1的具体方法为:
首先根据流体的深度图像与场景原本深度缓冲的插值,计算流体厚度;
再使用入射光颜色依据流体厚度不同进行不同程度的衰减得到流体的基础色;
然后根据流体的不透明度,将流体的基础颜色与颜色缓冲中的场景颜色叠加,得到流体表面的颜色。
9.根据权利要求8所述的一种用于实时交互应用的GPU流体仿真方法,其特征在于:所述步骤3.2的具体方法为:
在进行流体模拟时将临近粒子数量少于设定阈值的粒子标记为泡沫粒子,再通过屏幕空间映射得到泡沫粒子图像;着色渲染时对泡沫粒子图像采样,根据采样结果将流体表面颜色与泡沫颜色混合。
10.根据权利要求9所述的一种用于实时交互应用的GPU流体仿真方法,其特征在于:所述步骤3.3的具体方法为:
在对场景深度缓冲采样时,通过矩阵变换得到屏幕空间坐标对应的世界坐标,将世界坐标的坐标的x,y方向分量当作UV空间的坐标,对预烘焙的焦散贴图进行采样,将采样的得到的颜色与场景颜色缓冲的采样结果相加,得到焦散效果;对多张焦散贴图进行循环采样,使焦散效果动态显示。
CN202211547040.9A 2022-12-05 2022-12-05 一种用于实时交互应用的gpu流体仿真方法 Pending CN115906703A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202211547040.9A CN115906703A (zh) 2022-12-05 2022-12-05 一种用于实时交互应用的gpu流体仿真方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202211547040.9A CN115906703A (zh) 2022-12-05 2022-12-05 一种用于实时交互应用的gpu流体仿真方法

Publications (1)

Publication Number Publication Date
CN115906703A true CN115906703A (zh) 2023-04-04

Family

ID=86470829

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202211547040.9A Pending CN115906703A (zh) 2022-12-05 2022-12-05 一种用于实时交互应用的gpu流体仿真方法

Country Status (1)

Country Link
CN (1) CN115906703A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117409127A (zh) * 2023-12-15 2024-01-16 中国美术学院 基于人工智能的实时水墨流体渲染方法和装置

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117409127A (zh) * 2023-12-15 2024-01-16 中国美术学院 基于人工智能的实时水墨流体渲染方法和装置
CN117409127B (zh) * 2023-12-15 2024-04-05 中国美术学院 基于人工智能的实时水墨流体渲染方法和装置

Similar Documents

Publication Publication Date Title
US7586489B2 (en) Method of generating surface defined by boundary of three-dimensional point cloud
van der Laan et al. Screen space fluid rendering with curvature flow
Lagae et al. A survey of procedural noise functions
CA2506419C (en) Visible surface determination system & methodology in computer graphics using interval analysis
CN102402791B (zh) 一种基于gpu的三维流体模拟方法
Ernst et al. Early split clipping for bounding volume hierarchies
CN103530907B (zh) 基于图像的复杂三维模型绘制方法
CN102402792B (zh) 一种实时浅水模拟方法
CN102915559A (zh) 一种基于三维点云的实时透明物体gpu并行生成方法
CN109509243B (zh) 一种液体仿真方法、液体交互方法及装置
CN106934192B (zh) 一种参数优化的浅水方程模型水体建模方法
Jiang et al. VR-GS: a physical dynamics-aware interactive gaussian splatting system in virtual reality
Creus et al. R4: Realistic rain rendering in realtime
CN115906703A (zh) 一种用于实时交互应用的gpu流体仿真方法
Vyatkin et al. Voxel Volumes volume-oriented visualization system
CN110335275A (zh) 一种基于三变量双调和b样条的流体表面的时空向量化方法
CN111915710A (zh) 基于实时渲染技术的建筑渲染方法
CN114676616A (zh) 一种三维场景下流体风场图渲染方法
Coutinho et al. Rain scene animation through particle systems and surface flow simulation by SPH
Nilsson 3D Cloud Visualization In Real-Time
Cords et al. Interactive screen-space surface rendering of dynamic particle clouds
Liu et al. Building a Real-Time System on GPUs for Simulation and Rendering of Realistic 3D Liquid in Video Games
Iwasaki et al. GPU-based rendering of point-sampled water surfaces
Blinn et al. The simulation of natural phenomena (panel session)
Klein et al. Simulation, Modelling and Rendering of Incompressible Fluids in Real Time.

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination