方法简介:
此文用sph方法同时对液体和固体进行仿真,这就省去了固体液体的耦合。通过这个方法只要改变粒子的属性,就能实现模拟液体和固体。
对于液体的sph方法模拟请看http://www.thecodeway.com/blog/?p=1557,这里不再赘述
下面介绍对固体的处理:
可形变固体:
这篇文章是在《Point based animation of elastic, plastic and melting objects.》《A unified lagrangian approach to solid-fluid animation.》这两篇文章中方法的基础上改进的,在这两篇文章中,每个粒子相对于不形变部分位移的梯度被用来计算应变,应力和弹性力。
为了计算粒子的弹性力,我们需先计算粒子的弹性势能,这需要根据能量密度来计算,下面给出公式:
是粒子的体积 = 粒子的质量 / 粒子的密度.
粒子i对粒子j的弹性力:
是相对于不形变部分的位移梯度
是粒子i,j的位移差
即等于现在的位移差加上本来的位移差
运用sph的公式
sph方法中核函数的选择对仿真的效果有着很大的影响,特别体现在稳定性和速度上。这里核函数选择为:
固体的塑性和断裂:
如果可形变固体超过了弹性限度,将不能再恢复到原先形状,产生塑性形变,塑性形变也同样有限度,如果两个粒子之间的距离超过了一定限度,将产生断裂。这些都在计算时考虑了进去。每个粒子都储存了自己的弹性限度和塑性限度,这为同时模拟不同材料提供了可能。
刚体:
刚体意味着移动限制在整体的平移和旋转。为了限制刚体的移动,我们必须精确的处理刚体的旋转。为此,我们计算矢量力矩:
是刚体的质心坐标,Fi表示外力作用在粒子i上的力,Fi=Vi*fi Vi是粒子的体积,fi是力密度
作用在刚体上的总力
作用在刚体上的总转矩:
总力和总转矩得到后,即可计算位移和转角,其中角速度的计算公式如下:
I是惯性张量,L是角动量 这样我们就可以通过反复迭代来计算刚体的新位置了。
总结:
这个方法虽然省去了流固耦合这一步,在处理较弱的相互作用时,将气体常量K选的较大时,能阻止流固粒子相互进入.但当相互作用较强时,还是有相互进入现象。而且此方法运算量较大,运行速度在不采取优化的情况下只有两帧每秒。此方法的精确性也很难估计,但能明确的是减小粒子的尺寸和时间步能提高精确性。