【文献导读】XPBD: Position-Based Simulation of Compliant Constrained Dynamics

作者:Miles Macklin & Matthias Muller
单位:NVIDIA
时间:2016
在这里插入图片描述

前言

本文要解决的主要问题是PBD中的刚度系数的迭代次数依赖问题。具体来说,仿真效果依赖于时间步长,或者说迭代次数。这会在以下两个方面造成问题:

  1. 参数(也就是刚度系数)与迭代次数有关。而且刚度系数是全局的,假如场景内同时出现多种材料(比如刚体和软体混合),就很难调整参数。
  2. 迭代次数的影响是非线性的,很难去手动调整参数。(迪士尼定律:参数与最终效果最好成线性关系,以利于艺术家去调整)

为了解决该问题,本文提出了一种新的约束公式。该约束公式与弹性势能的概念对应。公式的推导基于隐式时间积分和总拉格朗日乘数。

背景

让我们先回顾一下PBD:
PBD针对每个粒子,移动其位置以满足粒子间约束。下面的施公式给出了每个粒子应该移动的方向和距离。这有些类似梯度下降法。移动的方向为约束的梯度方向
在这里插入图片描述
而其中s控制了应该移动的步长
在这里插入图片描述

除了s以外,k是刚度系数,为用户给定的参数,M则是粒子质量所决定的一个系数。k在0到1之间取值。

下标i代表第i次迭代,j代表第j个约束。这个公式对每个粒子都成立,所以我们就不标注粒子的下标了。

关键问题就在于这个kj。我们看到k具有下标j。这代表它和迭代次数是有关的。但是用户控制的参数与迭代次数有关,这就造成了很难给定合适的参数。

XPBD正是为此而提出的新算法。它的算法流程如下:
在这里插入图片描述

公式(17)为
在这里插入图片描述

公式(18)为
在这里插入图片描述

我们对比PBD,发现其算法只是在一个方面进行了修改:也就是公式(18)。这就是XPBD的核心所在。

刚度系数k不见了,取而代之的是新的系数 α j ~ \tilde{\alpha_j} αj~

这个新的系数 α j ~ \tilde{\alpha_j} αj~是融入到之前的缩放因子s当中的。

很显然,当 α j ~ = 0 \tilde{\alpha_j}=0 αj~=0的时候,XPBD的公式18就退化回了PBD的s公式。

这个 α j ~ \tilde{\alpha_j} αj~叫做柔度系数。它实际上就是刚度系数的倒数(注意是整个矩阵的倒数,也就是矩阵的逆,不是单个值取倒数)。它和刚度系数一样,代表约束的强弱。如果是柔度为0,代表约束必须被满足。而柔度大则代表这个约束比较弱。

除了 α j ~ = 0 \tilde{\alpha_j}=0 αj~=0以外,我们还发现公式(18)中有一个新的变量 λ i j \lambda_ij λij。这是一个标量,需要在迭代循环中也一起存储并且更新。这就是XPBD的额外开销。我们看算法流程中的步骤9就是更新 λ i j \lambda_ij λij。它代表的是总拉格朗日乘数法中的乘数。下标ij代表它对应第i次迭代的第j个约束。

结果

1 简单谐振

首先对比精确解与数值解以衡量该方法的精度。

下图展示的是不同迭代次数的PBD方法与XPBD方法与精确解的对比。

所模拟的是弹簧的简单谐振运动。只使用了距离约束。静息距离为x=1,初始距离x0=1.5,质量mass=1,柔度alpha设为0.001。

显然XPBD的结果(绿色曲线)和精确解(蓝色曲线)吻合得很好。而PBD吻合较差。无论XPBD所采用的迭代次数是多少,结果总是这样的。而PBD结果则显然与迭代次数有关。

在这里插入图片描述

2 铰链

本算例用于与牛顿求解器进行对比。

用20个粒子组成一个铰链。然后令它自由下落。下图是不同时刻的铰链位置图(所有时刻都被画出来了)。左图是牛顿求解器,右图是XPBD。 mass=1.0, α = 1 0 − 8 \alpha=10^{-8} α=108 XPBD迭代次数50
在这里插入图片描述
下图是铰链顶部粒子所受约束力的曲线对比图。横坐标为帧数。
在这里插入图片描述

3 悬臂梁

此算例与FEM进行对比。

为了与FEM进行对比,首先要把不同的参数进行统一。于是定义柔度矩阵为刚度矩阵的逆。其中lambda和mu是两个拉梅参数
在这里插入图片描述
FEM采用Saint Venant-Kirchoff公式。杨氏模量E取 1 0 5 10^5 105,泊松比0.3,时间步长0.008s。仍然采用第50帧结果。XPBD迭代次数50。

从视觉效果上几乎无差别。左图为FEM。右图为XPBD,迭代次数20。仿真结果为第50帧。

在这里插入图片描述
下图曲线对比的是悬臂梁例子FEM(牛顿求解器)与XPBD的约束h^2的曲线。
在这里插入图片描述

布料

下图为PBD(上排)与XPBD(下排)对比。从左到右迭代次数依次为20 40 80 160。
在这里插入图片描述

该布料采用64x64个粒子。约束共计24K个,均为距离约束。

PBD刚度系数为0.01。可以认为alpha=0的情况对应k=1的情况。

上图中PBD结果会随着迭代次数增加而变硬阻尼变大,但XPBD不受影响。

实验还对比了两者的耗时。对比发现XPBD只比PBD慢了不到2%。其主要效果在于仿真效果不受迭代次数的影响。
在这里插入图片描述

气球

气球内部采用体积约束,外部类似于可拉伸、弯曲、剪切的布料。
下图为XPBD效果
在这里插入图片描述

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值