CN112100939B - 一种基于Compute Shader的实时流体仿真方法及其系统 - Google Patents
一种基于Compute Shader的实时流体仿真方法及其系统 Download PDFInfo
- Publication number
- CN112100939B CN112100939B CN202010960425.2A CN202010960425A CN112100939B CN 112100939 B CN112100939 B CN 112100939B CN 202010960425 A CN202010960425 A CN 202010960425A CN 112100939 B CN112100939 B CN 112100939B
- Authority
- CN
- China
- Prior art keywords
- fluid
- particle
- particles
- simulation
- positions
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F30/00—Computer-aided design [CAD]
- G06F30/20—Design optimisation, verification or simulation
- G06F30/28—Design optimisation, verification or simulation using fluid dynamics, e.g. using Navier-Stokes equations or computational fluid dynamics [CFD]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2113/00—Details relating to the application field
- G06F2113/08—Fluids
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2119/00—Details relating to the type or aim of the analysis or the optimisation
- G06F2119/14—Force analysis or force optimisation, e.g. static or dynamic forces
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02T—CLIMATE CHANGE MITIGATION TECHNOLOGIES RELATED TO TRANSPORTATION
- Y02T90/00—Enabling technologies or technologies with a potential or indirect contribution to GHG emissions mitigation
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Mathematical Physics (AREA)
- Fluid Mechanics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Computing Systems (AREA)
- Pure & Applied Mathematics (AREA)
- Computer Hardware Design (AREA)
- Evolutionary Computation (AREA)
- Geometry (AREA)
- General Engineering & Computer Science (AREA)
- Algebra (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
本发明提供了一种基于Compute Shader的实时流体仿真方法,所述方法为:步骤S1、设置流体粒子的数据结构,并在流体粒子模拟中,将仿真区域划分为若干个空间网格;步骤S2、对流体粒子施加外力,得到各流体粒子受到外力后的预测位置;步骤S3、将各个流体粒子根据空间网格信息进行排序;步骤S4、对排序后的各流体粒子计算相应的位移量;步骤S5、根据预测位置和位移量来更新当前帧的流体位置信息及压力值;本发明能更加精确地模拟流体运动。
Description
技术领域
本发明利用Compute Shader技术,提出了一种利用GPU并行计算能力的流体仿真方案,具有实时模拟流体运动的能力,特别是一种基于Compute Shader的实时流体仿真方法及其系统。
背景技术
主流的流体模拟方案使用若干粒子模拟流体的整体运动表现,需要较多粒子才能实现逼真的模拟效果,但各流体粒子的位移计算需要借助邻域粒子的信息,计算复杂度较高,传统CPU在保证帧率的前提下,无法支持较多数目的流体粒子计算,表现效果欠佳,存在进一步的提升空间。
Compute Shader是一种技术,是微软DirectX 11API新加入的特性,在ComputeShader的帮助下,程序员可直接将GPU作为并行处理器加以利用,GPU将不仅具有3D渲染能力,也具有其他的运算能力,也就是我们说的GPGPU的概念和物理加速运算。多线程处理技术使游戏更好地利用系统的多个核心。
Compute Shader主要特性包括线程间数据通信、一整套随机访问和流式I/O操作基本单元等,能加快和简化图像和后期处理效果等已有技术,也为DX11级硬件的新技术做好了准备,对于游戏和应用程序开发有着很重大的意义。
发明内容
针对现有CPU无法实时支持大量流体粒子计算的缺点,本发明提出了一种基于Compute Shader的实时流体仿真方法,借助GPU的强大并行计算能力,支持大量的流体粒子计算,更加精确地模拟流体运动。
本发明采用以下方案实现:一种基于Compute Shader的实时流体仿真方法,所述方法包括如下步骤:
步骤S1、设置流体粒子的数据结构,并在流体粒子模拟中,将仿真区域划分为若干个空间网格;
步骤S2、对流体粒子施加外力,得到各流体粒子受到外力后的预测位置;
步骤S3、将各个流体粒子根据空间网格信息进行排序;
步骤S4、对排序后的各流体粒子计算相应的位移量;
步骤S5、根据预测位置和位移量来更新当前帧的流体位置信息及压力值。
进一步的,所述步骤S1进一步具体为:所述流体粒子的数据结构为ComputeBufferpositions;ComputeBuffer predictedPos;ComputeBuffer velocities;ComputeBufferdensities;ComputeBuffer pressures;其中,positions是保存粒子的实际位置,predictedPos及velocities用以在仿真中计算各流体粒子的预测位置和速度数据,并最终将预测位置的值赋给positions,densities表示各粒子的密度信息,pressures为各粒子受到的压力值;在流体粒子模拟中,将仿真区域划分为若干个正方形网格,正方形网格的边长为流体粒子半径的4倍,网格序号从左往右,从上往下依次递增,每个流体粒子依据其圆心位置获得所属的网格序号。
进一步的,所述步骤S2进一步具体为:在流体粒子仿真流程开始时,流体粒子会受到重力作用,则开启流体粒子总数的线程数计算各流体粒子受到外力后的预测位置predictedPos:predictedPos[id]=positions[id]+deltaTime·gravity
;其中id为当前粒子的索引值,deltaTime为每一帧的时间步长,gravity为重力值。
进一步的,所述步骤S3进一步具体为:步骤S3.1计算粒子哈希值:即定义数据结构IndexMap,其中IndexMap的x分量表示粒子的哈希值,IndexMap的y分量表示粒子的实际id,粒子的哈希值由如下公式计算得出:
grid.x+grid.y·HashSize.x+grid.z·HashSize.x·HashSize.y
其中grid的三个分量表示当前粒子所处网格的三维坐标值,HashSize的两个分量表示仿真区域在长宽维度拥有的网格数量;
步骤S3.2将IndexMap进行排序:利用双调排序将IndexMap按照IndexMap.y从小到大进行排序;
步骤S3.3将排序后的IndexMap中的数据映射到Table上:即数据结构Table保存IndexMap中相同hash的起始和终止位置,其中x分量保存起始位置,y分量保存终止位置。
进一步的,所述步骤S4进一步具体为:对于当前流体粒子,根据所述的IndexMap数据获取周围邻域的粒子信息;开启粒子总数的线程数,利用公式(3)计算出流体粒子对应的pressures数据,
其中Cid表示当前粒子所受的约束,表示当前粒子相对于序号为k的粒子的梯度值,k为Cid(p1,...,pn)中的粒子序号,ε为实验设定参数,p1,…,pn是所有与当前粒子存在接触的粒子集合,其中Cid计算如下
其中ρid为当前粒子的密度,ρ0为静态密度,初始设置为1000;
计算出pressure之后,利用公式(5)计算粒子的位移量:
其中,h为4倍的粒子半径,pid为当前仿真粒子,W(pid-pj,h)为粒子仿真核函数,该粒子仿真核函数使用行业标准的Poly6核函数。
进一步的,所述步骤S5进一步具体为:开启粒子总数的线程数,将计算完成的粒子预测位置数据赋值给粒子的实际位置数据;
positions[id]=predictedPos[id];
将粒子的实际位置数据+位移量得出所有流体粒子的位置信息,并利用图形绘制接口将位置信息绘制到屏幕上,实现流体实时模拟。
本发明还一种基于Compute Shader的实时流体仿真系统,所述系统包括区域划分模块、位置预测模块、排序模块、获取位移量模块、以及更新流体信息模块;
所述区域划分模块,用于设置流体粒子的数据结构,并在流体粒子模拟中,将仿真区域划分为若干个空间网格;
所述位置预测模块,用于对流体粒子施加外力,得到各流体粒子受到外力后的预测位置;
所述排序模块,对排序后的各流体粒子计算相应的位移量;
所述获取位移量模块,用于通过排序后的各流体粒子获得各流体粒子的位移量;
所述更新流体信息模块,用于根据预测位置和位移量来更新当前帧的流体位置信息及压力值。
进一步的,所述区域划分模块的实现方式进一步具体为:所述流体粒子的数据结构为ComputeBuffer positions;ComputeBuffer predictedPos;ComputeBuffervelocities;ComputeBuffer densities;ComputeBuffer pressures;其中,positions是保存粒子的实际位置,predictedPos及velocities用以在仿真中计算各流体粒子的预测位置和速度数据,并最终将预测位置的值赋给positions,densities表示各粒子的密度信息,pressures为各粒子受到的压力值;在流体粒子模拟中,将仿真区域划分为若干个正方形网格,正方形网格的边长为流体粒子半径的4倍,网格序号从左往右,从上往下依次递增,每个流体粒子依据其圆心位置获得所属的网格序号。
进一步的,所述位置预测模块的实现方式进一步具体为:在流体粒子仿真流程开始时,流体粒子会受到重力作用,则开启流体粒子总数的线程数计算各流体粒子受到外力后的预测位置predictedPos:predictedPos[id]=positions[id]+deltaTime·gravity
;其中id为当前粒子的索引值,deltaTime为每一帧的时间步长,gravity为重力值。
进一步的,所述排序模块的实现方式进一步具体为:计算粒子哈希值:即定义数据结构IndexMap,其中IndexMap的x分量表示粒子的哈希值,IndexMap的y分量表示粒子的实际id,粒子的哈希值由如下公式计算得出:
grid.x+grid.y·HashSize.x+grid.z·HashSize.x·HashSize.y
其中grid的三个分量表示当前粒子所处网格的三维坐标值,HashSize的两个分量表示仿真区域在长宽维度拥有的网格数量;
将IndexMap进行排序:利用双调排序将IndexMap按照IndexMap.y从小到大进行排序;
将排序后的IndexMap中的数据映射到Table上:即数据结构Table保存IndexMap中相同hash的起始和终止位置,其中x分量保存起始位置,y分量保存终止位置。
进一步的,所述获取位移量模块的实现方式进一步具体为:对于当前流体粒子,根据所述的IndexMap数据获取周围邻域的粒子信息;开启粒子总数的线程数,利用公式(3)计算出流体粒子对应的pressures数据,
其中Cid表示当前粒子所受的约束,表示当前粒子相对于序号为k的粒子的梯度值,k为Cid(p1,...,pn)中的粒子序号,ε为实验设定参数,p1,…,pn是所有与当前粒子存在接触的粒子集合,其中Cid计算如下
其中ρid为当前粒子的密度,ρ0为静态密度,初始设置为1000;
计算出pressure之后,利用公式(5)计算粒子的位移量:
其中,h为4倍的粒子半径,pid为当前仿真粒子,W(pid-pj,h)为粒子仿真核函数,该粒子仿真核函数使用行业标准的Poly6核函数。
进一步的,所述更新流体信息模块的实现方式进一步具体为:开启粒子总数的线程数,将计算完成的粒子预测位置数据赋值给粒子的实际位置数据;
positions[id]=predictedPos[id];
将粒子的实际位置数据+位移量得出所有流体粒子的位置信息,并利用图形绘制接口将位置信息绘制到屏幕上,实现流体实时模拟。
本发明的有益效果在于:本发明是基于GPU的流体仿真方案,借助GPU的强大并行计算能力,支持大量的流体粒子计算,更加精确地模拟流体运动。
附图说明
图1是本发明的方法流程示意图。
图2是本发明一实施例的方法流程示意图。
图3是本发明实施例中网格划分示意图。
图4是本发明的系统原理框图。
具体实施方式
下面结合附图对本发明做进一步说明。
请参阅图1所示,本发明的一种基于Compute Shader的实时流体仿真方法,Compute Shader是利用GPU能力进行并行计算的一种技术方案,所述方法包括如下步骤:
步骤S1、设置流体粒子的数据结构,并在流体粒子模拟中,将仿真区域划分为若干个空间网格;
步骤S2、对流体粒子施加外力,得到各流体粒子受到外力后的预测位置;
步骤S3、将各个流体粒子根据空间网格信息进行排序;
步骤S4、对排序后的各流体粒子计算相应的位移量;
步骤S5、根据预测位置和位移量来更新当前帧的流体位置信息及压力值。
下面结合一具体实施例对本发明做进一步说明:
请参阅图2所示,本发明的一种基于Compute Shader的实时流体仿真方法,流体模拟分为以下5个步骤:
1、流体粒子数据结构与空间网格划分
流体粒子的数据结构如下:
ComputeBuffer positions;
ComputeBuffer predictedPos;
ComputeBuffer velocities;
ComputeBuffer densities;
ComputeBuffer pressures;
其中,positions保存粒子的实际位置,predictedPos及velocities用以在仿真中计算各流体粒子的预测位置和速度数据,并最终将预测位置的值赋给positions,densities表示各粒子的密度信息,pressures为各粒子受到的压力值。
空间网格划分说明如下:
在流体粒子模拟中,将仿真区域划分为若干个正方形网格,如图3所示。正方形网格的边长为粒子半径的4倍,网格序号从左往右,从上往下依次递增。每个流体粒子根据其圆心位置计算所属网格序号,1号粒子全部处在3号网格中,因此从属网格为3;2号粒子跨越6、7号网格,但其圆心在6号网格内,因此从属于6号网格。粒子仿真认为当前流体粒子只会受到邻域粒子的局部作用,并最终影响自身位置。因此,在三维空间内,只有粒子周围的27个网格(包含粒子所处网格)会对当前粒子其产生影响。
2、对流体粒子施加外力
在仿真流程开始时,粒子会受到重力、引力等外部作用力,考虑到计算复杂性,仅认为粒子受到重力作用,开启粒子总数的线程数计算各粒子受到外力后的预测位置
predictedPos:predictedPos[id]=positions[id]+deltaTime·gravity (1)
;其中id为当前粒子的索引值,deltaTime为每一帧的时间步长,gravity为重力值。
3、流体粒子根据网格信息排序
该步骤对粒子进行排序,便于后续步骤便捷地访问邻域粒子。
该所述步骤S3进一步具体为:步骤S3.1计算粒子哈希值:即定义数据结构IndexMap,其中IndexMap的x分量表示粒子的哈希值,IndexMap的y分量表示粒子的实际id,粒子的哈希值由如下公式计算得出:
grid.x+grid.y·HashSize.x+grid.z·HashSize.x·HashSize.y (2)
其中grid的三个分量表示当前粒子所处网格的三维坐标值,HashSize的两个分量表示仿真区域在长宽维度拥有的网格数量;
步骤S3.2将IndexMap进行排序:利用双调排序将IndexMap按照IndexMap.y从小到大进行排序;
步骤S3.3将排序后的IndexMap中的数据映射到Table上:即数据结构Table保存IndexMap中相同hash的起始和终止位置,其中x分量保存起始位置,y分量保存终止位置。
4、计算各流体粒子的位移量
所述步骤S4进一步具体为:对于当前流体粒子,根据所述的IndexMap数据获取周围邻域的粒子信息;开启粒子总数的线程数,利用公式(3)计算出流体粒子对应的pressures数据,
其中Cid表示当前粒子所受的约束,表示当前粒子相对于序号为k的粒子的梯度值,k为Cid(p1,...,pn)中的粒子序号,ε为实验设定参数,p1,…,pn是所有与当前粒子存在接触的粒子集合,其中Cid计算如下
其中ρid为当前粒子的密度,受周围粒子密度影响,ρ0为静态密度,初始设置为1000;计算出pressure之后,利用公式(5)计算粒子的位移量:
其中,h为4倍的粒子半径,pid为当前仿真粒子,W(pid-pj,h)为粒子仿真核函数,该粒子仿真核函数使用行业标准的Poly6核函数。
5、更新当前帧的流体位置信息及速度
所述步骤S5进一步具体为:开启粒子总数的线程数,将计算完成的粒子预测位置数据赋值给粒子的实际位置数据;
positions[id]=predictedPos[id]; (6)
将粒子的实际位置数据+位移量得出所有流体粒子的位置信息,并利用图形绘制接口将位置信息绘制到屏幕上,实现流体实时模拟。
如图4所示,本发明还一种基于Compute Shader的实时流体仿真系统,所述系统包括区域划分模块、位置预测模块、排序模块、获取位移量模块、以及更新流体信息模块;
所述区域划分模块,用于设置流体粒子的数据结构,并在流体粒子模拟中,将仿真区域划分为若干个空间网格;
所述位置预测模块,用于对流体粒子施加外力,得到各流体粒子受到外力后的预测位置;
所述排序模块,用于将各个流体粒子根据空间网格信息进行排序;
所述获取位移量模块,对排序后的各流体粒子计算相应的位移量;
所述更新流体信息模块,用于根据预测位置和位移量来更新当前帧的流体位置信息及压力值。
其中,所述区域划分模块的实现方式进一步具体为:所述流体粒子的数据结构为ComputeBuffer positions;ComputeBuffer predictedPos;ComputeBuffer velocities;ComputeBuffer densities;ComputeBuffer pressures;其中,positions是保存粒子的实际位置,predictedPos及velocities用以在仿真中计算各流体粒子的预测位置和速度数据,并最终将预测位置的值赋给positions,densities表示各粒子的密度信息,pressures为各粒子受到的压力值;在流体粒子模拟中,将仿真区域划分为若干个正方形网格,正方形网格的边长为流体粒子半径的4倍,网格序号从左往右,从上往下依次递增,每个流体粒子依据其圆心位置获得所属的网格序号。
所述位置预测模块的实现方式进一步具体为:在流体粒子仿真流程开始时,流体粒子会受到重力作用,则开启流体粒子总数的线程数计算各流体粒子受到外力后的预测位置predictedPos:predictedPos[id]=positions[id]+deltaTime·gravity
;其中id为当前粒子的索引值,deltaTime为每一帧的时间步长,gravity为重力值。
所述排序模块的实现方式进一步具体为:计算粒子哈希值:即定义数据结构IndexMap,其中IndexMap的x分量表示粒子的哈希值,IndexMap的y分量表示粒子的实际id,粒子的哈希值由如下公式计算得出:
grid.x+grid.y·HashSize.x+grid.z·HashSize.x·HashSize.y
其中grid的三个分量表示当前粒子所处网格的三维坐标值,HashSize的两个分量表示仿真区域在长宽维度拥有的网格数量;
将IndexMap进行排序:利用双调排序将IndexMap按照IndexMap.y从小到大进行排序;
将排序后的IndexMap中的数据映射到Table上:即数据结构Table保存IndexMap中相同hash的起始和终止位置,其中x分量保存起始位置,y分量保存终止位置。
所述获取位移量模块的实现方式进一步具体为:对于当前流体粒子,根据所述的IndexMap数据获取周围邻域的粒子信息;开启粒子总数的线程数,利用公式(3)计算出流体粒子对应的pressures数据,
其中Cid表示当前粒子所受的约束,表示当前粒子相对于序号为k的粒子的梯度值,k为Cid(p1,...,pn)中的粒子序号,ε为实验设定参数,p1,…,pn是所有与当前粒子存在接触的粒子集合,其中Cid计算如下
其中ρid为当前粒子的密度,ρ0为静态密度,初始设置为1000;
计算出pressure之后,利用公式(5)计算粒子的位移量:
其中,h为4倍的粒子半径,pid为当前仿真粒子,W(pid-pj,h)为粒子仿真核函数,该粒子仿真核函数使用行业标准的Poly6核函数。
进一步的,所述更新流体信息模块的实现方式进一步具体为:开启粒子总数的线程数,将计算完成的粒子预测位置数据赋值给粒子的实际位置数据;
positions[id]=predictedPos[id];
将粒子的实际位置数据+位移量得出所有流体粒子的位置信息,并利用图形绘制接口将位置信息绘制到屏幕上,实现流体实时模拟。
总之,本专利的核心流程表示如下:
在每一帧的仿真过程中,所有粒子通过外界作用力以及粒子间相互作用力计算出这一帧的位移,模拟流体的实际运行状态。
以上所述仅为本发明的较佳实施例,凡依本发明申请专利范围所做的均等变化与修饰,皆应属本发明的涵盖范围。
Claims (10)
1.一种基于Compute Shader的实时流体仿真方法,其特征在于:所述方法包括如下步骤:
步骤S1、设置流体粒子的数据结构,并在流体粒子模拟中,将仿真区域划分为若干个空间网格;
步骤S2、对流体粒子施加外力,得到各流体粒子受到外力后的预测位置;
步骤S3、将各个流体粒子根据空间网格信息进行排序;
步骤S4、对排序后的各流体粒子计算相应的位移量;
步骤S5、根据预测位置和位移量来更新当前帧的流体位置信息及压力值;
所述步骤S1进一步具体为:所述流体粒子的数据结构为ComputeBuffer positions;ComputeBuffer predictedPos;ComputeBuffer velocities;ComputeBuffer densities;ComputeBuffer pressures;其中,positions是保存粒子的实际位置,predictedPos及velocities用以在仿真中计算各流体粒子的预测位置和速度数据,并最终将预测位置的值赋给positions,densities表示各粒子的密度信息,pressures为各粒子受到的压力值;在流体粒子模拟中,将仿真区域划分为若干个正方形网格,正方形网格的边长为流体粒子半径的4倍,网格序号从左往右,从上往下依次递增,每个流体粒子依据其圆心位置获得所属的网格序号。
2.根据权利要求1所述的一种基于Compute Shader的实时流体仿真方法,其特征在于:所述步骤S2进一步具体为:在流体粒子仿真流程开始时,流体粒子会受到重力作用,则开启流体粒子总数的线程数计算各流体粒子受到外力后的预测位置predictedPos:
predictedPos[id]=positions[id]+deltaTime·gravity;其中id为当前粒子的索引值,deltaTime为每一帧的时间步长,gravity为重力值。
3.根据权利要求2所述的一种基于Compute Shader的实时流体仿真方法,其特征在于:所述步骤S3进一步具体为:步骤S3.1计算粒子哈希值:即定义数据结构IndexMap,其中IndexMap的x分量表示粒子的哈希值,IndexMap的y分量表示粒子的实际id,粒子的哈希值由如下公式计算得出:
grid.x+grid.y·HashSize.x+grid.z·HashSize.x·HashSize.y
其中grid的三个分量表示当前粒子所处网格的三维坐标值,HashSize的两个分量表示仿真区域在长宽维度拥有的网格数量;
步骤S3.2将IndexMap进行排序:利用双调排序将IndexMap按照IndexMap.y从小到大进行排序;
步骤S3.3将排序后的IndexMap中的数据映射到Table上:即数据结构Table保存IndexMap中相同hash的起始和终止位置,其中x分量保存起始位置,y分量保存终止位置。
4.根据权利要求3所述的一种基于Compute Shader的实时流体仿真方法,其特征在于:所述步骤S4进一步具体为:对于当前流体粒子,根据所述的IndexMap数据获取周围邻域的粒子信息;开启粒子总数的线程数,利用公式(3)计算出流体粒子对应的pressures数据,
其中Cid表示当前粒子所受的约束,表示当前粒子相对于序号为k的粒子的梯度值,k为Cid(p1,...,pn)中的粒子序号,ε为实验设定参数,p1,…,pn是所有与当前粒子存在接触的粒子集合,其中Cid计算如下
其中ρid为当前粒子的密度,ρ0为静态密度,初始设置为1000;
计算出pressure之后,利用公式(5)计算粒子的位移量:
其中,h为4倍的粒子半径,pid为当前仿真粒子,W(pid-pj,h)为粒子仿真核函数,该粒子仿真核函数使用行业标准的Poly6核函数。
5.根据权利要求4所述的一种基于Compute Shader的实时流体仿真方法,其特征在于:所述步骤S5进一步具体为:开启粒子总数的线程数,将计算完成的粒子预测位置数据赋值给粒子的实际位置数据;
positions[id]=predictedPos[id];
将粒子的实际位置数据+位移量得出所有流体粒子的位置信息,并利用图形绘制接口将位置信息绘制到屏幕上,实现流体实时模拟。
6.一种基于Compute Shader的实时流体仿真系统,其特征在于:所述系统包括区域划分模块、位置预测模块、排序模块、获取位移量模块、以及更新流体信息模块;
所述区域划分模块,用于设置流体粒子的数据结构,并在流体粒子模拟中,将仿真区域划分为若干个空间网格;
所述位置预测模块,用于对流体粒子施加外力,得到各流体粒子受到外力后的预测位置;
所述排序模块,用于将各个流体粒子根据空间网格信息进行排序;
所述获取位移量模块,用于对排序后的各流体粒子计算相应的位移量;
所述更新流体信息模块,用于根据预测位置和位移量来更新当前帧的流体位置信息及压力值;
所述区域划分模块的实现方式进一步具体为:所述流体粒子的数据结构为ComputeBuffer positions;ComputeBuffer predictedPos;ComputeBuffer velocities;ComputeBuffer densities;ComputeBuffer pressures;其中,positions是保存粒子的实际位置,predictedPos及velocities用以在仿真中计算各流体粒子的预测位置和速度数据,并最终将预测位置的值赋给positions,densities表示各粒子的密度信息,pressures为各粒子受到的压力值;在流体粒子模拟中,将仿真区域划分为若干个正方形网格,正方形网格的边长为流体粒子半径的4倍,网格序号从左往右,从上往下依次递增,每个流体粒子依据其圆心位置获得所属的网格序号。
7.根据权利要求6所述的一种基于Compute Shader的实时流体仿真系统,其特征在于:所述位置预测模块的实现方式进一步具体为:在流体粒子仿真流程开始时,流体粒子会受到重力作用,则开启流体粒子总数的线程数计算各流体粒子受到外力后的预测位置predictedPos:predictedP os[id]=positions[id]+deltaTime·gravity;
其中id为当前粒子的索引值,deltaTime为每一帧的时间步长,gravity为重力值。
8.根据权利要求6所述的一种基于Compute Shader的实时流体仿真系统,其特征在于:所述排序模块的实现方式进一步具体为:计算粒子哈希值:即定义数据结构IndexMap,其中IndexMap的x分量表示粒子的哈希值,IndexMap的y分量表示粒子的实际id,粒子的哈希值由如下公式计算得出:
grid.x+grid.y·HashSize.x+grid.z·HashSize.x·HashSize.y
其中grid的三个分量表示当前粒子所处网格的三维坐标值,HashSize的两个分量表示仿真区域在长宽维度拥有的网格数量;
将IndexMap进行排序:利用双调排序将IndexMap按照IndexMap.y从小到大进行排序;
将排序后的IndexMap中的数据映射到Table上:即数据结构Table保存IndexMap中相同hash的起始和终止位置,其中x分量保存起始位置,y分量保存终止位置。
9.根据权利要求8所述的一种基于Compute Shader的实时流体仿真系统,其特征在于:所述获取位移量模块的实现方式进一步具体为:对于当前流体粒子,根据所述的IndexMap数据获取周围邻域的粒子信息;开启粒子总数的线程数,利用公式(3)计算出流体粒子对应的pressures数据,
其中Cid表示当前粒子所受的约束,表示当前粒子相对于序号为k的粒子的梯度值,k为Cid(p1,...,pn)中的粒子序号,ε为实验设定参数,p1,…,pn是所有与当前粒子存在接触的粒子集合,其中Cid计算如下
其中ρid为当前粒子的密度,ρ0为静态密度,初始设置为1000;
计算出pressure之后,利用公式(5)计算粒子的位移量:
其中,h为4倍的粒子半径,pid为当前仿真粒子,W(pid-pj,h)为粒子仿真核函数,该粒子仿真核函数使用行业标准的Poly6核函数。
10.根据权利要求9所述的一种基于Compute Shader的实时流体仿真系统,其特征在于:所述更新流体信息模块的实现方式进一步具体为:开启粒子总数的线程数,将计算完成的粒子预测位置数据赋值给粒子的实际位置数据;
positions[id]=predictedPos[id];
将粒子的实际位置数据+位移量得出所有流体粒子的位置信息,并利用图形绘制接口将位置信息绘制到屏幕上,实现流体实时模拟。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010960425.2A CN112100939B (zh) | 2020-09-14 | 2020-09-14 | 一种基于Compute Shader的实时流体仿真方法及其系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010960425.2A CN112100939B (zh) | 2020-09-14 | 2020-09-14 | 一种基于Compute Shader的实时流体仿真方法及其系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112100939A CN112100939A (zh) | 2020-12-18 |
CN112100939B true CN112100939B (zh) | 2023-06-16 |
Family
ID=73752427
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010960425.2A Active CN112100939B (zh) | 2020-09-14 | 2020-09-14 | 一种基于Compute Shader的实时流体仿真方法及其系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112100939B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114912303A (zh) * | 2021-02-10 | 2022-08-16 | 北京字跳网络技术有限公司 | 三维流体的展示方法、装置、电子设备及存储介质 |
CN113127945B (zh) * | 2021-05-18 | 2022-07-19 | 福建天晴在线互动科技有限公司 | 一种基于Compute Shader的实时布料仿真的方法及其系统 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103324780A (zh) * | 2012-12-20 | 2013-09-25 | 中国科学院近代物理研究所 | 颗粒流动仿真系统和方法 |
CN103440163A (zh) * | 2013-09-09 | 2013-12-11 | 中国科学院近代物理研究所 | 使用gpu并行实现的基于pic模型的加速器仿真方法 |
CN104143027A (zh) * | 2014-08-01 | 2014-11-12 | 北京理工大学 | 一种基于sph算法的流体热运动仿真系统 |
CN104360896A (zh) * | 2014-12-04 | 2015-02-18 | 北京航空航天大学 | 一种基于gpu集群的并行流体仿真加速方法 |
CN106407605A (zh) * | 2016-11-01 | 2017-02-15 | 南京大学 | 一种三维服装的粒子化计算机动态仿真方法 |
CN110322540A (zh) * | 2019-07-09 | 2019-10-11 | 北京电影学院 | 基于流体力学与gpu优化渲染的可交互水墨模拟方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR102181989B1 (ko) * | 2018-08-27 | 2020-11-23 | 이에이트 주식회사 | 복수의 프로세서를 이용한 입자 기반의 유체 시뮬레이션 방법 및 유체 시뮬레이션 장치 |
-
2020
- 2020-09-14 CN CN202010960425.2A patent/CN112100939B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103324780A (zh) * | 2012-12-20 | 2013-09-25 | 中国科学院近代物理研究所 | 颗粒流动仿真系统和方法 |
CN103440163A (zh) * | 2013-09-09 | 2013-12-11 | 中国科学院近代物理研究所 | 使用gpu并行实现的基于pic模型的加速器仿真方法 |
CN104143027A (zh) * | 2014-08-01 | 2014-11-12 | 北京理工大学 | 一种基于sph算法的流体热运动仿真系统 |
CN104360896A (zh) * | 2014-12-04 | 2015-02-18 | 北京航空航天大学 | 一种基于gpu集群的并行流体仿真加速方法 |
CN106407605A (zh) * | 2016-11-01 | 2017-02-15 | 南京大学 | 一种三维服装的粒子化计算机动态仿真方法 |
CN110322540A (zh) * | 2019-07-09 | 2019-10-11 | 北京电影学院 | 基于流体力学与gpu优化渲染的可交互水墨模拟方法 |
Also Published As
Publication number | Publication date |
---|---|
CN112100939A (zh) | 2020-12-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10776688B2 (en) | Multi-frame video interpolation using optical flow | |
US20220044075A1 (en) | Neural network model trained using generated synthetic images | |
Wang et al. | A massively parallel and scalable multi-GPU material point method | |
US11106261B2 (en) | Optimal operating point estimator for hardware operating under a shared power/thermal constraint | |
US20230419611A1 (en) | Reducing level of detail of a polygon mesh to decrease a complexity of rendered geometry within a scene | |
US20180288431A1 (en) | System and method for content and motion controlled action video generation | |
US10810784B1 (en) | Techniques for preloading textures in rendering graphics | |
CN112100939B (zh) | 一种基于Compute Shader的实时流体仿真方法及其系统 | |
CN105261066B (zh) | 一种三维地理信息系统实时绘制多线程分配与控制方法 | |
CN112632683A (zh) | 基于虚幻引擎的数字孪生城市空间定位方法、装置及存储介质 | |
JP4936522B2 (ja) | 画像処理方法、画像処理装置 | |
CN111445003A (zh) | 神经网络生成器 | |
US11010963B2 (en) | Realism of scenes involving water surfaces during rendering | |
US20210256759A1 (en) | Performance of ray-traced shadow creation within a scene | |
CN112862942B (zh) | 物理特效模拟方法、装置、电子设备和存储介质 | |
Ripolles et al. | Real-time tessellation of terrain on graphics hardware | |
US10055875B2 (en) | Real-time eulerian water simulation using a restricted tall cell grid | |
Avril et al. | Fast collision culling in large-scale environments using GPU mapping function | |
JP7071810B2 (ja) | 並列に動作する演算リソースの集合を用いて3dシーンをシミュレートするための方法、プログラム、及びシステム | |
Zhang et al. | F-CAD: A framework to explore hardware accelerators for codec avatar decoding | |
EP3179390A1 (en) | Method and apparatus for modeling movement of air bubble based on fluid particles | |
CN113822975B (zh) | 用于对图像进行有效采样的技术 | |
CN108427605B (zh) | 基于质点追踪算法实现流线模拟的加速方法 | |
CN116108952A (zh) | 用于组合优化的并行处理 | |
Xu et al. | High-speed visualization of time-varying data in large-scale structural dynamic analyses with a GPU |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |