一种混合流体相变动画生成方法及装置与流程

文档序号:16634041发布日期:2019-01-16 06:50阅读:262来源:国知局
一种混合流体相变动画生成方法及装置与流程

本发明涉及计算机图形学中的物理仿真,包括基于物理的流体模拟、相变模拟和流固耦合模拟领域,涉及拉格朗日流体模拟方案中的sph(光滑粒子动力学)方法,采用基于sph的混合流体模拟方法与流体相变的结合,进行高精度混合流体相变模拟的研究。



背景技术:

在计算机图形学中的流体模拟领域,多种流体的混合模拟越来越受到关注。多种流体混合模拟主要分为可互溶流体和不可溶流体的模拟。不可溶流体模拟主要集中在不同流体液面的分离,不同流体互不混溶,流体液面清晰可见。而在可溶流体模拟中,各个流体之间没有明确的液面,流体互相混合。在流体模拟领域,基于拉格朗日的sph流体模拟方法具有很好的流体细节表现效果,尤其适合模拟高细节表现的流体动画,最近几年,基于sph方法的混合流模型被提出来,该方法采用体积分数(volumefraction)进行混合流体模型的构建。

相变模拟方法同样是一个被广泛关注的领域,其主要用于模拟物质的融化和凝固等现象。相变,如水的凝固和冰块的融化等,是一个十分常见的物理现象。自然界中,每种物质都存在一个熔点,当温度升高时,物质会熔化,温度降低时,物质会凝固,相变模拟即是根据热传导方程进行熔化和凝固现象的模拟。在自然界中,溶液等混合物没有固定熔点,如酒精溶液的熔点介于水和酒精之间,与此类似,在水中加入盐会导致水的凝固点降低。

所以,不同流体混合后,溶液的凝固点会发生改变,本发明根据此现象进行相关方程的改进,提出了一种精确的混合流体相变动画生成方法及装置。



技术实现要素:

本发明提供了一种混合流体相变动画生成方法及装置,本发明通过计算不同流体互溶后的熔点、热扩散常数等参数,可以精确的模拟不同熔点和热扩散常数下的流体的温度扩散和相变过程,详见下文描述:

一种混合流体相变动画生成方法,所述方法包括:

对混合流模型进行定义、及对混合流体流固耦合进行模拟,进而计算出粒子的新位置、体积分数、混合热扩散常数、以及混合熔点;

根据计算出的粒子的新位置、混合热扩散常数、混合熔点,进行温度扩散计算和粒子状态的更新,通过粒子之间的温度差,采用热扩散方程计算粒子的温度变化,然后根据混合熔点进行相变模拟;

通过新位置计算出混合流固表面,通过新的体积分数计算出混合流固表面上的体积分数,并且根据粒子更新后的状态区分流体表面和固体表面;

将流体表面和固体表面的mesh以文件的形式进行输出,用于动画帧的离线渲染。

所述混合热扩散常数具体为:

其中,下标i代表粒子的编号,αk为流体k的体积分数,cmi和ck分别为混合热扩散常数和流体k的热扩散常数。

所述混合熔点具体为:

其中,tmi和tmk分别为混合熔点和流体k的熔点。

所述热扩散方程具体为:

其中,ti为粒子i的温度,tj为粒子j的温度,t为时间,ci为粒子i的混合热扩散常数,mj为粒子j的质量,pj为粒子j的密度,w为光滑核函数,▽2代表求解光滑核函数的拉普拉斯形式,xi为粒子i的位置,xj为粒子j的位置,h为光滑核半径。

所述通过新位置计算出混合流固表面,通过新的体积分数计算出混合流固表面上的体积分数具体为:

对于每一个位置x,都存在体积分数αkx,该体积分数的值由附近粒子的体积分数决定,当附近不存在粒子时,该值为零,计算方程如下:

其中,αkj为相邻粒子j中流体k的体积分数;

隐式表面计算完成后,根据marchingcubes算法,计算等值面处的体积分数:

其中,v为等值面的位置,p1和p2为网格单元的两个顶点位置,αkp1和αkp2为两个顶点所对应的体积分数值。

一种混合流体相变动画生成装置,所述装置包括:

流固耦合模拟模块,用于计算多流体混合模拟和流固耦合;

温度扩散和相变模块,用于计算粒子之间的温度差,采用热扩散方程计算粒子的温度变化,然后根据混合熔点进行相变模拟;

混合流固表面计算模块,用于计算流体和固体的隐式表面,并生成表面mesh,将生成的表面体积分数信息,用于不同流体的渲染;

流固表面输出模块,该模块可以将流体和固体的表面mesh以文件的形式进行输出,用于动画帧的离线渲染。

本发明提供的技术方案的有益效果是:

1、本发明通过计算不同流体互溶后的熔点、热扩散常数等参数,使得混合流体模拟可以精确的模拟不同熔点和热扩散常数下的流体的温度扩散和相变过程,实现了混合流体模拟的相变操作;

2、不同流体互溶后其熔点、热扩散常数等参数会发生变化,本方法可以精确的捕捉这种变化,并在模拟过程中表现出来;

3、本发明还提出了一种生成混合流体自由表面的重构方法,该重构方法可以计算流体自由表面携带的体积分数信息,实现了对混合在一起的不同流体的液面进行重构;

4、最后,本发明提供了一个混合流体相变动画生成装置,可用于混合流相变动画的生成,满足了实际应用中的多种需要。

附图说明

图1为一种混合流体相变动画生成方法的流程图;

图2为流体动画帧的示意图;

图3为一种混合流体相变动画生成装置的结构示意图。

具体实施方式

为使本发明的目的、技术方案和优点更加清楚,下面对本发明实施方式作进一步地详细描述。

在本方法中,通过构建混合流体模型,使用体积分数表示不同流体间的混合互溶。在模拟过程中,每个流体粒子除了携带流体的属性,如压强、位置、密度等,还携带温度信息,粒子间的温度扩散通过方程进行计算,除流体粒子外,边界等固体同样进行温度扩散的计算。在本发明实施例中,密度分为粒子的计算密度ρ、单一流体的标准密度(restdensity)ρk和粒子的混合标准密度ρm,标准密度ρk是流体的固有属性,如水的标准密度可设为1000.0kg/m3。在下文中,粒子的计算密度统称为密度,单一流体的标准密度统称为流体标准密度,粒子的混合标准密度统称为混合标准密度。

在本方法中,每种流体都拥有一个固定的熔点,每个流体粒子均存储一个熔点信息,在进行流体混合模拟过程中,如果流体为可混溶的,则混合流体粒子的熔点等属性的数值会重新计算。模拟过程中,流体的状态会通过温度表示,当流体粒子的温度大于粒子熔点时,其表示为液体粒子,反之为固体粒子。如果流场中包含固体,则模拟过程中,还包括流固耦合的计算。在下文中,粒子的熔点均被称为混合熔点tm,流体的熔点均被称为流体熔点tmk,热扩散常数同样如此,分别为混合热扩散常数cm和流体热扩散常数ck。

本方法可以在模拟结束后构造混合流体的液体自由表面和固体表面,构造的液体自由表面和固体表面包含了体积分数信息,该体积分数信息可用于区分不同的流体,不同的流体可以使用不同参数进行渲染。最后,重构的流体液面和固体表面将以mesh(网格)的形式输出。

实施例1

为实现上述目的,本发明实施例提出了一种基于sph的混合流体相变动画生成方法(即包括模拟部分与重构部分),以此实现混合流体相变模拟及流体表面构造,参见图1,该生成方法包括以下步骤:

101:对混合流模型进行定义、及对混合流体流固耦合进行模拟,其中,模拟过程包括:混合流模拟和刚体模拟两部分,进而计算出粒子的新位置、体积分数、混合热扩散常数、以及混合熔点等参数;

