CN102402791A - 一种基于gpu的三维流体模拟方法 - Google Patents
一种基于gpu的三维流体模拟方法 Download PDFInfo
- Publication number
- CN102402791A CN102402791A CN2011103251050A CN201110325105A CN102402791A CN 102402791 A CN102402791 A CN 102402791A CN 2011103251050 A CN2011103251050 A CN 2011103251050A CN 201110325105 A CN201110325105 A CN 201110325105A CN 102402791 A CN102402791 A CN 102402791A
- Authority
- CN
- China
- Prior art keywords
- particle
- texture
- concentration
- obtains
- fluid
- 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.)
- Granted
Links
Images
Landscapes
- Image Generation (AREA)
Abstract
本发明提供了一种基于GPU的三维流体模拟方法,包括:采集三维流体的数据信息并进行存储,获得三维流体的数据信息;CPU对获得的三维流体的数据信息进行预处理操作,获得预处理的预处理结果GPU对获得的三维流体的数据信息进行流体模拟,获得三维流体的数据信息的流体模拟结果;将所获得的三维流体的数据信息的流体模拟结果进行渲染,获得渲染后的三维流体的数据信息的流体模拟结果;该方法可以实现对三维流体模拟过程的简单及实时操作。
Description
技术领域
本发明涉及计算机图形学领域,特别是涉及一种基于GPU的三维流体模拟方法。
背景技术
流体模拟是计算机图形学和动画的一个非常重要的技术,逼真的流体将为用户带来更真实的体验。但流体的模拟很困难,因为正确的模拟流体行为,所述模拟流体行为包括对流,扩散,湍流及表面张力的模拟是很复杂的。
流体模拟通常有两种方法:基于网格的流体模拟方法和基于粒子的流体模拟方法。
下面详细介绍基于网格的流体模拟方法和基于粒子的流体模拟方法。
1)基于网络的流体模拟方法是把流体堪称是连续的,而把空间区域离散成网格,再使用有限差分法即欧拉模型来实现基于网格的流体模拟的全过程。
基于网格的流体模拟的方法的优点是:可行性,是一个可以操作的方法;
基于网格的流体模拟的方法的缺点是:采用基于网格的流体模拟的方法对流,扩散,湍流及表面张力的模拟过程中需要计算的强度大,而且整个模拟过程不能逼真的模拟例如模拟空间有界的一些模拟效果。
2)基于粒子的流体模拟方法所采用的模型为拉格朗日模型,是把流体表示成一组离散的例子,通过求解粒子动力学来模拟整个流体运动的全过程。
基于粒子的流体模拟方法的优点是:采用基于粒子的流体模拟方法对流,扩散,湍流及表面张力的模拟过程中涉及到的计算更加简单,而且整个模拟过程中的表面重建更容易,流体可以在空间自由扩散。
目前被广泛采用的基于粒子的流体模拟方法是光滑粒子流体动力学(SPH)方法,SPH是一种求解偏微分方程的数值方法,属于无网格法的一种。由于SPH方法彻底摆脱了计算网格的约束,采用任意分布的粒子来表示求解域,不会遇到网格变形过大或网格畸变的问题,所以特别适合求解冲击动力学中的大变形问题。同时由于SPH法是具有拉格朗日性质的动力学方法,所以可以方便的跟踪物质的运动轨迹,适合描述流体界面的大变形运动过程以及流体与固体之间的相互作用。SPH方法作为一种具有无网格、自适应、稳定以及拉格朗日性质的动力学求解算法,已经成为冲击动力学研究的一个热点问题,并在工程实践中有着广泛的应用前景。
SPH方法是把流体分为一组离散的粒子,粒子之间有空间距离,粒子的属性在这个空间距离上使用内核函数来平滑。所有粒子的物理量可以通过累加在一定范围内的所有粒子的相关属性来获得。粒子的物理量及其空间导数通过搜索光滑半径内与其相互作用的粒子的物理量进行插值得到。这样就简化了流体力学偏微分方程组的求解过程,与传统的流体模拟方法相比,采用SPH算法得到的模拟结果不仅可以真实的模拟流体流动的效果,还能实现流体表面的剧烈变形,甚至表面破碎,如浪花飞溅效果都可以逼真的模拟出来。
传统的SPH算法本身还存在着边界粒子计算精度低和张力不稳定的固有缺陷。
SPH方法的更新过程是通过粒子模拟流体的运动规律来完成的,但这仅仅是完成了一个粒子系统的模拟,模拟后的结果还仅仅是一堆水粒子,还需要对模拟得到的模拟结果进行渲染。目前常见的渲染方法采用了基于点精灵的直接粒子渲染方法及基于等值面抽取(marchingcube)的表面渲染方法。下面分别介绍两种常见的渲染方法,具体如下所述:
1)基于点精灵的直接渲染方法
首先在模拟中实现粒子的运动,然后渲染所有的粒子。这种方法的缺点是不易实现。
2)基于等值面抽取(marching cube)的表面渲染方法
基于等值面抽取(marching cube)的表面渲染方法所涉及的算法完全在CPU上执行,从离散体密度场直接构建等值面的三角形网格。这种方法的优点是简单且容易实现;缺点是效率很低。
因而,目前需要本领域技术人员迫切解决的一个技术问题就是:如何找到一种新型的三维流体模拟方法,该方法是实现对三维流体模拟过程的简单及实时操作。
发明内容
本发明所要解决的一个技术问题是提供一种基于GPU的三维流体模拟方法,该方法可以实现对三维流体模拟过程的简单及实时操作。
为了解决上述问题,本发明公开了一种基于GPU的三维流体模拟方法,包括:
采集三维流体的数据信息并进行存储,获得三维流体的数据信息;
CPU对获得的三维流体的数据信息进行预处理操作,获得预处理的预处理结果;
GPU对获得的三维流体的数据信息进行流体模拟,获得三维流体的数据信息的流体模拟结果;
将所获得的三维流体的数据信息的流体模拟结果进行渲染,获得渲染后的三维流体的数据信息的流体模拟结果。
优选的,所述CPU对获得的三维流体的数据信息进行预处理操作,获得预处理的预处理结果的步骤,包括:
将流体离散为平滑粒子流体动力学SPH的粒子;
设置平滑粒子流体动力学SPH的粒子的初始属性值;其中,所述平滑粒子流体动力学SPH的粒子的初始属性值为位置数值、半径数值、质量数值及流体的剩余密度数值;
对边界及障碍物的三角面片进行细分;
把初始化数据传入GPU的显存或纹理单元中,完成CPU对获得的三维流体的数据信息进行预处理操作的全过程。
优选的,所述GPU对获得的三维流体的数据信息进行流体模拟,获得三维流体的数据信息的流体模拟结果的步骤,包括:
GPU对获得的三维流体的数据信息进行数据更新过程,获得更新的三维流体的数据信息;
对更新的三维流体的数据信息进行流体模拟,获得三维流体的数据信息的流体模拟结果。
优选的,所述GPU对获得的三维流体的数据信息进行数据更新过程,获得更新的三维流体的数据信息的步骤,包括:
计算每个粒子处的浓度,获得每个粒子处的浓度;
计算每个粒子的力及颜色场值,获得每个粒子的力及每个粒子的颜色场值;
移动粒子并清空粒子的相关场,获得更新的三维流体的数据信息。
优选的,所述计算每个粒子处的浓度,获得每个粒子处的浓度的步骤,包括:
采用基于切片的计算方式,将每个粒子处的浓度进行扩散处理,获得相应的每个片元的每个粒子处的浓度。
优选的,所述采用基于切片的计算方式,将每个粒子处的浓度进行扩散处理,获得相应的每个片元的每个粒子处的浓度的步骤,包括:
依据影响因素,确定体浓度纹理中粒子影响的切片个数;
为每个被影响切片构造一个相应的被影响区域的四边形,获得每个被影响切片相应的被影响区域的四边形;
依据对应关系,把每个四边形光栅化到相应的被影响的切片上;获得相应的片元;
对于每个片元,计算每个粒子处与片元粒子中心的距离,获得每个粒子处与片元粒子中心的距离数值;
依据SPH浓度方程,由每个粒子处与片元粒子中心的距离数值,计算每个粒子处的浓度,获得相应的每个片元的每个粒子处的浓度。
优选的,所述采用基于切片的计算方式的步骤,包括:
采用世界空间的粒子位置及世界空间的粒子位置的浓度去填充顶点缓存,获得存储有世界空间的粒子位置及世界空间的粒子位置的浓度的顶点缓存;
将体纹理设置为渲染目标,对顶点缓存中的数据进行渲染;
将每个包含SPH浓度方程的一维纹理设置为shader程序中的输入全局变量,获得含有全局变量的一维纹理;
采用含有全局变量的一维纹理,通过纹理查询来计算片元的浓度,获得片元的浓度。
优选的,所述采用基于切片的计算方式的步骤,包括:
通过顶点着色器完成顶点着色器代码中的计算过程,获得顶点着色器的计算结果;
通过几何着色器完成几何着色器代码中的计算过程,获得几何着色器的计算结果;
通过像素着色器采用光线投射算法的方法来完成像素着色器代码中的计算过程,获得像素着色器的计算结果。
优选的,所述通过顶点着色器完成顶点着色器代码中的计算过程,获得顶点着色器的计算结果的步骤,包括:
采用实例id和粒子位置的z分量来计算三维纹理里渲染目标的切片下标,获得三维纹理里渲染目标的切片下标;
把x、y分量从世界空间变换到归一化设备空间;
计算粒子位置到渲染目标切片的偏移,获得片元和粒子之间距离的数值。
优选的,所述通过几何着色器完成几何着色器代码中的计算过程,获得几何着色器的计算结果的步骤,包括:
验证计算获得的渲染目标切片下标;
渲染目标切片下标在有效范围内,生成四个输出顶点并连接成为两个三角形带,获得渲染目标切片下标的四边形;
其中,所述每个输出顶点的属性为输出顶点的体切片下标、输出顶点的粒子浓度、输出顶点的顶点位置及输出顶点的三维纹理坐标。
优选的,所述通过像素着色器采用光线投射算法的方法来完成像素着色器代码中的计算过程,获得像素着色器的计算结果的步骤,包括:
通过属性的插值及像素着色器来计算纹理坐标矢量的长度,获得纹理坐标矢量的长度;
将纹理坐标矢量的长度作为浓度方程的纹理的纹理坐标,获得浓度方程的纹理的纹理坐标;
采样值乘以粒子浓度,获得采样纹理坐标的浓度;
采用加性混合方法加到渲染目标的已知值上来进行渲染,获得采样纹理坐标的渲染后浓度。
优选的,所述通过像素着色器采用光线投射算法的方法来完成像素着色器代码中的计算过程,获得像素着色器的计算结果的步骤,包括:
在光线投射算法的初始化阶段,创建两个纹理,获得初始化的两个纹理;
在光线投射算法的循环阶段,在一次循环过程中,分别渲染表示体边界的后向面及前向面,获得纹理空间的射线方向和长度;当一次循环过程结束后,沿纹理空间的射线方向计算采样点,采样体纹理的数据信息并将采样点的采样值进行累加,获得像素着色器的计算结果。
优选的,所述在一次循环过程中,分别渲染表示体边界的后向面及前向面,获得纹理空间的射线方向和长度的步骤,包括:
开始渲染表示体边界的包围盒的后向面;采用光栅化器来插值包围盒顶点的纹理空间坐标,获得插值后的包围盒顶点的纹理空间坐标;通过像素着色器将插值后的包围盒顶点的纹理空间坐标送到渲染目标中,获得包围盒的前向面的渲染目标的值;其中,通过包围盒的光栅化的方式来创建片元,获得为生成与体相交的射线的像素的片元;
开始渲染包围盒的前向面;采用光栅化器来插值包围盒顶点的纹理空间坐标,获得插值后的包围盒顶点的纹理空间坐标;通过像素着色器将插值后的包围盒顶点的纹理空间坐标送到渲染目标中,获得包围盒的前向面的渲染目标的值;其中,通过包围盒的光栅化的方式来创建片元,获得为生成与体相交的射线的像素的片元;
激活的像素着色器采用片元的归一化设备坐标来采样包围盒的前向面的渲染目标的值及包围盒的后向面的渲染目标的值,获得每次采样的相应的渲染目标的值;
通过每次采样的相应的渲染目标的值来计算纹理空间的射线方向和长度,获得每次采用的纹理空间的射线方向和长度。
本发明显著优点在于:
该发明可以实现对三维流体模拟过程中满足实时环境的需要。
总之,本发明提供一种基于GPU的三维流体模拟方法,该方法可以实现对三维流体模拟过程的简单及实时操作。
附图说明
图1是本发明一种基于GPU的三维流体模拟方法的实施例的步骤流程图;
图2是本发明基于切片的算法的结构示意图;
图3是本发明基于切片的算法的图创建切片索引结构示意图;
图4是本发明中光线投射算法的创建射线的示意图;
图5是本发明中光线投射算法的沿射线采样示意图;
图6是本发明中像素着色器的光线投射算法中的光线跟踪起始点的示意图。
具体实施方式
为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。
本发明核心思想之一是提供了一种基于GPU(Graphic Processing Unit中文翻译为“GPU”,GPU是相对于CPU的一个概念,由于在现代的计算机中,特别是家用系统,游戏的发烧友,图形的处理变得越来越重要,需要一个专门的图形的核心处理器)的三维流体模拟方法,包括:采集三维流体的数据信息并进行存储,获得三维流体的数据信息;CPU(CentralProcessing Unit,中文翻译为中央处理器,是一台计算机的运算核心和控制核心,其功能主要是解释计算机指令以及处理计算机软件中的数据,CPU由运算器、控制器和寄存器及实现它们之间联系的数据、控制及状态的总线构成)对获得的三维流体的数据信息进行预处理操作,获得预处理的预处理结果;GPU对获得的三维流体的数据信息进行流体模拟,获得三维流体的数据信息的流体模拟结果;将所获得的三维流体的数据信息的流体模拟结果进行渲染,获得渲染后的三维流体的数据信息的流体模拟结果;该方法可以实现对三维流体模拟过程的简单及实时操作。
本发明可以使用GUP来实现对三维流体进行模拟的原因如下:
可以使用CPU来生成体纹理的数据,但是,在实现流体模拟循环时,每一帧更新完成之后,体纹理内的场数据必须重新生成。当仿真运行的时候,每一帧都要进行这样的步骤。这样,为体纹理填充数据的过程将对整体性能产生很大的影响。但因为这个算法是高度并行的,所以可以使用GPU来实现。
参照图1,示出了本发明一种基于GPU的三维流体模拟方法的实施例的步骤流程图,具体可以包括:
步骤101、采集三维流体的数据信息并进行存储,获得三维流体的数据信息。
步骤102、CPU对获得的三维流体的数据信息进行预处理操作,获得预处理的预处理结果。
为了使本领域的技术人员更好地理解本发明,在本发明的一个优选实施例中,所述步骤102,具体可以包括:
子步骤A1、将流体离散为平滑粒子流体动力学SPH的粒子。
子步骤A2、设置平滑粒子流体动力学SPH的粒子的初始属性值;其中,所述平滑粒子流体动力学SPH的粒子的初始属性值为位置数值、半径数值、质量数值及流体的剩余密度数值。
子步骤A3、对边界及障碍物的三角面片进行细分。
子步骤A4、把初始化数据传入GPU的显存或纹理单元中,完成CPU对获得的三维流体的数据信息进行预处理操作的全过程。
步骤103、GPU对获得的三维流体的数据信息进行流体模拟,获得三维流体的数据信息的流体模拟结果。
为了使本领域的技术人员更好地理解本发明,在本发明的另一个优选实施例中,所述步骤103,具体可以包括:
子步骤B1、GPU对获得的三维流体的数据信息进行数据更新过程,获得更新的三维流体的数据信息。
子步骤B2、对更新的三维流体的数据信息进行流体模拟,获得三维流体的数据信息的流体模拟结果。
为了使本领域的技术人员更好地理解本发明,在本发明的另一个优选实施例中,所述步骤103,具体可以包括:
子步骤C1、计算每个粒子处的浓度,获得每个粒子处的浓度。
其中,所述子步骤C1具体可以包括:
子步骤D1、采用基于切片的计算方式,将每个粒子处的浓度进行扩散处理,获得相应的每个片元的每个粒子处的浓度。
其中,所述子步骤D1具体可以包括:
子步骤E1、依据影响因素,确定体浓度纹理中粒子影响的切片个数。
子步骤E2、为每个被影响切片构造一个相应的被影响区域的四边形,获得每个被影响切片相应的被影响区域的四边形。
子步骤E3、依据对应关系,把每个四边形光栅化到相应的被影响的切片上;获得相应的片元。
子步骤E4、对于每个片元,计算每个粒子处与片元粒子中心的距离,获得每个粒子处与片元粒子中心的距离数值。
子步骤E5、依据SPH浓度方程,由每个粒子处与片元粒子中心的距离数值,计算每个粒子处的浓度,获得相应的每个片元的每个粒子处的浓度。
其中,所述采用基于切片的计算方式的步骤,包括:
子步骤F1、采用世界空间的粒子位置及世界空间的粒子位置的浓度去填充顶点缓存,获得存储有世界空间的粒子位置及世界空间的粒子位置的浓度的顶点缓存。
子步骤F2、将体纹理设置为渲染目标,对顶点缓存中的数据进行渲染。
子步骤F3、将每个包含SPH浓度方程的一维纹理设置为shader程序中的输入全局变量,获得含有全局变量的一维纹理。
子步骤F4、采用含有全局变量的一维纹理,通过纹理查询来计算片元的浓度,获得片元的浓度。
参照图2,示出了本发明基于切片的算法的结构示意图。
从图2,可以看出基于切片的算法的全过程。
下面详细介绍基于切片的算法的基本原理及算法的实现过程。
1)基于切片的算法的基本原理
根据Direct3D10的渲染流水线架构,提出下面基于切片的算法,用于体纹理中单个粒子浓度的扩散。算法的主要步骤如下。
a)确定体浓度纹理中粒子影响的切片个数
b)为每个被影响切片构造一个被影响区域的四边形
c)把这个四边形光栅化到正确的切片上
d)对于每个片元,检查与粒子中心的距离,从SPH浓度方程计算浓度
2)基于切片的算法的实现过程如下所述:
下面介绍基于Direct3D10算法的实现步骤:首先,使用世界空间的粒子位置和这些位置的浓度填充顶点缓存(四个分量的向量);然后把体纹理设置为渲染目标,渲染顶点缓存中的数据。另外,把一个包含SPH浓度方程的一维纹理,设置为shader程序的输入全局变量。使用这个纹理,可以通过一个简单的纹理查询来计算片元的浓度(用与粒子的距离作为纹理坐标),纹理的采样值再乘以粒子位置的浓度就是片元的浓度。这个计算过程,通过一个绘制调用的实例开始,这个绘制调用用点列表来绘制所有的顶点(粒子)。绘制调用的实例的数目设置为粒子影响的切片的数目。
参照图3,示出了本发明基于切片的算法的图创建切片索引结构示意图。
从图3中,可以看出基于切片的算法的图创建切片索引的过程。
本发明中基于切片的算法的其余步骤在着色器代码里面实现。
其中,所述采用基于切片的计算方式的步骤,包括:
子步骤G1、通过顶点着色器完成顶点着色器代码中的计算过程,获得顶点着色器的计算结果。
其中,所述子步骤G1具体可以包括:
子步骤H1、采用实例id和粒子位置的z分量来计算三维纹理里渲染目标的切片下标,获得三维纹理里渲染目标的切片下标。
子步骤H2、把x、y分量从世界空间变换到归一化设备空间。
子步骤H3、计算粒子位置到渲染目标切片的偏移,获得片元和粒子之间距离的数值。
其中,计算粒子位置到渲染目标切片的偏移,这将用于基于切片的算法确定片元和粒子的距离。
子步骤G2、通过几何着色器完成几何着色器代码中的计算过程,获得几何着色器的计算结果。
其中,所述子步骤G2具体可以包括:
子步骤I1、验证计算获得的渲染目标切片下标。
子步骤I2、渲染目标切片下标在有效范围内,生成四个输出顶点并连接成为两个三角形带,获得渲染目标切片下标的四边形;
其中,所述每个输出顶点的属性为输出顶点的体切片下标、输出顶点的粒子浓度、输出顶点的顶点位置及输出顶点的三维纹理坐标。
其中,所述顶点着色器后是几何着色器,
几何着色器主要完成如下的内容:
首先验证计算得到的渲染目标切片下标(这在几何着色器里完成)。如果切片下标在有效范围内,生成四个输出顶点,连接为两个三角形带,这形成了一个四边形。每个输出顶点有如下属性,体切片下标,粒子浓度,顶点位置和三维纹理坐标。位置根据二维归一化设备空间粒子位置加每个点的偏移来得到。纹理坐标的x,y分量来自数组,纹理z是顶点着色器中计算的粒子位置到渲染目标平面的偏移。
子步骤G3、通过像素着色器采用光线投射算法的方法来完成像素着色器代码中的计算过程,获得像素着色器的计算结果。
为了使本领域的技术人员更好地理解本发明,在本发明的另一个优选实施例中,所述子步骤G3,具体可以包括:
子步骤J1、通过属性的插值及像素着色器来计算纹理坐标矢量的长度,获得纹理坐标矢量的长度。
子步骤J2、将纹理坐标矢量的长度作为浓度方程的纹理的纹理坐标,获得浓度方程的纹理的纹理坐标。
子步骤J3、采样值乘以粒子浓度,获得采样纹理坐标的浓度。
子步骤J4、采用加性混合方法加到渲染目标的已知值上来进行渲染,获得采样纹理坐标的渲染后浓度。
光栅化这两个三角形到选择的渲染目标上(三维纹理切片),这包括属性的插值,最终的像素着色器计算纹理坐标矢量的长度。用它作为包括浓度方程的纹理的纹理坐标。采样值乘以粒子浓度值给出最终的浓度,使用加性混合加到渲染目标的已有值上。
体数据集的可视化有多种方法,本发明中采用了光纤投射算法。
1)光线投射算法的基本原理
光线投射算法的工作过程如下,对于显示体的最终图像的每一个像素,计算一个观察射线。
参照图4,示出了本发明中光线投射算法的创建射线的示意图。
从图4中可以看出采用光线投射算法来创建射线的全过程。
然后,从这个射线与体边界的入口交点开始,沿射线以递增的位置重复采样体数据集。根据一定的条件(例如累加的透明度超过阈值)终止这个过程。
参照图5,示出了本发明中光线投射算法的沿射线采样示意图。
从图5中可以看出采用光线投射算法来沿射线采样的全过程。
为了使本领域的技术人员更好地理解本发明,在本发明的另一个优选实施例中,所述子步骤G3,具体可以包括:
子步骤K1、在光线投射算法的初始化阶段,创建两个纹理,获得初始化的两个纹理。
子步骤K2、在光线投射算法的循环阶段,在一次循环过程中,分别渲染表示体边界的后向面及前向面,获得纹理空间的射线方向和长度;当一次循环过程结束后,沿纹理空间的射线方向计算采样点,采样体纹理的数据信息并将采样点的采样值进行累加,获得像素着色器的计算结果。
其中,所述在一次循环过程中,分别渲染表示体边界的后向面及前向面,获得纹理空间的射线方向和长度的步骤,包括:
子步骤M1、开始渲染表示体边界的包围盒的后向面;采用光栅化器来插值包围盒顶点的纹理空间坐标,获得插值后的包围盒顶点的纹理空间坐标;通过像素着色器将插值后的包围盒顶点的纹理空间坐标送到渲染目标中,获得包围盒的前向面的渲染目标的值;其中,通过包围盒的光栅化的方式来创建片元,获得为生成与体相交的射线的像素的片元。
子步骤M2、开始渲染包围盒的前向面;采用光栅化器来插值包围盒顶点的纹理空间坐标,获得插值后的包围盒顶点的纹理空间坐标;通过像素着色器将插值后的包围盒顶点的纹理空间坐标送到渲染目标中,获得包围盒的前向面的渲染目标的值;其中,通过包围盒的光栅化的方式来创建片元,获得为生成与体相交的射线的像素的片元。
子步骤M3、激活的像素着色器采用片元的归一化设备坐标来采样包围盒的前向面的渲染目标的值及包围盒的后向面的渲染目标的值,获得每次采样的相应的渲染目标的值。
子步骤M4、通过每次采样的相应的渲染目标的值来计算纹理空间的射线方向和长度,获得每次采用的纹理空间的射线方向和长度。
本发明使用像素着色器来实现光线投射算法的所有关键部分。为了是本领域的普通技术人员能够更好地理解本发明,下面以一个具体的实例来对使用像素着色器的光线投射算法来进行详细介绍,具体如下所述:
光线投射算法的主要步骤如下,在初始化的时候,创建两个纹理。
然后在循环的时候,首先渲染表示体边界的包围盒的后向面,包围盒的光栅化将为生成与体相交的射线的所有像素创建片元,光栅化器将插值包围盒顶点的纹理空间坐标,像素着色器将把纹理空间坐标送给渲染目标。然后再渲染包围盒的前向面,再一次插值纹理坐标,把纹理空间坐标送给渲染目标。
这样就可以得到观察视线与体纹理相交的纹理空间的进入点和离开点。
最后,渲染前向面,激活的像素着色器使用片元的归一化设备坐标去采样前面两个渲染目标的值,用来用来计算纹理空间的射线方向和长度。然后,执行循环,沿这个射线计算采样点,采样体纹理的数据,累加这些采样点的采样值。
因为像素着色器的性能已经有很大的改进。Shader model 4引入了许多特性,不限长度的shader代码和分枝特性。这就使光线投射算法的实现更直观,可以在一个循环中执行全部的光线跟踪过程。
参照图6,示出了本发明中像素着色器的光线投射算法中的光线跟踪起始点的示意图。
从图6中可以看出:本发明中像素着色器中的光线投射算法中的光线跟踪起始点的全过程。
子步骤C2、计算每个粒子的力及颜色场值,获得每个粒子的力及每个粒子的颜色场值。
子步骤C3、移动粒子并清空粒子的相关场,获得更新的三维流体的数据信息。
步骤104、将所获得的三维流体的数据信息的流体模拟结果进行渲染,获得渲染后的三维流体的数据信息的流体模拟结果。
总之,本发明提供了一种基于GPU的三维流体模拟方法,该方法可以实现对三维流体模拟过程的简单及实时操作。
以上对本发明所提供的一种基于GPU的三维流体模拟方法进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
Claims (13)
1.一种基于GPU的三维流体模拟方法,其特征在于,包括:
采集三维流体的数据信息并进行存储,获得三维流体的数据信息;
CPU对获得的三维流体的数据信息进行预处理操作,获得预处理的预处理结果;
GPU对获得的三维流体的数据信息进行流体模拟,获得三维流体的数据信息的流体模拟结果;
将所获得的三维流体的数据信息的流体模拟结果进行渲染,获得渲染后的三维流体的数据信息的流体模拟结果。
2.如权利要求1所述的方法,其特征在于,所述CPU对获得的三维流体的数据信息进行预处理操作,获得预处理的预处理结果的步骤,包括:
将流体离散为平滑粒子流体动力学SPH的粒子;
设置平滑粒子流体动力学SPH的粒子的初始属性值;其中,所述平滑粒子流体动力学SPH的粒子的初始属性值为位置数值、半径数值、质量数值及流体的剩余密度数值;
对边界及障碍物的三角面片进行细分;
把初始化数据传入GPU的显存或纹理单元中,完成CPU对获得的三维流体的数据信息进行预处理操作的全过程。
3.如权利要求1所述的方法,其特征在于,所述GPU对获得的三维流体的数据信息进行流体模拟,获得三维流体的数据信息的流体模拟结果的步骤,包括:
GPU对获得的三维流体的数据信息进行数据更新过程,获得更新的三维流体的数据信息;
对更新的三维流体的数据信息进行流体模拟,获得三维流体的数据信息的流体模拟结果。
4.如权利要求1所述的方法,其特征在于,所述GPU对获得的三维流体的数据信息进行数据更新过程,获得更新的三维流体的数据信息的步骤,包括:
计算每个粒子处的浓度,获得每个粒子处的浓度;
计算每个粒子的力及颜色场值,获得每个粒子的力及每个粒子的颜色场值;
移动粒子并清空粒子的相关场,获得更新的三维流体的数据信息。
5.如权利要求4所述的方法,其特征在于,所述计算每个粒子处的浓度,获得每个粒子处的浓度的步骤,包括:
采用基于切片的计算方式,将每个粒子处的浓度进行扩散处理,获得相应的每个片元的每个粒子处的浓度。
6.如权利要求5所述的方法,其特征在于,所述采用基于切片的计算方式,将每个粒子处的浓度进行扩散处理,获得相应的每个片元的每个粒子处的浓度的步骤,包括:
依据影响因素,确定体浓度纹理中粒子影响的切片个数;
为每个被影响切片构造一个相应的被影响区域的四边形,获得每个被影响切片相应的被影响区域的四边形;
依据对应关系,把每个四边形光栅化到相应的被影响的切片上;获得相应的片元;
对于每个片元,计算每个粒子处与片元粒子中心的距离,获得每个粒子处与片元粒子中心的距离数值;
依据SPH浓度方程,由每个粒子处与片元粒子中心的距离数值,计算每个粒子处的浓度,获得相应的每个片元的每个粒子处的浓度。
7.如权利要求5所述的方法,其特征在于,所述采用基于切片的计算方式的步骤,包括:
采用世界空间的粒子位置及世界空间的粒子位置的浓度去填充顶点缓存,获得存储有世界空间的粒子位置及世界空间的粒子位置的浓度的顶点缓存;
将体纹理设置为渲染目标,对顶点缓存中的数据进行渲染;
将每个包含SPH浓度方程的一维纹理设置为shader程序中的输入全局变量,获得含有全局变量的一维纹理;
采用含有全局变量的一维纹理,通过纹理查询来计算片元的浓度,获得片元的浓度。
8.如权利要求5所述的方法,其特征在于,所述采用基于切片的计算方式的步骤,包括:
通过顶点着色器完成顶点着色器代码中的计算过程,获得顶点着色器的计算结果;
通过几何着色器完成几何着色器代码中的计算过程,获得几何着色器的计算结果;
通过像素着色器采用光线投射算法的方法来完成像素着色器代码中的计算过程,获得像素着色器的计算结果。
9.如权利要求8所述的方法,其特征在于,所述通过顶点着色器完成顶点着色器代码中的计算过程,获得顶点着色器的计算结果的步骤,包括:
采用实例id和粒子位置的z分量来计算三维纹理里渲染目标的切片下标,获得三维纹理里渲染目标的切片下标;
把x、y分量从世界空间变换到归一化设备空间;
计算粒子位置到渲染目标切片的偏移,获得片元和粒子之间距离的数值。
10.如权利要求8所述的方法,其特征在于,所述通过几何着色器完成几何着色器代码中的计算过程,获得几何着色器的计算结果的步骤,包括:
验证计算获得的渲染目标切片下标;
渲染目标切片下标在有效范围内,生成四个输出顶点并连接成为两个三角形带,获得渲染目标切片下标的四边形;
其中,所述每个输出顶点的属性为输出顶点的体切片下标、输出顶点的粒子浓度、输出顶点的顶点位置及输出顶点的三维纹理坐标。
11.如权利要求8所述的方法,其特征在于,所述通过像素着色器采用光线投射算法的方法来完成像素着色器代码中的计算过程,获得像素着色器的计算结果的步骤,包括:
通过属性的插值及像素着色器来计算纹理坐标矢量的长度,获得纹理坐标矢量的长度;
将纹理坐标矢量的长度作为浓度方程的纹理的纹理坐标,获得浓度方程的纹理的纹理坐标;
采样值乘以粒子浓度,获得采样纹理坐标的浓度;
采用加性混合方法加到渲染目标的已知值上来进行渲染,获得采样纹理坐标的渲染后浓度。
12.如权利要求11所述的方法,其特征在于,所述通过像素着色器采用光线投射算法的方法来完成像素着色器代码中的计算过程,获得像素着色器的计算结果的步骤,包括:
在光线投射算法的初始化阶段,创建两个纹理,获得初始化的两个纹理;
在光线投射算法的循环阶段,在一次循环过程中,分别渲染表示体边界的后向面及前向面,获得纹理空间的射线方向和长度;当一次循环过程结束后,沿纹理空间的射线方向计算采样点,采样体纹理的数据信息并将采样点的采样值进行累加,获得像素着色器的计算结果。
13.如权利要求12所述的方法,其特征在于,所述在一次循环过程中,分别渲染表示体边界的后向面及前向面,获得纹理空间的射线方向和长度的步骤,包括:
开始渲染表示体边界的包围盒的后向面;采用光栅化器来插值包围盒顶点的纹理空间坐标,获得插值后的包围盒顶点的纹理空间坐标;通过像素着色器将插值后的包围盒顶点的纹理空间坐标送到渲染目标中,获得包围盒的前向面的渲染目标的值;其中,通过包围盒的光栅化的方式来创建片元,获得为生成与体相交的射线的像素的片元;
开始渲染包围盒的前向面;采用光栅化器来插值包围盒顶点的纹理空间坐标,获得插值后的包围盒顶点的纹理空间坐标;通过像素着色器将插值后的包围盒顶点的纹理空间坐标送到渲染目标中,获得包围盒的前向面的渲染目标的值;其中,通过包围盒的光栅化的方式来创建片元,获得为生成与体相交的射线的像素的片元;
激活的像素着色器采用片元的归一化设备坐标来采样包围盒的前向面的渲染目标的值及包围盒的后向面的渲染目标的值,获得每次采样的相应的渲染目标的值;
通过每次采样的相应的渲染目标的值来计算纹理空间的射线方向和长度,获得每次采用的纹理空间的射线方向和长度。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 201110325105 CN102402791B (zh) | 2011-10-24 | 2011-10-24 | 一种基于gpu的三维流体模拟方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 201110325105 CN102402791B (zh) | 2011-10-24 | 2011-10-24 | 一种基于gpu的三维流体模拟方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102402791A true CN102402791A (zh) | 2012-04-04 |
CN102402791B CN102402791B (zh) | 2013-12-18 |
Family
ID=45884968
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN 201110325105 Active CN102402791B (zh) | 2011-10-24 | 2011-10-24 | 一种基于gpu的三维流体模拟方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102402791B (zh) |
Cited By (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102663208A (zh) * | 2012-04-28 | 2012-09-12 | 浪潮电子信息产业股份有限公司 | 一种利用gpu进行大涡模拟实时渲染的方法 |
CN102722859A (zh) * | 2012-05-31 | 2012-10-10 | 北京像素软件科技股份有限公司 | 一种计算机仿真场景渲染方法 |
CN102740025A (zh) * | 2012-06-08 | 2012-10-17 | 深圳Tcl新技术有限公司 | 屏幕菜单色彩的处理方法及装置 |
CN102831275A (zh) * | 2012-08-31 | 2012-12-19 | 中国科学技术大学 | 一种3d流体的仿真方法及系统 |
CN102938160A (zh) * | 2012-12-03 | 2013-02-20 | 上海交通大学 | 基于细节捕获和形态校正的流体动画渲染方法 |
CN103020374A (zh) * | 2012-12-24 | 2013-04-03 | 河海大学常州校区 | 基于虚拟现实技术的水泵流场计算实时仿真系统及其开发方法 |
CN104899913A (zh) * | 2015-05-13 | 2015-09-09 | 中国科学院自动化研究所 | 一种虚拟舞台环境下的逼真流体特效制作方法 |
CN105006015A (zh) * | 2015-02-12 | 2015-10-28 | 上海交通大学 | 基于位置的流体模拟控制方法及系统 |
CN106408639A (zh) * | 2016-08-31 | 2017-02-15 | 上海交通大学 | 一种基于曲率流的屏幕空间流体渲染方法 |
CN106484532A (zh) * | 2016-09-19 | 2017-03-08 | 华东师范大学 | 面向sph流体模拟的gpgpu并行计算方法 |
CN106485775A (zh) * | 2015-08-27 | 2017-03-08 | 三星电子株式会社 | 建模方法和设备以及使用流体动画曲线图的设备 |
CN107025332A (zh) * | 2017-03-07 | 2017-08-08 | 华南理工大学 | 一种基于sph的织物表面微观水扩散过程可视化方法 |
CN109933429A (zh) * | 2019-03-05 | 2019-06-25 | 北京达佳互联信息技术有限公司 | 数据处理方法、装置、电子设备及存储介质 |
CN112991509A (zh) * | 2021-04-13 | 2021-06-18 | 深圳市万向信息科技有限公司 | 基于WebGL的三维风场反演方法、系统、装置及存储介质 |
CN114004941A (zh) * | 2022-01-04 | 2022-02-01 | 苏州浪潮智能科技有限公司 | 一种基于神经辐射场的室内场景三维重建系统及方法 |
CN115049532A (zh) * | 2022-08-15 | 2022-09-13 | 南京砺算科技有限公司 | 图形处理器、纹理坐标采样方法、编译方法及装置、介质 |
CN117218258A (zh) * | 2023-11-08 | 2023-12-12 | 山东大学 | 一种盾构地质与隧道可视化方法、系统、介质及设备 |
CN118334224A (zh) * | 2024-06-13 | 2024-07-12 | 山东捷瑞数字科技股份有限公司 | 一种基于着色器实现三维管路内流体特性动态模拟的方法 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101329772A (zh) * | 2008-07-21 | 2008-12-24 | 北京理工大学 | 一种基于sph的运动物体与水交互的仿真建模方法 |
CN101540060A (zh) * | 2009-04-09 | 2009-09-23 | 清华大学 | 一种基于物理仿真的气流模拟方法及其系统 |
-
2011
- 2011-10-24 CN CN 201110325105 patent/CN102402791B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101329772A (zh) * | 2008-07-21 | 2008-12-24 | 北京理工大学 | 一种基于sph的运动物体与水交互的仿真建模方法 |
CN101540060A (zh) * | 2009-04-09 | 2009-09-23 | 清华大学 | 一种基于物理仿真的气流模拟方法及其系统 |
Non-Patent Citations (4)
Title |
---|
《计算机辅助设计与图形学学报》 20100331 陈曦 等 GPU中的流体场景实时模拟算法 第2.1节,第401页第2段,第402页右栏第1段,附图1-3 2、4、5、8 第22卷, 第3期 * |
J. J. MONAGHAN: "SMOOTHED PARTICLE HYDRODYNAMICS", 《ANNU. REV. ASTRON. ASTROPHYS.》 * |
谭小辉 等: "基于SPH的三维流体模拟", 《计算机应用与软件》 * |
陈曦 等: "GPU中的流体场景实时模拟算法", 《计算机辅助设计与图形学学报》 * |
Cited By (30)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102663208A (zh) * | 2012-04-28 | 2012-09-12 | 浪潮电子信息产业股份有限公司 | 一种利用gpu进行大涡模拟实时渲染的方法 |
CN102722859A (zh) * | 2012-05-31 | 2012-10-10 | 北京像素软件科技股份有限公司 | 一种计算机仿真场景渲染方法 |
CN102740025B (zh) * | 2012-06-08 | 2016-04-06 | 深圳Tcl新技术有限公司 | 屏幕菜单色彩的处理方法及装置 |
CN102740025A (zh) * | 2012-06-08 | 2012-10-17 | 深圳Tcl新技术有限公司 | 屏幕菜单色彩的处理方法及装置 |
CN102831275A (zh) * | 2012-08-31 | 2012-12-19 | 中国科学技术大学 | 一种3d流体的仿真方法及系统 |
CN102831275B (zh) * | 2012-08-31 | 2015-08-12 | 中国科学技术大学 | 一种3d流体的仿真方法及系统 |
CN102938160A (zh) * | 2012-12-03 | 2013-02-20 | 上海交通大学 | 基于细节捕获和形态校正的流体动画渲染方法 |
CN102938160B (zh) * | 2012-12-03 | 2014-12-31 | 上海交通大学 | 基于细节捕获和形态校正的流体动画渲染方法 |
CN103020374B (zh) * | 2012-12-24 | 2017-03-15 | 河海大学常州校区 | 基于虚拟现实技术的水泵流场计算实时仿真系统及其开发方法 |
CN103020374A (zh) * | 2012-12-24 | 2013-04-03 | 河海大学常州校区 | 基于虚拟现实技术的水泵流场计算实时仿真系统及其开发方法 |
CN105006015A (zh) * | 2015-02-12 | 2015-10-28 | 上海交通大学 | 基于位置的流体模拟控制方法及系统 |
CN105006015B (zh) * | 2015-02-12 | 2018-01-02 | 上海交通大学 | 基于位置的流体模拟控制方法及系统 |
CN104899913A (zh) * | 2015-05-13 | 2015-09-09 | 中国科学院自动化研究所 | 一种虚拟舞台环境下的逼真流体特效制作方法 |
CN104899913B (zh) * | 2015-05-13 | 2018-04-24 | 中国科学院自动化研究所 | 一种虚拟舞台环境下的逼真流体特效制作方法 |
US11410363B2 (en) | 2015-08-27 | 2022-08-09 | Samsung Electronics Co., Ltd. | Modeling method and apparatus and apparatus using fluid animation graph |
CN106485775B (zh) * | 2015-08-27 | 2021-11-23 | 三星电子株式会社 | 建模方法和设备以及使用流体动画曲线图的设备 |
CN106485775A (zh) * | 2015-08-27 | 2017-03-08 | 三星电子株式会社 | 建模方法和设备以及使用流体动画曲线图的设备 |
CN106408639A (zh) * | 2016-08-31 | 2017-02-15 | 上海交通大学 | 一种基于曲率流的屏幕空间流体渲染方法 |
CN106484532A (zh) * | 2016-09-19 | 2017-03-08 | 华东师范大学 | 面向sph流体模拟的gpgpu并行计算方法 |
CN106484532B (zh) * | 2016-09-19 | 2019-09-10 | 华东师范大学 | 面向sph流体模拟的gpgpu并行计算方法 |
CN107025332A (zh) * | 2017-03-07 | 2017-08-08 | 华南理工大学 | 一种基于sph的织物表面微观水扩散过程可视化方法 |
CN107025332B (zh) * | 2017-03-07 | 2021-05-14 | 华南理工大学 | 一种基于sph的织物表面微观水扩散过程可视化方法 |
CN109933429A (zh) * | 2019-03-05 | 2019-06-25 | 北京达佳互联信息技术有限公司 | 数据处理方法、装置、电子设备及存储介质 |
CN112991509A (zh) * | 2021-04-13 | 2021-06-18 | 深圳市万向信息科技有限公司 | 基于WebGL的三维风场反演方法、系统、装置及存储介质 |
CN114004941A (zh) * | 2022-01-04 | 2022-02-01 | 苏州浪潮智能科技有限公司 | 一种基于神经辐射场的室内场景三维重建系统及方法 |
CN115049532A (zh) * | 2022-08-15 | 2022-09-13 | 南京砺算科技有限公司 | 图形处理器、纹理坐标采样方法、编译方法及装置、介质 |
CN115049532B (zh) * | 2022-08-15 | 2022-11-22 | 南京砺算科技有限公司 | 图形处理器、纹理坐标采样方法、编译方法及装置、介质 |
CN117218258A (zh) * | 2023-11-08 | 2023-12-12 | 山东大学 | 一种盾构地质与隧道可视化方法、系统、介质及设备 |
CN117218258B (zh) * | 2023-11-08 | 2024-03-22 | 山东大学 | 一种盾构地质与隧道可视化方法、系统、介质及设备 |
CN118334224A (zh) * | 2024-06-13 | 2024-07-12 | 山东捷瑞数字科技股份有限公司 | 一种基于着色器实现三维管路内流体特性动态模拟的方法 |
Also Published As
Publication number | Publication date |
---|---|
CN102402791B (zh) | 2013-12-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102402791B (zh) | 一种基于gpu的三维流体模拟方法 | |
US9773340B2 (en) | Rendering using ray tracing to generate a visibility stream | |
JP2022091849A (ja) | 光線バンドルの光線に対する差分データを決定する方法及びグラフィックス処理ユニット | |
JP2018514885A (ja) | 3次元ボクセル・ベース・モデリングのためのシステム、方法、およびデバイス | |
CN102426691A (zh) | 一种基于gpu的实时火焰效果的模拟方法 | |
CN102831634B (zh) | 一种高效精确的通用软阴影生成方法 | |
CN115906703A (zh) | 一种用于实时交互应用的gpu流体仿真方法 | |
Doyle et al. | Evaluation of a BVH construction accelerator architecture for high-quality visualization | |
JP5864474B2 (ja) | 空間を分割してグラフィックスを処理する画像処理装置及び画像処理方法 | |
Wang et al. | LVDIF: a framework for real-time interaction with large volume data | |
Xie | The research on mobile game engine | |
Nah et al. | Z 2 traversal order: An interleaving approach for VR stereo rendering on tile-based GPUs | |
Knowles et al. | GPGPU based particle system simulation | |
Chelliah | The ntnu hpc snow simulator on the fermi gpu | |
US12064688B2 (en) | Methods and systems for determining decal projections intersecting spatial units in a frame of a game space | |
Monitzer | Fluid simulation on the GPU with complex obstacles using the lattice Boltzmann method | |
Perez Soler | Volume Rendering Simulation in Real-Time | |
Choroś et al. | Improved partitioned shadow volumes method of real-time rendering using balanced trees | |
Wiak et al. | Visualization method of magnetic fields with dynamic particle systems | |
Danliden et al. | Multi Sub-Pass & Multi Render-Target Shading In Vulkan: Performance Based Comparison In Real-time | |
Peddie | Application Program Interface (API) | |
Wiberg | Automatic Clustering of 3D Objects for Hierarchical Level-of-Detail | |
CN118045352A (zh) | 流动效果的实现方法、装置、电子设备和计算机存储介质 | |
Yusa et al. | 3d Based Game Design Entitled The Adventure Of Chandramawa | |
Bader et al. | Game Physics Performance on the Larrabee Architecture |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
C56 | Change in the name or address of the patentee | ||
CP01 | Change in the name or title of a patent holder |
Address after: 834000 Karamay Road, the Xinjiang Uygur Autonomous Region, No. 22 Patentee after: Red software Limited by Share Ltd Address before: 834000 Karamay Road, the Xinjiang Uygur Autonomous Region, No. 22 Patentee before: Karamay Hongyou Software Co., Ltd. |