之前发现,牛顿法在迭代的过程中容易收敛到局部。现在想通过减少变量的个数(不求解内部点的位置)来避免此种情况。
主要参考Efficient Simulation of Secondary Motion in Rig-Space这篇论文的方法。
方法的基本思路是,在解算的过程中,不考虑内部点的加速度,认为内部点始终处于平衡状态。于是内部点的位置唯一由表面顶点决定。既然是唯一决定,就可以考虑用某种方法近似这种决定方式。其中一种方法,就是用表面点的线性加权近似,这种方法本质上与线性蒙皮一样,因此称为体积蒙皮。
体积蒙皮的关键是要求解权重。求解权重的过程中要解一个非负最小二乘的问题。发现python数学库scipy提供了这个问题的函数nnls。因此可以尝试用这个去写。
当前首要任务是,实现static solve的模拟。
当前的一个疑问是,static solve在计算顶点的位置时,不考虑惯性力ma,求解出的模型岂不是就是初始状态?为什么还能动呢?
明天的任务是看看Vega的interactiveDeformableSimulator工程,这个程序提供static solve的求解方法,看看这个方法具体的做法。