基于屏幕空间的sph流体表面实时绘制方法

文档序号:6521905阅读:673来源:国知局
基于屏幕空间的sph流体表面实时绘制方法
【专利摘要】本发明提供一种基于屏幕空间的SPH流体表面实时绘制方法,在利用SPH方法仿真流体的动力学行为的基础上,以流体表面实时跟踪与逼真绘制为目标,围绕基于屏幕空间的加速计算方法展开研究,首先从视点位置生成三维空间中流体的深度图,并对其进行平滑滤波来视点相关地动态提取流体表面,然后结合环境映射、流体反射、折射等光学效果,并通过模拟流体与虚拟场景中其他三维实体的交互作用,基于GPU实现了柔体和流体交互场景的实时逼真绘制。本发明完全基于GPU来进行各项计算和渲染,所有的操作均以并行的方式进行,具有实时性好,物理真实感强的特点。
【专利说明】基于屏幕空间的SPH流体表面实时绘制方法
【技术领域】
[0001]本发明涉及一种基于屏幕空间的SPH流体表面实时绘制方法。
【背景技术】
[0002]近几十年来,针对流水、烟雾等流动物体的仿真研究发展迅速。该领域的研究涉及流体动力学、数值计算、微积分以及计算机图形学等多个学术方向,在游戏娱乐、科学计算、仿真训练等方面具有很高的实用价值,也一直都是一个非常具有挑战性的研究热点。近几年来,随着多核CPU、GPU并行处理技术的普及,基于流体的建模与仿真技术得到了迅猛发展,成为计算机图形学领域新的研究热点,而借助于GPU并行加速计算,在特定范围和精度下的流体模拟已经基本可以满足实时交互的需要。
[0003]基于物理流体模拟技术需要对三维空间中的流体力学方程进行求解,因而具有非常高的计算复杂度,目前主要有基于粒子的拉格朗日方法和基于网格的欧拉方法。近年来,无网格方法逐渐成为解决工程科学问题的一个有效工具。与传统的基于网格的数值方法,如有限元、有限差分和有限容积等不同,无网格粒子方法使用离散的粒子对积分形式或微分形式的控制方程进行离散和近似。这些粒子可以任意分布,而并非由某种网格联系在一起。这样就避免了病态网格引起的不稳定问题,而且可以方便的处理断裂等拓扑改变问题。
[0004]SPH方法使用一组粒子来离散所模拟的连续介质(流体或固体),每个粒子代表宏观连续领域的介质团,伴随介质的运动以当地速度移动,是一种典型的拉格朗日方法。SPH方法中粒子不仅用于估算场变量与近似控制方程,也代表介质系统,具有诸如密度、压力、速度、内能等宏观物理量。
[0005]SPH流体仿真方法使用大量的离散粒子来仿真流体的物理行为,但缺少显式的可用于视觉表现的流体表面几何信息,因此高效的动态流体表面提取算法已成为制约流体仿真效果实时逼真呈现的主要瓶颈之一。
[0006]为了解决上述问题,本发明提出了一种基于屏幕空间的SPH流体表面实时绘制方法,以流体表面实时跟踪与逼真绘制为目标,围绕基于屏幕空间的加速计算方法展开研究,首先从视点位置生成三维空间中流体的深度图,并对其进行平滑滤波来视点相关地动态提取流体表面,然后结合环境映射、流体反射、折射等光学效果,并通过模拟流体与虚拟场景中其他三维实体的交互作用,基于GPU实现了柔体和流体交互场景的实时逼真绘制。

【发明内容】