具体实现时,当存在固体时,计算流体与固体间的相互作用力,进而更新固体的数据;固体不存在时,可以忽略刚体的计算部分。

102:根据步骤101计算出的粒子的新位置、混合热扩散常数、混合熔点等参数,进行温度扩散计算和粒子状态的更新,通过粒子之间的温度差,采用热扩散方程计算粒子的温度变化,然后根据混合熔点进行相变模拟;

103:混合流固表面计算并生成mesh,其中,混合流固表面计算包括:对位置信息和体积分数信息的计算;

即,通过步骤101提供的新位置和新的体积分数计算出混合流固表面,并且根据步骤102计算的粒子更新后的状态区分流体表面和固体表面。

104:表面mesh输出,将流体表面和固体表面的mesh以文件的形式进行输出,用于动画帧的离线渲染。

其中,步骤101进行混合流的流固模拟计算,包括:混合流体模拟和刚体模拟,具体步骤如下:

混合流模拟部分,首先需要进行流体参数的定义,包括:流体块的大小和位置、流体密度、加速度、质量等,还包括用于混合流计算的体积分数等,用于相变计算的流体温度、流体熔点等,此外还需要定义流场的边界。

流体参数定义完成后,开始进行流体模拟迭代。在通常的sph模拟过程中,每次迭代需要计算流体粒子密度、速度、压强等参数,首先需要计算粒子所携带的密度,然后计算流体所受外力和粘性力,最后计算粒子的压强和压力,根据合力计算sph粒子的速度变化率,更新粒子坐标。在混合流模型中,还需要计算每个粒子的混合熔点和混合热扩散常数等参数,并在计算压强和压力前计算体积分数,然后缩放更新每个粒子的体积分数。

刚体模拟部分,对于每个刚体粒子,计算流体粒子受到的刚体粒子的作用力,如压力和粘性力,作用力的反向力即为刚体粒子所受的力,所有刚体粒子所受力计算完成后,计算所有粒子的合力和转矩,根据合力和转矩更新刚体状态。

步骤102在步骤101的基础上进行温度扩散的计算和相变模拟,其中,步骤101计算出了粒子新的位置、混合参数(标准密度和热扩散常数等)、体积分数,步骤102根据新的位置等参数计算粒子的温度变化,并更新粒子状态,具体步骤如下:

首先,进行温度扩散的计算,对于每个粒子,包括:流体粒子和刚体粒子,通过热传导方程计算出每个粒子的温度变化,然后更新粒子的温度。温度更新完成后,根据每个粒子的混合熔点更新粒子的状态,状态包括:液态和固态两种。

步骤103在步骤101和步骤102的基础上进行混合流固表面的计算并生成mesh,其中,步骤101计算出了粒子新的位置和体积分数,步骤102计算出了粒子新的状态(固体或液体),步骤103根据新的位置和粒子状态生成mesh,并且根据粒子的体积分数计算出mesh顶点的体积分数,具体步骤如下:

由于混合流的每个粒子可能具有不同的体积分数,而体积分数表达了该粒子所表示的流体的种类,所以需要一种方法,构造混合的流体表面。通常的流体表面的构造方法,只能构造出单一类型流体的流体表面,本发明实施例提供了一种可以表示不同体积分数的自由表面重构方法。

首先需要计算出流体的隐式表面,计算过程中,对于每个节点使用差值方程计算出节点的体积分数,然后,采用marchingcubes(步进立方体)算法计算表面mesh,计算mesh顶点的同时计算顶点所在位置的体积分数。

步骤104在步骤103的基础上进行表面mesh的输出,具体步骤如下:

在完成自由表面后,可以将表面数据以文件的形式输出,用于动画的渲染。其中,除了输出网格数据外,还包括不同流体的属性,可以以颜色区分不同的流体成分,颜色通过体积分数进行计算。综上所述,本发明实施例通过上述步骤101-步骤104计算了不同流体互溶后的混合熔点、混合热扩散常数等参数,可以精确的模拟不同熔点和热扩散常数下的流体的温度扩散和相变过程,且可以计算流体自由表面携带的体积分数信息,实现了对混合在一起的不同流体的液面进行重构。

