Interactive Simulation of Elastic Deformable Materials论文中的公式纠错

1.简介

布料仿真中我们通常将布料离散化为三角网格或四边形网格,并用弹簧质点模型对其建模,最终得到如下的动力学方程:

{x˙=vMv˙=Fexternal+Finternal

根据内力的表示 Finternal 的表示不同,可分别到得到(1)基于惩罚力(penalty force)的动力学方程:
{x˙=vMv˙=FexternalkJTc(x)

(2)基于约束力(constraint force)的动力学方程:
x˙=vMv˙=Fexternal+JTλc(x)=0

其中, J=c(x) c(x) 是约束,例如形如 c(x1,x2)=||x1x2||l0=0 的距离约束。

 这篇文章通过令约束力(constraint force)与惩罚力(penalty force)相等,得到如下动力学方程(称之为 soft constrained dynamics):

x˙=vMv˙=Fext+JTλαλ(x,t)=c(x)βc˙(x)

并用类似于Symplectic Euler的方法进行求解。

2.求 λ 的区间均值

λ [t,t+Δt] (实际上应该是 [tn,tn+Δt] ,所以论文里的积分上下限也写错了,下面的是更正后的)的均值 λ~ 代替 λ , λ~=Δt1tn+Δttnα1(c+βc˙)dt
c(x) tn 处做一阶泰勒展开,得到, c(x)=cn+c˙(ttn) ,则,

λ~=Δt1α1tn+Δttn[cn+c˙|n(ttn)+βc˙]dt

c˙=JTV c 对时间求导,令c˙=c˙|n得,
λ~=Δt1α1(Δtcn+12Δt2c˙|n+βΔtc˙|n)=α1(cn+(12Δt+β)JTnVn+1)

其中, c˙|n=JTnVn+1 我也不知道为什么不是 Vn )令, γ=(12Δt+β)1 ,则,
αλ~=cn+γ1JTnVn+1

最终得到如下方程,
[MJnJTnγαΔt1][Vn+1Δtλ~]=[MVn+ΔtFnγCn]

 实际中,我们会固定一些点,这一般通过令固定点的质量无穷大实现,而计算机中无法表示数学意义上的无穷大,因此使用质量的逆等于0来等价表示。因此通常我们都会让公式只出现质量的逆矩阵 M1 (由于 M 是对角矩阵,求逆耗时很少,而且是once and for all的工作),因此上式改写成如下形式:
 

[IJnM1JTnγαΔt1][Vn+1Δtλ~]=[Vn+ΔtM1FnγCn]

注意,在我的实际操作中,求解这个矩阵只能用LU分解,Eigen库的Conjugate Gradient和SimplicialLDLT都会导致结果不正确。

3.Schur complement

根据上面得到的正确系数矩阵,可得到其舒尔补(Schur complement)为,

Sn=JnM1JTnΔt1γα

Snλ~=Δt1JnVnJnM1FnγΔt1Cn

其中, Fn 表示非约束力之外的力。最终得到速度和位置的更新公式:
{xn+1=xn+Δtvn+1vn+1=vn+hM1Fn+hM1JTnλ~

如果使用原来错误的公式,仿真一块两点固定的布料时,布料的右侧会出现ghost force:不正常的被向前拉。而使用纠正后的公式表现正常。如下图所示:
公式纠正前后效果图对比

4.总结

  1. 本文纠正了论文Interactive Simulation of Elastic Deformable Materials公式推导的错误,给出了写程序时应该使用的求解方法建议。
  2. 有关基于约束的动力学(constrained dynamics)的推导和求解,如果有人感兴趣可以在下面留言,有机会我会介绍。
  3. 本文所讲的论文(06年发表)提出了soft constraint(这篇论文里称之为regularized constraint),15年,16年都有论文重新讲述soft constraint的求解,以及如何应用到PBD(position based dynamics)上。同样的,感兴趣的可以在下面留言,有机会我会介绍。
  4. 在实际求解中我发现对于不同的稀疏系数矩阵,需要使用不同的求解方法(我用的是Eigen),否则得不到解,具体原因之后会详细给出。
  5. 截图使用的仿真环境为GitHub上PBD原作者公布的源代码:https://github.com/InteractiveComputerGraphics/PositionBasedDynamics.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值