[0007]本发明解决的技术问题是:克服了现有的流体表面提取和绘制方法的效率问题,提供了一种基于屏幕空间的SPH流体表面实时绘制方法。并通过使用基于GPU的数据结构和算法,满足了对流体运动过程进行实时模拟渲染的需要。
[0008]本发明采用的技术方案为:一种基于屏幕空间的SPH流体表面实时绘制方法,包括以下三个步骤:
[0009]步骤(I)、流体的物理仿真:通过由SPH方法来对流体进行物理仿真,利用GPU动态地并行计算所有光滑流体粒子的位置、密度信息,作为整个表面绘制方法的输入数据;
[0010]步骤(2)、流体的表面提取:从视点位置出发,将步骤(I)计算得到的每一个粒子按照位置和大小绘制成粒子球,截取当前视点下的深度信息和厚度,得到表面深度图和厚度图,然后采用双边滤波器对表面深度进行平滑处理,以此作为近似的流体表面;
[0011]步骤(3)、流体的实时逼真绘制:步骤(2)中计算得到的平滑深度图作为近似流体表面,基于在步骤(2)中动态生成的厚度图,根据比尔-朗伯定律来计算流体的透明度;同时,在基于深度图进行流体表面法线计算的基础上,通过结合冯氏光照模型和延迟着色技术,来实时模拟流体表面的反射、折射效果;
[0012]以上所有操作和计算都在GPU上进行,具有高度并行性,而且避免了由显存和内存的数据交换带来的时间消耗,具有很高的实时性。
[0013]进一步的,步骤(I)中所述的流体的物理仿真方法,该方法使用一组离散粒子表示流体,利用平滑核函数近似粒子的物理参数,将纳维一斯托克斯(Navier-StokeS,N-S)方程转化为只与时间相关的离散形式的微分方程,再利用积分方法求解。
[0014]进一步的,步骤(2)中所述的流体表面提取方法,该方法将流体粒子以小球的方式进行绘制,通过截取到的深度图来近似的代替流体表面。
[0015]进一步的,步骤(3)中所述的通过结合冯氏光照模型、比尔-朗伯定律和延迟着色技术,来实时模拟流体表面的光学效果。
[0016]进一步的,步骤(I)、(2)、(3)中所述所有操作和计算都在GPU上进行,除了预处理阶段,没有显存和内存的数据交换,所有操作和计算都是利用CUDA和OpenGL技术并行处理。
[0017]本发明的原理在于:
[0018]本发明提供一种基于屏幕空间的SPH流体表面实时绘制方法,在利用SPH方法仿真流体的动力学行为的基础上,以流体表面实时跟踪与逼真绘制为目标,围绕基于屏幕空间的加速计算方法展开研究,首先从视点位置生成三维空间中流体的深度图,并对其进行平滑滤波来视点相关地动态提取流体表面,然后结合环境映射、流体反射、折射等光学效果,并通过模拟流体与虚拟场景中其他三维实体的交互作用,基于GPU实现了柔体和流体交互场景的实时逼真绘制。本发明的内容主要包括了以下三个方面:
[0019](I)流体的物理仿真,光滑粒子流体动力学(Smoothed Particle Hydrodynamics,SPH)方法是一种典型的无网格方法,在流体仿真中,该方法使用一组离散粒子表示流体,利用平滑核函数近似粒子的物理参数,将纳维一斯托克斯(Navier-Stokes,N-S)方程转化为只与时间相关的离散形式的微分方程,再利用积分方法求解。本发明深入研究了 SPH方法的原理,并对整个物理仿真过程进行了基于GPU的实现,以此作为流体表面提取与逼真绘制的基础。通过SPH方法模拟流体运动,利用GPU对每一个粒子的运动状态进行并行计算,并提出了一种高效的数据组织方式,所有的数据都存储于显存中,方便高效地进行数据的访问和存储。
[0020](2)流体的表面提取,SPH流体仿真方法使用大量的离散粒子来仿真流体的物理行为,但缺少显式的可用于视觉表现的流体表面几何信息,因此高效的动态流体表面提取算法已成为制约流体仿真效果实时逼真呈现的主要瓶颈之一。本发明研究并实现了基于屏幕空间的流体表面提取方法,其核心思想是:将粒子作为小球进行绘制,并在屏幕空间提取二维深度图和厚度图,在此基础上,通过对深度图进行平滑滤波来视点相关地近似流体表面的几何结构。该方法有效避免了在三维空间中对流体表面几何结构进行显式提取和网格化处理,因而,可将三维空间的几何拓扑计算问题转化为对二维浮点纹理图像的处理问题,并借助于GPU并行计算进一步降低了时间复杂度,为流体仿真结果的逼真展现提供了实时几何建模方面的保证。
[0021](3)流体的实时逼真绘制,流体光学特性的模拟对其视觉效果的逼真展现具有较大影响,其中包括环境映射、反射、折射等多种光学效果。本发明基于在屏幕空间动态生成的厚度图,根据比尔-朗伯定律来计算流体的透明度;同时,在基于深度图进行流体表面法线计算的基础上,通过结合冯氏光照模型和延迟着色技术,来实时模拟流体表面的反射、折射效果。
[0022]本发明完全基于GPU来进行各项计算和渲染,所有的操作均以并行的方式进行,具有实时性好,物理真实感强的特点。
[0023]本发明与现有技术相比的优点在于:
[0024]1、本发明提出的高效数据组织方式,一方面更加便于使用GPU来进行并行计算加速,另一方面也可以避免由于内存和显存之间的数据交换带来的时间消耗。
[0025]2、效率高:本方法将流体表面提取问题由三维空间转到二维屏幕空间,平滑、变换等操作都是在二维空间进行,有效地减少了计算时间;另外,算法中深度图、厚度图的获取都可以由硬件完成,因此本方法的效率非常高。
[0026]3、平滑的流体表面:针对获取的深度图,采用图像处理中常用的平滑滤波操作,减少粒子绘制带来的失真。另外,流体表面的平滑程度方便控制,可以缓解平滑过度或不足的情况。
[0027]4、无需生成流体表面的三维网格:本方法的光照、折射等都是基于屏幕空间的流体表面,有效避免了构建流体表面三维网格带来的大量的计算和内存消耗。另外,本方法只生成当前视点下可见的流体表面,避免了额外计算;
[0028]5、视点相关的层次细节:本方法构建的深度图是在当前视点的屏幕空间中,自然具有视点相关的层次细节。
[0029]6、所有的处理、绘制和着色过程都直接在图形硬件上进行,具有很高的效率。
【专利附图】