实施例2

下面结合图1、具体的计算公式对实施例1中的方案进行进一步地介绍,详见下文描述:

201:混合流体模型定义及混合流体流固耦合模拟;

当存在固体时,计算流体与固体间的相互作用力,进而更新固体的数据,固体不存在时,可以忽略刚体计算部分。

定义基于sph的混合流模型,计算混合流流固耦合模拟。

基于物理的混合流体模型定义如下:

其中,k代表不同属性流体,um为每种流体k的平均速度,umk为流体k的相对速度,αk为流体k的体积分数,pmix为流体的混合压强,ρm为流体的混合标准密度,g为重力加速度,tm为粘性张量,tdm为相对运动张量。

混合流体流固耦合的模拟步骤如下:

初始化sph粒子的所有属性,粒子分为液体粒子和刚体粒子,两者定义的属性相同,属性用于混合流模拟计算与相变模拟。定义的属性包括:对于每个流体粒子定义粒子的半径、密度、质量、压强、混合粘性系数、位置、速度、加速度、混合标准密度、温度、混合热扩散常数、以及混合熔点,对于每种流体定义流体标准密度、运动粘性系数、流体熔点、流体热扩散常数,对于每种流体的每个粒子定义体积分数、相对速度(driftvelocity)。

计算流体粒子的密度ρ,并且根据压强公式计算粒子的混合压强,粒子的密度计算公式和压强公式可以定义为如下公式:

其中,mj为粒子j的质量,ρi为粒子i的密度,κ和γ为常数,ρmi为粒子i的混合标准密度,w为光滑核函数,并且wij=w(xi-xj,h),xi为粒子i的位置,xj为粒子i的相邻粒子j的位置,h为光滑核半径。

计算完密度和压强后,进行相关混合属性的更新,包括:混合标准密度ρm、混合运动粘性系数μm、混合熔点tm、混合热扩散常数cm,计算公式如下:

其中,下标i代表粒子的编号,αk为流体k的体积分数,ρmi和ρk分别为混合标准密度和流体k的标准密度,μmi和μk分别为混合粘性系数和流体k的粘性系数,tmi和tmk分别为混合熔点和流体k的熔点,cmi和ck分别为混合热扩散常数和流体k的热扩散常数。公式(5)公式(6)和公式(8)中带有下标m的变量为混合变量,代表粒子的混合属性,带有下标k或k′的变量代表流体的固有属性。

计算混合流体的相对速度umk,公式如下:

其中,τ和σ为常数,τ可以为10-8~10-6,σ可以为10-4~10-2,k和k′为流体编号,a为加速度,qk代表流体k的质量分数,ρk为流体k的标准密度,ρm为流体k的混合标准密度,pj为粒子j的密度,pk为流体k的压强,可以假设pk=pmix

计算并更新每种流体的体积分数αk,对于每个粒子,每种流体k的体积分数变化量为:

其中,mj为粒子j的质量,ρj为粒子j的密度,αkj为粒子j中流体k的体积分数,umkj为粒子j中流体k的相对速度,wij为光滑核函数。

新的体积分数计算完成后,需要对每个粒子的体积分数进行缩放处理,保证流体k的体积分数和为1,体积分数更新完毕后,同时需要更新粒子的压强pmix,压强变化量的计算公式如下:

求解混合流运动方程,计算流体粒子的运动状态,更新粒子所受加速度和受力方程如下:

其中,mj为粒子j的质量,g为重力加速度,为粒子i的压强,wij为光滑核函数,ρj为粒子j的密度,μi为i的运动粘性系数,umj为粒子j的速度,xi为粒子i的位置,ρk为流体k的标准密度,αkj为粒子j中流体k的体积分数,umkj为粒子j中流体k的相对速度。

