基于位置的动力学
本文最后更新于:2021年4月7日 晚上
算法描述
物体的动力学可由 $N$ 个顶点和 $M$ 个关于顶点位置的约束进行描述.第 $i$ 个顶点的质量、位置、速度分别记作 .第 $j$ 个约束可能为等式或不等式,记作
我们用符号 $\succ$ 来表示 $=$ 或 $\ge$,并且令 ,则第 $j$ 个约束可简记为 .
基于位置的动力学(Position Based Dynamics)简称为PBD.该算法会先计算出每个顶点的初始预测位置 ,然后尝试移动 使其满足所有约束
PBD的具体算法可由以下伪代码表示.

求解器
在PBD伪代码中,第8至第10行是求解器的迭代求解.这里的函数
是方程/不等式组
的一个非线性Gauss-Seidel求解器.求解器 会对约束 依次进行一阶线性化求解.每次求解完 ,求解器会当即更新 的值,使之影响对 的求解.下面我们将具体介绍 的求解方法.
如果约束是一个等式,我们希望找到一个 使得 ,其中 .对其进行一阶线性化可得
上述方程的一般会有无穷个解.如果我们将解 限制在
的方向上,即令
我们就可以求出一个特解
$C_{j}$ 的求解方法,就是用 来更新原来的 .因此, 函数可用伪代码表示成
特定约束
拉伸
拉伸约束为
其中 $d$ 代表初始长度。计算梯度,可得
于是
SDF碰撞
SDF碰撞约束为
矫正量
例子:球面SDF碰撞
给定半径为 $r$ 的球面,它的SDF碰撞约束为
矫正量
数值微分的计算
我们可以使用四面体技巧对 SDF 数值微分的计算进行优化。设
考虑求和
由此可以得到
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!