【附图说明】
[0030]图1为基于屏幕空间的SPH流体表面绘制方法流程图;
[0031]图2为粒子球与流体深度图示意图;图2 (a):粒子球,图2 (b):深度图;
[0032]图3为深度图的平滑处理效果图;图3 (a):平滑处理前,图3 (b):平滑处理后;
[0033]图4为粒子厚度计算不意图和厚度图;图4 (a):粒子厚度计算不意图;图4 (b):厚度图;
[0034]图5为流体表面法线的计算结果和光照的计算结果;图5 (a):法线的计算结果,图5 (a):光照的计算结果;
[0035]图6为流体的环境反射和菲涅尔反射结果;图6 (a):环境反射计算结果,图7 (b):菲涅尔反射计算结果,图6 (c):两者混合;
[0036]图7为流体对环境的反射效果图;[0037]图8为流体对背景的折射效果图;图8 (a):折射的计算结果,图8 (b):对碗的折射;
[0038]图9为流体的最终绘制结果。
【具体实施方式】
[0039]图1给出了基于屏幕空间的SPH流体表面实时绘制方法的总体处理流程,下面结合其他附图及【具体实施方式】进一步说明本发明。
[0040]本发明提供一种基于屏幕空间的SPH流体表面实时绘制方法,主要步骤介绍如下:
[0041]1.流体的物理仿真方法
[0042]本发明采用SPH方法来模拟流体的运动,SPH方法使用一组粒子来离散所模拟的连续介质(流体或固体),每个粒子代表宏观连续领域的介质团,伴随介质的运动以当地速度移动,是一种典型的拉格朗日方法。SPH方法中粒子不仅用于估算场变量与近似控制方程,也代表介质系统,具有诸如密度、压力、速度、内能等宏观物理量。
[0043]本发明的重点在于流体表面的提取和渲染,所以不再对SPH方法进行详述,可以在网络上找到许多开源的SPH算法的GPU实现,本发明采用的是其中的一个CUDA实现。
[0044]通过SPH进行物理仿真得到的粒子位置等数据都是保存在显存中,为了与OpenGL进行数据共享,本发明采用了 CUDA与OpenGL的一种互操作实现,即是将OpenGL的缓冲区句柄映射到CUDA的指针,就可以通过CUDA的核函数直接对OpenGL的缓冲区进行访存操作,避免了数据传回内存再传到显存带来的不必要时间消耗。
[0045]2.基于屏幕空间的流体表面提取
[0046]本文采用的流体表面提取方法将粒子以小球的形式进行绘制,然后在屏幕空间获取其深度信息,再进行平滑滤波得到视点相关的近似流体表面。本方法直接使用流体表面的粒子的深度图作为流体的表面,不用进行三角网格化,而且平滑滤波等操作都是在二维深度图并行运算,方法实现简单,且所有操作均可以由硬件直接执行或在GPU上并行计算,因此具有很好的实时性。
[0047]a)流体表面深度的计算
[0048]深度是计算机图形学中一个常用的概念,在OpenGL中,它表示的是物体到视点的距离,可以根据深度来决定物体之间的遮挡关系,OpenGL始终保持的是距离视点最近的物体的深度,本发明正是利用了这一点,通过截取OpenGL的深度缓冲区,来获取流体表面的深度图(如图2右)。
[0049]由于使用的是OpenGL的可编程管线,自定义了渲染管线的顶点着色器和片段着色器,所以需要对深度进行自定义。OpenGL函数通常所处理的是二维或三维的顶点,但它们在内部几乎都是被当作具有4个坐标的三维齐次坐标进行处理的,即(X,y, ζ)τ表示为(X,y, z, w)T。只要w不等于O, (X,y, z, w)T就对应于三维点(x/w, y/w, z/w)T ;如果w等于O,它不再对应于欧几里德点,而是对应一些理想化的“无穷远点”。
[0050]所以,在这里我们定义深度为:
[0051]depth = posEye.z/posEye.w
[0052]其中depth为对应片段的深度,posEye为变换到视点空间后点的坐标向量。这样depth表示该点对于视点的距离,我们用它来表示流体的深度。
[0053]我们使用点精灵来绘制粒子,可以利用其纹理坐标非常方便的获得其每个位置的深度,并将渲染目标重定向到纹理,然后截取深度图缓冲区就可以得到深度纹理,供下面的操作使用。
[0054]b)流体表面深度的平滑处理
[0055]得到的流体表面深度图如图2右,此时模拟流体的小球已经被绘制成了粒子球,看上去已经有了流体的大致外形,但是它们表面依然是清晰可见的球状边缘,因此需要对其进行平滑处理以得到平滑的流体表面。
[0056]本发明采用双边滤波(Bilateral Filter)的改进方法对流体表面深度值进行平滑处理。双边滤波与高斯模糊类似,不同的是它是一种可以保边去噪的滤波器。它由两个函数构成,一个函数是由几何空间距离决定滤波器系数,另一个由像素差值决定滤波器系数。因此,双边滤波不仅有和高斯模糊一样的模糊效果,而且因为加入了一个像素差值决定的滤波器系数,所以深度相差越大的像素权重相对较小,模糊程度降低,这样就能很好的做到边界保持,如图3右。
[0057]深度缓存的值是浮点数,范围从0.0f到1.0f变化,其中0.0表示视锥体的近剪切面,1.0表示视锥体的远剪切面。但是,深度缓存中的浮点数不是线性分布的,将近90%的浮点数都是接近于近剪切面的,而只占深度缓冲的10%,而剩下的10% (从0.9f到1.0f)则占了深度缓存的90%。如果用黑色代表0.0f,用白色代表1.0f,你将看到几乎99.999%的颜色都是白色,这表明在这个距离深度并不准确。所以需要对深度进行线性化处理,使用如下公式:
[0058]IinearizeDepth = (2*near)/(far+near-depth*(far-near))
[0059]其中near为近剪切面的值,far为远剪切面的值,depth为深度值。
[0060]本文对深度图的平滑处理是在着色器程序中完成的,对于片段着色器中的某一像片段,处理的主要过程如下:
[0061]1.设定一个大小固定的平滑窗口,该窗口以这一片段为中心;
[0062]2.对于平滑窗口中的每一个采样点:
[0063]a)获取采样点深度值SampleDepth ;
[0064]b)r为采样点距离平滑窗口中心的距离;
[0065]c)w = 作为几何空间的权重;
[0066]d) d为采样点深度值与这一片段深度值的差;
[0067]e)g = e_#d作为像素差值的权重;
[0068]f )求加权和 sum = sum+sampIeDepth*w*g ;
[0069]g)求权重和 wsum = wsum+w*g。
[0070]3.求得加权平均值fragDepth = sum/wsum,作为该片段新的深度值。
[0071]将上节得到的深度纹理传入着色器程序,按照上述处理过程对其进行处理,结果如图3所示。而且跟上节一样将渲染目标重定向到纹理中,将平滑后的深度图存储在已平滑深度纹理中,供后面使用。
[0072]4.流体表面逼真绘制
[0073]a)流体厚度的计算[0074]和深度图的获取一样,我们使用点精灵来绘制粒子,不同的是在着色器程序中使用点精灵的纹理坐标来得到粒子的厚度,我们通过统计粒子的数量来计算流体的厚度。
[0075]利用点精灵的纹理坐标的计算方式,在片段着色器中我们可以很方便的得到粒子在该片段的厚度,如图4所示为点精灵(粒子球)的一个截面图,红色箭头所指点为片段着色器正在处理的那个片段,其中I为该片段距离球心,即经过变换后的纹理坐标原点的距离,d为粒子在该片段的厚度。可以明显的知道:
[0076]d = 2今1 -11
[0077]这里我们默认粒子的半径为1,而:
[0078]I = length (pointCoord.xy)
[0079]其中IengthO函数计算向量的长度,pointCoord为该片段的纹理坐标。这样得到的厚度数值较大,我们可以使用正态分布函数来进行转换:
【权利要求】
1.一种基于屏幕空间的SPH流体表面实时绘制方法,其特征在于包括以下三个步骤: 步骤(I)、流体的物理仿真:通过由SPH方法来对流体进行物理仿真,利用GPU动态地并行计算所有光滑流体粒子的位置、密度信息,作为整个表面绘制方法的输入数据; 步骤(2)、流体的表面提取:从视点位置出发,将步骤(I)计算得到的每一个粒子按照位置和大小绘制成粒子球,截取当前视点下的深度信息和厚度,得到表面深度图和厚度图,然后采用双边滤波器对表面深度进行平滑处理,以此作为近似的流体表面; 步骤(3)、流体的实时逼真绘制:步骤(2)中计算得到的平滑深度图作为近似流体表面,基于在步骤(2)中动态生成的厚度图,根据比尔-朗伯定律来计算流体的透明度;同时,在基于深度图进行流体表面法线计算的基础上,通过结合冯氏光照模型和延迟着色技术,来实时模拟流体表面的反射、折射效果; 以上所有操作和计算都在GPU上进行,具有高度并行性,而且避免了由显存和内存的数据交换带来的时间消耗,具有很高的实时性。
2.根据权利要求1所述的基于屏幕空间的SPH流体表面实时绘制方法,其特征在于:步骤(I)中所述的流体的物理仿真方法,该方法使用一组离散粒子表示流体,利用平滑核函数近似粒子的物理参数,将纳维一斯托克斯(Navier-Stokes,N-S)方程转化为只与时间相关的离散形式的微分方程,再利用积分方法求解。
3.根据权利要求1所述的基于屏幕空间的SPH流体表面实时绘制方法,其特征在于:步骤(2)中所述的流体表面提取方法,该方法将流体粒子以小球的方式进行绘制,通过截取到的深度图来近似的代替流体表面。
4.根据权利要求1所述的基于屏幕空间的SPH流体表面实时绘制方法,其特征在于:步骤(3)中所述的通过结合冯氏光照模型、比尔-朗伯定律和延迟着色技术,来实时模拟流体表面的光学效果。
5.根据权利要求1所述的基于屏幕空间的SPH流体表面实时绘制方法,其特征在于:步骤(1)、(2)、(3)中所述所有操作和计算都在GPU上进行,除了预处理阶段,没有显存和内存的数据交换,所有操作和计算都是利用CUDA和OpenGL技术并行处理。
【文档编号】G06T17/00GK103679802SQ201310636586
【公开日】2014年3月26日 申请日期:2013年12月1日 优先权日:2013年12月1日
【发明者】郝爱民, 夏清, 李帅, 王莉莉 申请人:北京航空航天大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1