以上步骤只应用于流体粒子,但在计算流体粒子所受力时,需要将流体粒子的反作用力应用于刚体粒子,即:

fr=-ff(21)

fr为刚体粒子,ff为流体粒子。

计算完所有粒子的加速度和力后,更新粒子的位置,对于流体粒子直接更新每个粒子的位置:

xi=xi+viδt(22)

对于刚体粒子,需要首先计算刚体所受合力和转矩,然后更新刚体粒子位置:

其中,为刚体总体受力,fri为刚体粒子i的受力,为刚体所受转矩,xi为粒子i的位置,xcm为刚体质心的位置。

202:温度扩散计算和相变模拟,通过粒子之间的温度差,采用热扩散方程计算粒子的温度变化,然后根据混合熔点进行相变模拟(即,通过步骤201-步骤202实现了模拟的过程);

温度扩散需要计算每个粒子的温度变化,包括:流体粒子和刚体粒子。温度扩散方程如下:

其中,ti为粒子i的温度,t为时间,ci为粒子i的混合热扩散常数,mj为粒子j的质量,pj为粒子j的密度,wij为w(xi-xj,h)。

在更新每个粒子的温度后,需要对粒子的状态进行处理。当温度由熔点以下上升到熔点以上时,将粒子状态由固体变为液体,当粒子温度由高于熔点下降到低于熔点时,将粒子状态变为固体粒子。此外,还需要处理冰块的合并和分裂等,可将固体粒子按冰块进行分组,当两组粒子距离小于阈值时,合并冰块;当同组的两部分粒子距离变大时,分裂冰块。

203:混合流固表面计算并生成mesh,通过粒子携带的体积分数等属性,计算表面数据,并生成mesh(即,通过步骤203实现了重构的过程);

该步骤203即为一个重构方法,该重构方法在步骤202的模拟结果基础上,在计算流体隐式表面的同时计算表面携带的体积分数信息。

本发明实施例提供的混合流体液面重构方法可以与各种隐式表面计算方法相结合,例如:可以采用有向距离场方法进行计算。

其中,粒子集自由表面的隐式函数如下:

其中,φ(x)表示位置x处的隐式函数值,ri为粒子i的半径,h为构造隐式表面的邻域半径,k为一个函数值平滑下降到零的核函数,k(s)=max(0,(1-s2)3)。

对于每一个位置x,都存在体积分数αkx,该体积分数的值由附近粒子的体积分数决定,当附近不存在粒子时,该值为零,计算方程如下:

其中,αkj为相邻粒子j中流体k的体积分数,mj为粒子j的质量,pj为粒子j的密度,w为光滑核函数,xj为粒子j的位置,h为光滑核半径。

隐式表面计算完成后,采用marchingcubes算法生成自由表面数据,并通过以下方程计算等值面处的体积分数:

其中,v为等值面的位置,p1和p2为marchingcubes网格单元的两个顶点位置,αkp1和αkp2为两个顶点所对应的体积分数值。

204:表面mesh输出,将流体和固体的表面mesh以文件的形式进行输出,用于动画帧的离线渲染。

通过本发明实施例提供的表面构造方法,可以计算每个顶点携带的体积分数信息,在输出mesh时,可以将体积分数转换成顶点的颜色值。如图2(b)所示为一个流体动画帧,由图2(a)构造生成。具体地,图2(a)经过步骤203的液面重构算法生成了mesh,在本步骤204中,输出该mesh,并且经过离线渲染器进行渲染,生成了如图2(b)所示的一帧图像。通过上述操作可以生成连续的动画帧,这些帧构成了一个完整的流体动画。

综上所述,本发明实施例通过上述步骤201-步骤204可以精确的模拟不同熔点和热扩散常数下的流体的温度扩散和相变过程,实现了对混合在一起的不同流体的液面进行重构,进而生成了动画。

实施例3

