流体模拟(二)
SPH算法的粒子受力分析:
SPH算法的基本设想,就是将连续的流体想象成一个个相互作用的微粒,这些粒子相互影响,共同形成了复杂的流体运动。其实现的原理则是我们在初始空间里创建多个粒子,每个粒子拥有自己的特定属性。如位置,半径,所受重力黏力等等。因此在下一帧运动的时候,每个粒子检索周围一定范围内的粒子,根据它们的位置(即计算出周围的粒子和当前粒子的间隔)重新计算黏力和压力,以及每个粒子都受重力影响,根据力计算新的加速度和速度,然后每一帧重复上述计算。因此我们便可以给所有粒子赋值初始位置,粒子就能自动的开始动画直到最后平稳下来。
对于每个单独的流体微粒,依旧遵循最基本的牛顿第二定律:
m = (2.1)
这是我们分析的基础,在SPH算法里,流体的质量是由流体单元的密度决定的,所以一般用密度代替质量:
= (2.2)
这里的的作用力F的量纲发生变化,正常情况下,“力”的量纲dimF=L,而在这里dimF=,后面的分析都是用这个量纲的“作用力”,这一点一定要注意。作用在一个微粒上的作用力由三部分组成:
=++ (2.3)
其中称为外部力,一般就是重力:
= (2.4)
是由流体内部的压力差产生的作用力,试想一下在水管中流动的液体,进水口区域的压力一定会比出水口区域大,所以液体才会源源不断的流动,数值上,它等于压力场的梯度,方向由压力高的区域指向压力低的区域:
=− (2.5)
是由粒子之间的速度差引起的,设想在流动的液体内部,快速流动的部分会施加类似于剪切力的作用力到速度慢的部分,这个力的大小跟流体的粘度系数μ以及速度差有关:
= (2.6)
带入公式ρ =,可以得到:
(2.7)
加速度则为:
(2.8)
上述就是粒子的运动学计算方法了。