SPH流体模拟及液面重构问题
关于流体特效模拟算法的简单描述,前提部分。
目前动画领域内的流体模拟主要是拉格朗日法无网格法和欧拉网格法,两种方法更有利弊。
我研究的主要是拉格朗日法中的SPH模型,即光滑粒子流体动力学模型。
粒子方法非常适合模拟大形变流体、液滴飞溅等复杂场景。
现今SPH算法已经有了很多改进,包括对流体真实感、时间复杂度以及并行方案的改进等,在去年的SIGGRAPH,清华大学发表了一篇关于SPH流固耦合的文章,时至今日SPH已经在很多领域进行了研究和应用。
我准备实现的是PCISPH(Predictive-Corrective Incompressible SPH),但是,在此之前,先进行了WCSPH(Weakly compressible SPH for free surface flows)的实现。
实现过程参考论文:Weakly compressible SPH for free surface flows . Markus Becker Matthias Teschner . 2007
算法如下(出自PCISPH论文):
SPH算法主要在于计算每个粒子的状态,如密度、压力、粘性力等,然后根据计算的合力以及牛顿第二定律推出粒子加速度,进而求出粒子在当前时间步下的位移。
由于粒子是离散的,流体是连续的,所以SPH使用插值核函数进行粒子状态的估算,针对不同参数可以选择适合的核函数:
对于密度可以使用poly6核函数:
压强使用spiky核函数及其梯度方程:
粘性力使用polynomial核函数及其拉普拉斯形式:
WCSPH在实现时需要注意时间步长,如果过大会导致粒子爆炸。
在实现时,可以使用OpenGL进行视图的显示,效果如下:
PCISPH对WCSPH的最大根据就是迭代的时间步,其总体计算效率可以高出WCSPH一个数量级。
这里关于SPH进行了一些简单叙述,不过仅仅作为笔记,以备之后的深入研究。
液面重构部分会在之后提及。