简介

      一个模拟变形物体最简单额方法就是将其表示为弹簧质点系统(Mass Spring Systems),因为方法简单,这个框架对于学习物理模拟和时间积分的各种技术都比较理想。一个弹簧质点包含了一系列由多个弹簧连接起来的质点,这样的系统的物理属性非常直接,模拟程序也很容易编写。

      但是简单是有代价了:

1.物体的行为依赖于弹簧系统的设置方法;

2.很难通过调整弹簧系数来得到想要的结果;

3.弹簧质点网格不能直接获取体效果。

      在很多的应用中这些缺点可以忽略,在这种场合下,弹簧质点网格是最好的选择,因为够快够简单。

      今天首先说明一下Mass Spring Systems的理论基础,然后来实现绳子的real-time模拟。

物理模型

      假设有N个质点,质量为mi,位置为xi,速度为vi , 1<i<N.

      这些质点由一组弹簧S连接,弹簧参数为(i,  j, lo, ks, kd). i,j 为连接的弹簧质点,lo为弹簧完全放松时的长度,ks为弹簧弹性系数,kd为阻尼系数,由胡科定律知弹簧施加在两顶点上的力可以表示为:

         由受力守恒知 fi+fj = 0. fi和fj的大小和弹簧伸长成正比关系。

        对于阻尼的计算,

          大小和速度成正比,并且符合力守恒,则对于一个质点,其受力方程为:

模拟

在模拟算法中,牛顿第二定律是关键,f = ma。在已知质量和外力的情况下,通过 a=f/m 可以得到加速度,将二阶常微分方程写成两个一阶方程:

可以得到解析解:

初始状态为 v(to) = vo, x(to)=xo.

积分将时间t内所有的变化加和,模拟的过程就是从 to 开始不断地计算 x(t) 和 v(t),然后更新质点的位置。

最简单的数值解法就是利用有限的差分近似微分:

其中delta t 是为时间步长,t为帧号,带入之前的公式得:

这个就是显式的欧拉解法,下一时刻的状态完全由当前状态决定。

整个过程的伪代码如下:

// initialization  forall particles i          initialize xi , vi and mi  endfor // simulation loop  loop         forall particles i                fi ← fg + fcoll + ∑ f(xi , vi , x j , v j )         endfor         forall particles i              vi ← vi +