当前位置: 首页 > news >正文

【文献导读】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效果
在这里插入图片描述

相关文章:

  • 直流有刷电机转速、电流双闭环调速系统及Matlab/Simulink仿真分析
  • 诡异错误 Unresolved reference: styleable
  • exception错误处理库学习
  • 蔚来、小鹏、吉利走到了跨界分叉口
  • 神卓互联SDWAN技术实现异地组网办公(无需硬件)
  • Redis分布式锁(下篇)
  • Vue--整合SVG Icon图标--方法/实例
  • STC15单片机-整合代码,完成软件设计
  • 直流有刷电机调速原理及Matlab/Simulink仿真
  • 基于bootstrap+Java+MySQL的高校成绩管理系统
  • java基于ssm+vue+elementui的旅游线路分享管理系统
  • 最近公共祖先 LCA
  • Deterministic Policy Gradient Algorithms
  • Java8时间日期库DateTime API及示例
  • np.random.seed(), torch.manual_seed(args.seed)
  • CSS盒模型深入
  • ERLANG 网工修炼笔记 ---- UDP
  • express.js的介绍及使用
  • Java,console输出实时的转向GUI textbox
  • JSONP原理
  • js写一个简单的选项卡
  • OSS Web直传 (文件图片)
  • 从tcpdump抓包看TCP/IP协议
  • 高程读书笔记 第六章 面向对象程序设计
  • 工作踩坑系列——https访问遇到“已阻止载入混合活动内容”
  • 关于for循环的简单归纳
  • 猴子数据域名防封接口降低小说被封的风险
  • 跨域
  • 理解IaaS, PaaS, SaaS等云模型 (Cloud Models)
  • 力扣(LeetCode)357
  • 巧用 TypeScript (一)
  • 日剧·日综资源集合(建议收藏)
  • 如何利用MongoDB打造TOP榜小程序
  • 使用common-codec进行md5加密
  • 体验javascript之美-第五课 匿名函数自执行和闭包是一回事儿吗?
  • 微信端页面使用-webkit-box和绝对定位时,元素上移的问题
  • 在Unity中实现一个简单的消息管理器
  • 白色的风信子
  • 积累各种好的链接
  • ​LeetCode解法汇总1276. 不浪费原料的汉堡制作方案
  • # 睡眠3秒_床上这样睡觉的人,睡眠质量多半不好
  • ###51单片机学习(2)-----如何通过C语言运用延时函数设计LED流水灯
  • ( 用例图)定义了系统的功能需求,它是从系统的外部看系统功能,并不描述系统内部对功能的具体实现
  • (06)金属布线——为半导体注入生命的连接
  • (JS基础)String 类型
  • (NO.00004)iOS实现打砖块游戏(十二):伸缩自如,我是如意金箍棒(上)!
  • (第一天)包装对象、作用域、创建对象
  • (附源码)springboot青少年公共卫生教育平台 毕业设计 643214
  • (三分钟了解debug)SLAM研究方向-Debug总结
  • (一)RocketMQ初步认识
  • .bat批处理(六):替换字符串中匹配的子串
  • .net core webapi 部署iis_一键部署VS插件:让.NET开发者更幸福
  • .NET Framework 的 bug?try-catch-when 中如果 when 语句抛出异常,程序将彻底崩溃
  • .net mvc部分视图
  • .NET 跨平台图形库 SkiaSharp 基础应用