下面结合图2对实施例1和2中的方案进行可行性验证,详见下文描述:

本发明实施例基于sph方法进行混合流体的相变模拟。虽然最近几年混合流体模拟有了很多的相关研究,但很少有关于混合流体的相变研究,本发明实施例提供的混合流体相变的方法可以很好的将混合流模拟和相变模拟结合,进而生成具有更高精度的流体动画,补充混合流体相变模拟方法研究的缺失。同时,本发明实施例还包括混合流体的表面生成方法,该方法可以生成高质量的、平滑的混合流体表面。

如图2所示,本发明实施例采用体积分数表示不同流体的混溶,体积分数表示粒子中不同流体的占比,实验中采用不同颜色标记流体,互相混合的流体其颜色也会混合在一起,颜色由体积分数进行计算。图2(a)所示为粒子视图下的流体模拟,图中每个粒子都携带不同的体积分数,代表不同的流体混合在一起,从图中可以看到,粒子分为液体粒子和固体粒子,具有不同的颜色,其中,部分固体粒子受热熔化,熔化的固体粒子与液体粒子混合并互溶,呈现出扩散的效果,此外,少量的液体粒子溅射到固体表面后会凝固;图2(b)是图2(a)经液面重构与渲染后的流体视图,图中mesh的每个顶点均携带不同的颜色值,该值由体积分数计算,经过这种方法生成的mesh可以呈现出液体混合渐变的效果,在本方法中,mesh最后输出到数据文件中。

图2中的(a)和(b)为相同场景下的同一动画帧,其表示的流体模拟场景为:固体和液体互相混合,固体与液体为两种属性不同的物质,具有不同的初始温度和熔点,液体总体温度高于固体,所以最终固体会完全融化,并且融化的固体溶液会与液体混合。实验过程中,固体会吸收液体的热量,并升温融化,液体会降低温度,并且少量液体接触到固体后会凝固。当这两种不同的液态物质混合后,一些属性会发生变化,如熔点、热扩散系数、密度等。变化的属性会影响模拟计算的结果,如热扩散常数影响融化速度,本发明实施例可以精确的计算这种变化,如图(b)所示,混合的液体与原液体具有不同的热扩散常数。

实施例4

如图3所示为本发明提供的混合流体相变动画生成装置的结构示意图,该装置与以上实施例1和2中的混合流相变模拟方法相对应,该模拟装置包括:

流固耦合模拟模块,包括混合流体模拟单元和流固耦合单元。

此流固耦合模拟单元用于计算多流体混合模拟和流固耦合,包括:构建粒子邻域搜索的数据结构、初始化sph粒子的所有属性、计算粒子密度和压强、更新混合参数、计算体积分数变化、更新体积分数和压强、计算混合流运动方程、计算粒子新位置、计算刚体受力和转矩,并更新位置。

温度扩散和相变模块,该模块通过计算粒子之间的温度差,采用热扩散方程计算粒子的温度变化,然后根据混合熔点进行相变模拟。

混合流固表面计算模块,该模块用于计算流体和固体的隐式表面,并生成表面mesh,此外,该模块将生成表面的体积分数信息,用于不同流体的渲染。

流固表面输出模块,该模块可以将流体和固体的表面mesh以文件的形式进行输出,用于动画帧的离线渲染。

综上所述,本发明实施例设计的装置可以用于流体动画的生成,尤其是混合流体动画及混合流体的相变动画的生成。通过设定流体相关参数,装置可以输出动画每一帧的mesh,生成的mesh可以进行离线渲染,进而得到高质量的流体动画。

具体实现时,上述模块和单元的执行主体可以为单片机、电脑、微控制器等具有计算功能的硬件,本发明实施例对此不做限制。

本发明实施例对各器件的型号除做特殊说明的以外,其他器件的型号不做限制,只要能完成上述功能的器件均可。

本领域技术人员可以理解附图只是一个优选实施例的示意图,上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。

以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1