CN101329772B - 一种基于sph的运动物体与水交互的仿真建模方法 - Google Patents
一种基于sph的运动物体与水交互的仿真建模方法 Download PDFInfo
- Publication number
- CN101329772B CN101329772B CN2008101168983A CN200810116898A CN101329772B CN 101329772 B CN101329772 B CN 101329772B CN 2008101168983 A CN2008101168983 A CN 2008101168983A CN 200810116898 A CN200810116898 A CN 200810116898A CN 101329772 B CN101329772 B CN 101329772B
- Authority
- CN
- China
- Prior art keywords
- particle
- water
- particles
- tabulation
- emulation
- 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.)
- Expired - Fee Related
Links
Images
Landscapes
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
本发明涉及一种基于SPH的运动物体与水交互的仿真建模方法,属于计算机图形学与虚拟现实领域。本发明的方法包括以下步骤:一、对仿真进行初始化,包括粒子属性的初始配置和建立粒子的相邻粒子列表;二、对水粒子的相邻粒子列表进行更新;三、计算水粒子在下一步时间步的位置和运动状态;四、计算物体粒子在下一步时间步的位置和运动状态;五、判断粒子与障碍物是否发生碰撞,如果发生碰撞,则改变粒子的运动速率和方向,否则直接执行第六步;六、基于marching cubes算法构建水面拓朴结构;七、采用图形绘制语言,进行水面和物体的绘制和显示;八、判断仿真是否停止运行。使用本发明所述方法可以模拟运动物体与水的交互现象,获得比较真实的仿真结果。
Description
技术领域
本发明涉及一种仿真建模方法,特别涉及一种基于SPH的运动物体与水交互的仿真建模方法,属于计算机图形学与虚拟现实领域。
背景技术
水环境仿真长期以来一直是虚拟现实领域的重要研究方向,它有助于提高虚拟环境的表现能力,在计算机游戏、影视动画、军事仿真等领域发挥着重要作用。物体与水的交互作用是自然界中的常见现象,同时也是水环境仿真的研究热点和难点。它是一个复杂的流体运动过程,需要采用物理建模方法才能真实地表现物体和水的运动。目前,计算机图形学中关于物体与水交互的物理建模方法主要有两种,一种是欧拉方法,另一种是拉格朗日方法。
欧拉方法是一种基于网格的方法,在流体仿真中应用广泛。但欧拉方法有一个固有的缺欠,就是在对流场进行网格化求解时存在数值耗散,导致流体在质量上不能守恒,亦即随着时间的推进流体质量不断减少。这对于烟雾等气态流体的仿真来说并无大碍,因为烟雾本身就具有飘散后逐渐消失的现象,但对于水流仿真来说,数值耗散将导致水流细节被平滑掉,在视觉上产生失真。拉格朗日方法是一种基于粒子的方法。与欧拉方法相比,拉格朗日方法研究的是流体粒子或微团的运动,因此,流体的对流项可利用流体质点的运动来直接模拟,不需要对整个流场进行网格化求解,因而可避免欧拉方法中的数值耗散问题。
光滑粒子流体动力学(Smoothed Particle Hydrodynamics,SPH)是流体动力学领域近20年来发展起来的一种新的纯拉格朗日方法,最初主要用在天体物理的研究中,1994年,Monaghan将其用于模拟流体的自由表面流动,引起很多学者的关注,随后,流体动力学领域纷纷展开利用SPH方法模拟自由表面流动的研究。1995年,Stam首次将SPH方法引入到计算机图形学领域,模拟了火和其他气态现象。2003年,Muller基于SPH方法模拟了向杯中倒水的过程,他从拉格朗日流体控制方程出发,将水粒子所受到的力分解为压力、重力、粘滞力,并根据SPH理论和公式求解这些力,水粒子在这些力的作用下遵循牛顿第二定律运动。同时,Muller还提到水粒子与障碍物的碰撞问题和基于marching cubes算法重构水体表面,但没有给出具体的解决方案。Muller的方法为基于SPH的水流模拟研究奠定了基础,但是,现有的基于SPH的水流模拟方法只考虑了物体处于静止状态这一种情况,将物体看作盛水的容器或是限制水的运动范围的障碍物,没有让物体运动起来并参与到水的运动过程当中,因此,不能表现运动物体与水发生交互的效果。
发明内容
为了模拟运动物体与水的交互现象,本发明提出一种基于SPH的运动物体与水交互的仿真建模方法。该方法对物体和水进行粒子化,建立物体粒子与水粒子的受力分析模型和状态更新方法,以及粒子与障碍物的碰撞检测方法,并基于Marching Cubes算法从水粒子的数据中抽取出水的自由运动表面。
本发明提出的基于SPH的运动物体与水交互的仿真建模方法,包括如下几个步骤:
一、对仿真进行初始化,包括粒子属性的初始配置和建立粒子的相邻粒子列表。首先将物体和水进行粒子化,即将物体和水用粒子的形式来表达,建立包含物体粒子和水粒子的粒子集合,同时,对集合中的粒子属性进行初始配置:
1)确定物体粒子和水粒子的数量;
2)建立粒子集合的位置数组和速度数组;
3)初始时按照物体和水的形状等间隔分布粒子,并将每个物体粒子和水粒子的初始位置保存到位置数组中,同时将每个物体粒子和水粒子的初始速度设置为零;
4)设置每个粒子的质量、密度、压强等常数属性,同时为所有粒子设定统一的粒子支持域半径,即光滑核半径;
5)仿真的初始时间设置为t=0,并定义时间步常量TIME_STEP。
对粒子集合进行初始配置后,为每个粒子建立粒子的相邻粒子列表,即为每个粒子寻找位于其支持域内的所有粒子,列表中包含位于粒子支持域内的所有粒子的索引值。
二、仿真时间步向前推进一步,对水粒子的相邻粒子列表进行更新。
三、计算水粒子在下一步时间步的位置和运动状态。
四、计算物体粒子在下一步时间步的位置和运动状态,具体步骤为:
1)计算物体粒子j所受浮力fj float
2)计算物体粒子j的重力fj gravity
3)计算物体粒子所受合力Fj
4)计算Fj作用下的平移加速度aj
5)计算物体粒子的平移速度velj+1
6)计算物体粒子的旋转速度vel′j+1
7)计算物体粒子在下一刻的速度vj+1=vel′j+1+velj+1
8)计算物体粒子在下一刻的位置xj+1=xj+vj+1Δt
五、根据计算得到的粒子位置判断粒子与障碍物是否发生碰撞,如果发生碰撞,则改变粒子的运动速率和方向,否则直接执行第六步。
六、基于marching cubes算法构建水面拓朴结构,具体步骤为:
1)由非规则分布的粒子数据产生出规则分布的水流密度场数据,即生成规则分布的标量(密度)数据场,具体做法是:将网格节点作为流场中的规则采样点,节点的采样值通过SPH插值来计算;
2)确定水面的密度值,作为等值面的阈值;
3)基于Marching Cubes算法进行水面抽取,即从水体密度场中抽取出水体表面的密度等值面,进而构建出水体表面的拓朴结构,完成水面绘制。
七、采用图形绘制语言,如OPENGL或DIRECTX,将第六步所生成的三角形网格传输到显卡进行水面的绘制和显示。同时,以物体的重心位置为基准,以三角面片的形式绘制出物体。
八、判断是否有人为关闭仿真进程的行为或仿真结束时间到,如果有,则仿真停止运行;否则仿真继续,重复执行二~七步。
为提高效率,建立粒子的相邻粒子列表可以通过对粒子所在空间进行网格化处理来加速粒子搜索。因此,建立相邻粒子列表涉及粒子空间网格化和基于网格的支持域粒子搜索两个方面,具体步骤为:
1)粒子空间网格化
首先对粒子集中的所有粒子进行一次逐一检查,找到这些粒子在X,Y,Z三个方向上的位置坐标的最大值和最小值,通过最大值和最小值之差求出粒子集在三个方向上的分布跨度;然后对每个方向上的分布跨度以光滑核半径的长度为间距进行等间隔划分,最终建立一个以光滑核半径为网格单元长度的三维空间网格。
2)基于网格的支持域粒子搜索
对每个粒子建立粒子的相邻粒子列表,即为每个粒子寻找位于其支持域内的所有粒子,列表中包含位于粒子支持域内的所有粒子的索引值,搜索方法是分别对当前粒子所在网格单元及与该单元上、下、左、右、前、后相邻的单元(共27个)内的粒子进行搜索,并判断搜索到的粒子与当前粒子的距离是否小于光滑半径,从而决定是否将其加入相邻粒子列表。
使用本发明所述方法可以模拟运动物体与水的交互现象,获得比较真实的仿真结果,且当粒子数量低于6000个时,可达到实时仿真的效果。该方法可应用于计算机游戏、军事仿真、影视动画等领域。
附图说明
图1是基于SPH的运动物体与水交互的仿真总体流程图。
图2是粒子集合的数据结构示意图。
图3是空间网格和粒子分配示意图。
图4是网格、粒子、相邻粒子列表的数据结构及关系示意图。
图5是相邻粒子搜索流程图。
图6是粒子与障碍物发生碰撞反弹示意图。
具体实施方式
本发明提出的基于SPH的运动物体与水交互的仿真方法,其总体流程如图1所示。
一、对仿真进行初始化,包括建立粒子集合并对粒子属性进行初始配置、建立每个粒子的相邻粒子列表。
首先,是建立粒子集合并对粒子属性的初始配置。由于SPH是一种基于粒子的方法,因此,在基于SPH进行水与物体的交互仿真时必须首先将物体和水进行粒子化,即将物体和水用粒子的形式来表达,建立包含物体粒子和水粒子的粒子集合,该集合用数组结构来表达,同时,对集合中的粒子属性进行初始配置。具体涉及如下几方面内容:
1)确定物体粒子和水粒子的数量,对于规则的物体或水体来说,是确定X、Y、Z三个方向上每个方向的粒子分布数,然后将三个方向的数量作乘积。粒子分布数可以任意选择,数量增加可以使效果逼真,但会导致耗费资源增加,数量减小可以加快处理速度,但会导致仿真效果不够真实,具体数量可以根据使用资源与期望获得的效果确定。例如,假设物体和水的形状是立方体,三个方向上的粒子数量分别为sx、sy、sz,则物体粒子的数量为sx×sy×sz。对于不规则的物体或水体来说,只能用手工方法确定每个粒子的位置。将物体粒子和水粒子的数量设置为常量,分别记为SOLID-NUM和WATER-NUM,同时,确定粒子集合的总数量,记为N-PARTICLES,且N-PARTICLES=SOLID-NUM+WATER-NUM。
2)定义两个长度为N_PARTICLES的数组,称为粒子集合的位置数组和速度数组。数组0~SOLID-NUM-1元素用于保存物体粒子的信息,SOLID-NUM~N-PARTICLES元素用于保存水粒子的信息。同时,这些粒子按坐标排列以线性顺序存放到数组中。图2是粒子集合的数据结构示意图。
3)初始时的物体和水处于静止状态,可按照物体和水的形状等间隔分布粒子,粒子间的间隔可通过粒子分布长度除以该方向上的粒子分布数量来确定,并将每个物体粒子和水粒子的初始位置保存到位置数组中。同时,将每个物体粒子和水粒子的初始速度设置为零。
4)每个粒子都具有质量、密度等常数属性,同时所有粒子都具有统一的光滑核半径,这些属性也需要在仿真开始时给定。每个粒子的质量设为m=0.0002克,这是领域内的相关文献指出的效果较好的经验值;水粒子的密度设为ρ水=1000克/立方米;木头粒子的密度设为ρ木头=300克/立方米;粒子的光滑核半径决定着影响粒子状态的粒子支持域的范围,在本实施例中设为h=0.005米。
5)仿真的初始时间设置为t=0,并定义时间步常量为TIME_STEP=0.005秒。
其次,是建立粒子的相邻粒子列表。由于每个粒子的属性都是通过粒子支持域内的其它粒子的插值来获得的,为便于管理支持域内的粒子,我们为每个粒子建立一个相邻粒子列表,列表中包含位于粒子支持域内的所有粒子的索引值。例如,如果粒子1的支持域内包含粒子3、粒子6和粒子8,则粒子1的相邻粒子列表中就会含有3、6、8三个粒子索引值。
建立粒子的相邻粒子列表的过程就是为每个粒子寻找位于其支持域内的所有粒子的过程。在不进行特殊处理的情况下,建立一个粒子的相邻粒子列表需要对粒子集中的所有粒子进行一次从头到尾的搜索,而建立n个粒子的相邻粒子列表就需要进行n次粒子集搜索,这无疑会耗费大量机时。为此,我们提出对粒子所在空间进行网格化处理,以此来加速粒子搜索。因此,建立相邻粒子列表涉及粒子空间网格化和基于网格的支持域粒子搜索两个方面。
1)粒子空间网格化:
首先对粒子集中的所有粒子进行一次逐一检查,找到这些粒子在X,Y,Z三个方向上的位置坐标的最大值和最小值,通过最大值和最小值之差求出粒子集在三个方向上的分布跨度;然后对每个方向上的分布跨度以光滑核半径的长度为间距进行等间隔划分,最终可建立一个以光滑核半径为网格单元长度的三维空间网格,如图3所示。网格单元按坐标顺序线性排列,每个粒子的X、Y、Z坐标分别与网格最左下角点的X、Y、Z坐标相减并除以网格单元长度,得到粒子在的网格中的单元位置。同时,每个粒子都有一个指向其相邻粒子列表的指针。图4是网格、粒子、及相邻粒子列表的数据结构与关系示意图。
2)支持域粒子搜索:
由于在对粒子运动空间进行网格划分时,网格单元的长度被设置为核函数的光滑半径长度,这使得与粒子相隔较远的网格单元因超出粒子的支持域范围而不必被搜索。因此,我们对粒子支持域内的粒子搜索限定在与粒子相邻的网格单元中进行即可。搜索过程针对粒子集中的所有粒子,搜索方法是分别对当前粒子所在网格单元及与该单元上、下、左、右、前、后相邻的单元(共27个)内的粒子进行搜索,这样做可减少参与搜索的范围和粒子数量,提高搜索效率。具体步骤如下:
1)从粒子集中取出粒子,记为i。注意,如果只为物体粒子建立相邻粒子列表,则只从粒子集中的物体粒子部分取粒子,同理,如果只为水粒子建立相邻粒子列表,则只从粒子集中的水粒子部分取粒子。
2)确定当前粒子所在的网格单元
3)确定与该单元相邻的网格单元(共27个)
4)取出一个相邻网格单元
5)取出该网格单元格内的粒子,记为j
6)计算粒子i与粒子j之间的距离,如果距离小于光滑半径,则执行第7步,否则执行第9步
7)将粒子j记入粒子i的相邻粒子列表中
8)粒子i的支持域内的粒子计数加“1”
9)判断网格单元内的粒子是否全部访问完毕,如果全部访问完毕,则执行第10步,否则执行第5步
10)判断待搜索的网格单元是否全部访问完毕,如果全部访问完毕,则执行第11步,否则执行第4步
11)判断粒子集中的粒子是否全部访问完毕,如果全部访问完毕,则执行第12步,否则执行第1步
12)搜索结束
整个搜索流程如图5所示。
需要说明的是,仿真初始阶段只建立物体粒子的相邻粒子列表。这是由于物体是一种固体,而固体粒子间的相对位置始终保持不变,因此,物体粒子的相邻粒子列表只在仿真初始阶段求取一次即可。而水粒子间的相对位置会由于水的运动而不断发生变化,因此,水粒子的相邻粒子列表需要在每一个时间步的开始时刷新,因而,不必在仿真初始阶段建立,可放在仿真运行阶段完成。
二、空间网格、水粒子相邻粒子列表的更新
此处开始进入仿真运行阶段,仿真时间步向前推进一步,即t=t+TIME_STEP。由于水粒子间的相对位置会随着粒子水的运动而不断变化,因此,每个水粒子支持域内的粒子是不断变化的,水粒子的相邻粒子列表需要在每个时间步都刷新一次,即每个时间步都要对所有水粒子的相邻粒子列表重新建立一次。建立方法与步骤(1)中的相同,即包括粒子空间网格化和基于网格的水粒子支持域搜索两个方面。需要说明的是,虽然在初始化阶段已建立空间网格,但由于网格空间在X、Y、Z三个方向上的范围刚好等于粒子在X、Y、Z三个方向上的跨度,而粒子的不断运动导致粒子在空间中的分布跨度随着粒子的运动不断变化,因此,要对粒子空间网格进行重新定位和分割,即对网格进行刷新。空间网格的重新划分方法与具体实施方案“步骤一”中的网格划分方法相同。网格被刷新后,可根据新计算出来的粒子空间位置定位每个粒子所处的网格单元。
由于初始化阶段已经建立了物体粒子的相邻粒子列表,且列表内容在每个时间步都不发生变化,因此不必更新。
有了正确的物体粒子和水粒子的相邻粒子表后,就可基于这些列表进行物体粒子和水粒子的位置和运动状态。首先计算水粒子的位置和运动状态,然后计算物体粒子的位置和运动状态。
三、计算水粒子在下一刻的位置和运动状态。
水粒子的运动状态可采用Muller提出的方法进行计算。这里只给出概要的描述,并归纳出计算步骤。
每一个水粒子i所受的力分解可为压力、重力和粘滞力,这些力的计算公式如下:
(1)
其中,fi pressure表示水粒子i所受到的压力,fi viscosity表示水粒子i所受到的粘滞力,fi gravity表示水粒子i所受到的重力,ρi表示密度,mi表示质量,pi表示压强,W(xi-xj,h)表示光滑核函数或核函数,h代表光滑核半径。
水粒子在力fi的作用下不断发生位置和速度的变化。为完成粒子的受力计算,必须知道压强场的分布,即粒子i所在位置的压强。Muller采用理想气态方程的修改形式进行水粒子的压强计算:
pi=k(ρi-ρ0)(2)
其中,k是气态常数,在水流模拟中可设置为声音在水中的传播速度,ρi是粒子i的当前密度,ρ0是粒子i的初始密度。
水粒子在力的作用下完成位置和速度的更新,具体步骤如下:
1)计算水粒子的密度ρi
2)计算水粒子所在位置的压强pi
3)计算水粒子的重力fi gravity
4)计算水粒子的压力fi pressure
5)计算水粒子的粘滞力fi viscosity
6)计算水粒子所受到的合力fi
7)计算水粒子加速度ai
8)计算水粒子在下一刻的速度:vi+1=vi+aiΔt
9)计算水粒子在下一刻的位置:xi+1=xi+vi+1Δt
四、计算物体粒子在下一刻的位置和运动状态。
物体所受到的力包括重力和水的浮力,其计算公式如下:
其中,Fj表示物体粒子所受到的合力,fj float表示物体粒子所受到的浮力,fj gravity表示物体粒子所受到的重力。
重力的计算公式如下:
其中,ρsoild表示物体粒子的密度,g表示重力加速度。ρsoild和g均是恒定不变的常数,因此,物体粒子所受的重力fj gravity是一个常量。
物体的浮力来自于水粒子的影响。但是,并不是所有物体粒子都会因水粒子的作用而产生浮力,只有那些处于水粒子支持域内的物体粒子才会受到浮力作用,对于那些不在水粒子支持域内的物体粒子来说,它们只受到重力作用。
根据机械能守恒,当系统不受外力作用时,系统的合力应该为零。对于两相邻粒子i、j来说应满足:
fi+fj=0 (5)
因此,求取每个物体粒子所受浮力时,可先找到所有受该物体粒子影响的水粒子,计算这些水粒子与固体粒子间的作用力,并求和取反,所得的值即为物体粒子所受浮力。即:
其中,fj float表示物体粒子ij的浮力;fij pressure表示水粒子i受物体粒子j影响所产生的压力,它是产生于物体粒子j和水粒子i之间的一个作用力;同理,fij viscosity表示水粒子i受物体粒子j影响所产生的粘滞力;fij gravity表示水粒子i受物体粒子j影响所产生的重力;N表示受物体粒子j影响的水粒子的个数。
公式(6)的物体粒子所受浮力的累加计算可在水粒子状态更新的第4步和第5步中完成。在求得固体粒子的合力后,就可以更新固体粒子的加速度和速度,但此时的速度是平移线速度,记为vj+1。平移线速度并不是可以更新固体粒子位置的最终速度,因为物体在受到水的作用后还会产生绕自身重心自转的运动,因此,每个物体粒子还有一个旋转线速度。物体粒子旋转线速度的求取步骤如下:
1)计算物体的重心,计算方法是将所有物体粒子X、Y、Z三个方向的坐标分别累加并求平均
2)计算每个物体粒子与物体重心的距离,记为rj
3)将物体粒子的速度velj+1与rj求叉乘,得到粒子的旋转角速度wj
4)计算所有物体粒子的平均角速度,得到物体的转动角速度W
5)对每个物体粒子,作rj与W的叉乘运算,得到粒子的旋转线速度vel′j+1
6)在得到物体粒子的旋转线速度后,将粒子的旋转线速度与平移速度相加,得到物体粒子的最终速度vj+1:
vj+1=vel′j+1+velj+1 (7)
物体粒子在力的作用下完成位置和速度的更新,具体步骤如下:
1)计算物体粒子j所受浮力fj float
2)计算物体粒子j的重力fj gravity
3)计算物体粒子所受合力Fj
4)计算Fj作用下的平移加速度aj
5)计算物体粒子的平移速度velj+1
6)计算物体粒子的旋转速度vel′j+1
7)计算物体粒子在下一刻的速度vj+1=vel′j+1+velj+1
8)计算物体粒子在下一刻的位置xj+1=xj+vj+1Δt
五、粒子与障碍物的碰撞检测。
为保证仿真的真实性,必须考虑水及物体与障碍物发生碰撞的情况。由于我们的方法是将水与物体统一化作粒子来处理,只是粒子的种类不同而已,因此,无论是水的运动还是物体的运动,最终都归结为粒子的运动,这使得水和物体与障碍物的碰撞检测最终可简化为粒子与障碍物间的碰撞检测。这里,将障碍物的边界用多边形集合来描述,每一个多边形代表障碍物上的一个面。因此,水流及物体与障碍物的碰撞检测就可转化为粒子与多边形的碰撞检测。
前面我们给出了水粒子和物体粒子的位置状态更新步骤,但该步骤没有考虑粒子与周围环境发生碰撞的情况。实际上,粒子的碰撞检测应发生在粒子位置更新之前,以水粒子为例,应发生在步骤8与步骤9之间。步骤8计算得到的速度是粒子在下一时刻的速度,通过该速度我们可以预计出粒子在下一时刻所能达到的位置,如果该位置与当前时刻粒子位置的连线穿过障碍物表面,则说明如果按照当前计算出的下一时刻的速度来位移粒子,粒子就会与障碍物发生碰撞并进入障碍物体内,这显然不是我们所期望的,因此,必须改变粒子在下一时刻的运动速度。
将粒子和障碍物看作理想刚体,则粒子与障碍物发生碰撞后应做反弹运动,如图6所示。设N为障碍物表面的法向量,A点表示粒子的当前位置,B点表示粒子按照步骤8计算出的下一时刻的速度v′j+1运动一个时间步后所能到达的位置。当A、B两点间的虚线穿透障碍物表面时,若不改变粒子在下一时刻的运动速度,则粒子将与障碍物发生碰撞并进入障碍物体内。此时,让粒子在碰撞点C处(AB与障碍物表面的交点)发生反弹运动,运动方向与N之间的夹角等于AB与N之间的夹角。设E点是B点相对于障碍物表面垂直对称的点,在理想情况下,粒子被反弹后最终应运动到E点,但考虑到实际的碰撞损耗,粒子反弹后只能运动到D点,速度记为vi+1:
vi+1=kdamp(v′i+1×2N(N·v′i+1)) (8)
其中,kdamp表示碰撞后的速度衰减系数。
粒子的加速度与粒子的受力有关,碰撞作用对粒子所产生的作用力与N同向,该作用力产生的加速度分量可表示为aN=αN,其中α表示从碰撞作用力到加速度的转化系数,则碰撞后粒子的加速度为aj+1=aj+aN。
六、基于marching cubes算法的水面重构。
Marching Cubes算法是一种经典的体等值面抽取算法。基于Marching Cubes算法的水面抽取实质是从水体密度场中抽取出水体表面的密度等值面,进而构建出水体表面的拓朴结构,完成水面绘制。
由于Marching Cubes算法要求体数据是在三维空间场呈规则分布的离散数据,而采用SPH方法成的粒子运动数据是非规则分布的,因此,必须首先由非规则分布的粒子数据产生出规则分布的水流密度场数据,即生成规则分布的标量(密度)数据场。具体做法是:将网格节点作为流场中的规则采样点,节点的采样值通过SPH插值来计算。首先,找到以该节点为顶点的所有体元,对于网格体内部的节点来说,每个节点对应8个体元,位于网格体边界的节点对应4个体元,位于网格体4个顶角的节点对应1个体元。其次,对每个节点对应的体元内的粒子进行SPH插值,求出节点处的密度:
其中,j表示与节点i相对应的所有网格单元内的粒子。ρi表示密度,mi表示质量,W(xi-xj,h)表示光滑核函数或核函数,h代表光滑核半径。
为采用Marching Cubes算法从水密度场中抽取出水体表面的密度等值面,还必须确定水面的密度值,作为等值面的阈值。根据水面压强等于大气压强,并根据公式(2)可得到水面的密度如下:
其中,ρsurface表示水面密度,p气表示大气压强,k是气态常量。
关于基于Marching Cubes算法的标量数据场等值面抽取,可参阅相关文献(如唐圣泽出版的《科学计算可视化》一书,以及Marching Cubes算法最初的创始人William E.Lorensen所发表的文献)。
七、采用图形绘制语言,如OPENGL或DIRECTX,将第6步所生成的三角形网格传输到显卡进行水面的绘制和显示。同时,以物体的重心位置为基准,以三角面片的形式绘制出物体。
前一步已经确定了表示水面的三角形网格在空间中的位置,这一步是将该三角形网格绘制到屏幕上。绘制语言可采用OPENGL或DIRECTX。绘制方法是将每一个三角形传输到显卡上进行绘制。此外,具体实施方案“步骤四”中已经计算得到物体粒子的重心,本步骤可以物体的重心位置为基准,用三角面片的形式绘制出物体。
采用三角面片的图形绘制方法这是图形学中常用的绘制方法,这里不再赘述。由于每一帧都进行绘制,因此,最终可以看到的是物体和水面连续运动的动态效果。
Claims (2)
1.一种基于SPH的运动物体与水交互的仿真建模方法,包括以下步骤:
一、对仿真进行初始化,包括粒子属性的初始配置和建立粒子的相邻粒子列表,首先将物体和水进行粒子化,即将物体和水用粒子的形式来表达,建立包含物体粒子和水粒子的粒子集合,同时对集合中的粒子属性进行初始配置:
1)确定物体粒子和水粒子的数量;
2)建立粒子集合的位置数组和速度数组;
3)初始时按照物体和水的形状等间隔分布粒子,并将每个物体粒子和水粒子的初始位置保存到位置数组中,同时将每个物体粒子和水粒子的初始速度设置为零;
4)设置每个粒子的质量、密度、压强常数属性,同时为所有粒子设定统一的粒子支持域半径,即光滑核半径;
5)仿真的初始时间设置为t=0,并定义时间步常量TIME_STEP;
对粒子集合进行初始配置后,为每个粒子建立粒子的相邻粒子列表,即为每个粒子寻找位于其支持域内的所有粒子,列表中包含位于粒子支持域内的所有粒子的索引值;建立粒子的相邻粒子列表通过对粒子所在空间进行网格化处理来加速粒子搜索,具体步骤为:
1)粒子空间网格化
首先对粒子集中的所有粒子进行一次逐一检查,找到这些粒子在X,Y,Z三个方向上的位置坐标的最大值和最小值,通过最大值和最小值之差求出粒子集在三个方向上的分布跨度;然后对每个方向上的分布跨度以光滑核半径的长度为间距进行等间隔划分,最终建立一个以光滑核半径为网格单元长度的三维空间网格;
2)基于网格的支持域粒子搜索
对每个粒子建立粒子的相邻粒子列表,即为每个粒子寻找位于其支持域内的所有粒子,列表中包含位于粒子支持域内的所有粒子的索引值,搜索方法是分别对当前粒子所在网格单元及与该单元上、下、左、右、前、后相邻的单元内的粒子进行搜索,并判断搜索到的粒子与当前粒子的距离是否小于光滑半径,从而决定是否将其加入相邻粒子列表;
二、仿真时间步向前推进一步,对水粒子的相邻粒子列表进行更新;
三、计算水粒子在下一步时间步的位置和运动状态;
四、计算物体粒子在下一步时间步的位置和运动状态,具体步骤为:
1)计算物体粒子j所受浮力fj float
2)计算物体粒子j的重力fj gravity
3)计算物体粒子所受合力Fj
4)计算Fj作用下的平移加速度aj
5)计算物体粒子的平移速度velj+1
6)计算物体粒子的旋转速度vel′j+1
7)计算物体粒子在下一刻的速度vj+1=vel′j+1+velj+1
8)计算物体粒子在下一刻的位置xj+1=xj+vj+1Δt
五、根据计算得到的粒子位置判断粒子与障碍物是否发生碰撞,如果发生碰撞,则改变粒子的运动速率和方向,否则直接执行第六步;
六、基于marching cubes算法构建水面拓朴结构,具体步骤为:
1)由非规则分布的粒子数据产生出规则分布的水流密度场数据,即生成规则分布的标量密度数据场,具体做法是:将网格节点作为流场中的规则采样点,节点的采样值通过SPH插值来计算;
2)确定水面的密度值,作为等值面的阈值;
3)基于Marching Cubes算法进行水面抽取,即从水体密度场中抽取出水体表面的密度等值面,进而构建出水体表面的拓朴结构,完成水面绘制;
七、采用图形绘制语言将第六步所生成的三角形网格传输到显卡进行水面的绘制和显示;同时,以物体的重心位置为基准,以三角面片的形式绘制出物体;
八、判断是否有人为关闭仿真进程的行为或仿真结束时间到,如果有,则仿真停止运行;否则仿真继续,重复执行二~七步。
2.根据权利要求1所述的仿真建模方法,其特征在于,在对仿真进行初始化的步骤中,只建立物体粒子的相邻粒子列表,而将水粒子的相邻粒子列表放在仿真运行阶段建立和更新。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2008101168983A CN101329772B (zh) | 2008-07-21 | 2008-07-21 | 一种基于sph的运动物体与水交互的仿真建模方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2008101168983A CN101329772B (zh) | 2008-07-21 | 2008-07-21 | 一种基于sph的运动物体与水交互的仿真建模方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101329772A CN101329772A (zh) | 2008-12-24 |
CN101329772B true CN101329772B (zh) | 2010-06-02 |
Family
ID=40205567
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2008101168983A Expired - Fee Related CN101329772B (zh) | 2008-07-21 | 2008-07-21 | 一种基于sph的运动物体与水交互的仿真建模方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101329772B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9928638B2 (en) | 2009-12-25 | 2018-03-27 | Intel Corporation | Graphical simulation of objects in a virtual environment |
Families Citing this family (24)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101540060B (zh) * | 2009-04-09 | 2011-11-09 | 清华大学 | 一种基于物理仿真的气流模拟方法及其系统 |
CN104658021B (zh) * | 2009-12-25 | 2018-02-16 | 英特尔公司 | 虚拟环境中的对象的图形模拟 |
CN101944151B (zh) * | 2010-09-30 | 2012-06-27 | 重庆大学 | 分子动力学模拟中壁面边界的模拟方法 |
US8831916B2 (en) * | 2011-05-05 | 2014-09-09 | Siemens Aktiengesellschaft | Simplified smoothed particle hydrodynamics |
CN102402791B (zh) * | 2011-10-24 | 2013-12-18 | 克拉玛依红有软件有限责任公司 | 一种基于gpu的三维流体模拟方法 |
CN103164589A (zh) * | 2011-12-08 | 2013-06-19 | 住友重机械工业株式会社 | 分析装置及模拟方法 |
CN102930087B (zh) * | 2012-10-19 | 2015-01-14 | 湖南大学 | 一种模拟仿真技术中的相邻粒子搜索方法 |
CN103559741B (zh) * | 2013-11-25 | 2016-04-13 | 武汉大学 | 虚拟手术中基于粒子的多相耦合方法 |
CN105389855B (zh) * | 2014-08-26 | 2019-11-01 | 三星电子株式会社 | 对对象进行建模的方法和设备 |
CN105006009B (zh) * | 2015-07-02 | 2020-03-24 | 广东小天才科技有限公司 | 一种2d水体模拟方法 |
CN106484532B (zh) * | 2016-09-19 | 2019-09-10 | 华东师范大学 | 面向sph流体模拟的gpgpu并行计算方法 |
CN108171800B (zh) * | 2016-12-07 | 2021-05-25 | 北京乌有园艺术有限公司 | 创造具有无穷造型的制品的方法 |
CN106446482A (zh) * | 2016-12-14 | 2017-02-22 | 薛永富 | 一种流体模拟系统和方法 |
CN107341849B (zh) * | 2017-07-12 | 2020-03-10 | 大连海事大学 | 一种快速实时烟雾模拟算法 |
CN107689080A (zh) * | 2017-08-21 | 2018-02-13 | 西安华景动力科技有限公司 | 基于三角剖分算法的sph粒子封闭曲面可视化方法 |
CN107633123B (zh) * | 2017-09-13 | 2021-05-18 | 浙江工业大学 | 一种用于光滑粒子流体动力学模拟出血及处理加速的方法 |
CN109960840B (zh) * | 2017-12-26 | 2023-01-13 | 中国科学院深圳先进技术研究院 | 一种交界面气泡的仿真方法、终端设备及存储介质 |
CN109871663A (zh) * | 2019-04-08 | 2019-06-11 | 北京理工大学 | 基于游戏引擎的烟火特效仿真系统 |
CN110838171B (zh) * | 2019-11-04 | 2023-02-21 | 上海海洋大学 | 基于颗粒随机填充的浮力材料的三维模型生成方法 |
CN111783368B (zh) * | 2020-07-15 | 2023-04-28 | 吉林大学 | 一种浅层海水物理参数模拟的方法 |
CN114067030A (zh) * | 2020-08-10 | 2022-02-18 | 北京字节跳动网络技术有限公司 | 动态流体效果处理方法、装置、电子设备和可读介质 |
CN112036064A (zh) * | 2020-08-18 | 2020-12-04 | 中国人民解放军陆军军医大学第二附属医院 | 人颌面部爆炸伤模拟及生物力学仿真方法、系统、介质 |
CN112784471B (zh) * | 2021-01-26 | 2022-09-23 | 郑州轻工业大学 | 水环境可视仿真方法、终端设备以及计算机可读存储介质 |
CN113378435B (zh) * | 2021-06-09 | 2023-02-17 | 卡奥斯工业智能研究院(青岛)有限公司 | 粒子生成方法、装置、设备及存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2005081695A2 (en) * | 2004-02-17 | 2005-09-09 | Pixar | Water particle manipulation |
WO2007114548A1 (en) * | 2006-04-05 | 2007-10-11 | Seoul National University Industry Foundation | Method of simulating detailed movements of fluids using derivative particles |
CN101059821A (zh) * | 2006-04-20 | 2007-10-24 | 独立行政法人海洋研究开发机构 | 仿真方法、仿真程序以及仿真装置 |
-
2008
- 2008-07-21 CN CN2008101168983A patent/CN101329772B/zh not_active Expired - Fee Related
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2005081695A2 (en) * | 2004-02-17 | 2005-09-09 | Pixar | Water particle manipulation |
WO2007114548A1 (en) * | 2006-04-05 | 2007-10-11 | Seoul National University Industry Foundation | Method of simulating detailed movements of fluids using derivative particles |
CN101059821A (zh) * | 2006-04-20 | 2007-10-24 | 独立行政法人海洋研究开发机构 | 仿真方法、仿真程序以及仿真装置 |
Non-Patent Citations (5)
Title |
---|
Matthias Muller等.Particle-Based Fluid Simulation for Interactive Applications.Computer Graphics Proceeding,Annual ConferenceS eries,ACM SIGGRAPH.2003,154-159. * |
Matthias Muller等.Particlel-Based Fluid-Fluid Interaction.Computer Graphics Proceeding,Annual ConferenceS eries,ACM SIGGRAPH.2005,237-244. * |
张华等.水流结构相互作用的粒子法数值仿真.水利水电技术37 9.2006,37(9),44-47. |
张华等.水流结构相互作用的粒子法数值仿真.水利水电技术37 9.2006,37(9),44-47. * |
聂青等.基于流体动力学的建模及实时渲染技术.系统仿真技术及其应用7.2005,7179-183. * |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9928638B2 (en) | 2009-12-25 | 2018-03-27 | Intel Corporation | Graphical simulation of objects in a virtual environment |
Also Published As
Publication number | Publication date |
---|---|
CN101329772A (zh) | 2008-12-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101329772B (zh) | 一种基于sph的运动物体与水交互的仿真建模方法 | |
CN103303433B (zh) | 一种船舶性能虚拟测试系统 | |
CN106683184B (zh) | 网络环境下泥石流灾害过程快速模拟与可视化分析方法 | |
CN101587594B (zh) | 航海模拟器场景中的海浪构网方法 | |
CN106339568A (zh) | 一种基于混合背景场的数值天气预报方法 | |
CN101496028A (zh) | 使用几何推动式模型模拟可变形物体的方法 | |
CN102708227A (zh) | 基于sph算法的洪水溃坝过程仿真方法与仿真系统 | |
CN104317985B (zh) | 一种基于界带有限元和拉格朗日坐标的流体仿真方法 | |
CN105302974A (zh) | 一种基于有限元和时变模态分析的柔性物体实时切割仿真方法 | |
CN101158985A (zh) | 一种超维度河流动力学自适应并行监测的方法 | |
CN113361156B (zh) | 一种基于sph方法的飞机水箱投汲水数值模拟方法 | |
CN101706972A (zh) | 海上溢油的三维可视化算法 | |
CN103942369A (zh) | 一种面向临近空间的智能目标发生方法 | |
CN106934192A (zh) | 一种参数优化的浅水方程模型水体建模方法 | |
CN118013160B (zh) | 一种求解多介质流动问题的守恒型界面处理方法及系统 | |
CN115310325A (zh) | 一种软管锥套空中加油多学科耦合分析框架及方法 | |
Pinkster et al. | A real-time simulation technique for ship-ship and ship-port interactions | |
CN106342298B (zh) | 一种多点爆炸效果的实时生成方法 | |
CN103914872A (zh) | 一种基于简化模态分析法的树动画模拟方法 | |
CN101750616B (zh) | 植被风阻的测量方法及系统 | |
CN104318601B (zh) | 一种流体环境下人体运动仿真方法 | |
CN102867336B (zh) | 一种基于热力学模型的固体燃烧过程模拟方法 | |
CN102147929B (zh) | 一种降雨对地面侵蚀效果的模拟方法 | |
Kim et al. | Computing the convex hull for a set of spheres on a GPU | |
Bauza et al. | Real-time interactive animations of liquid surfaces with Lattice-Boltzmann engines |
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 | ||
C17 | Cessation of patent right | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20100602 Termination date: 20100721 |