IPC,全称Incremental Potential Contact。

IPC主页​ipc-sim.github.io

其中Incremental Potential是基于数学优化的有限元物理仿真方法在每一个时间歩要最小化的目标函数;contact包括碰撞与摩擦,在仿真中通常需要被描述成额外的约束条件。IPC将物体的contact巧妙地融合到目标函数Incremental Potential中,能在不直接引入约束条件的情况下达到前所未有地精确、稳定、无穿透的仿真效果:

知乎视频​www.zhihu.com

这一切得益于IPC对所有碰撞情景的严谨数学定义、对障碍函数法的降维加速、对静动摩擦转换的可控建模、以及对摩擦算子的巧妙离散。

碰撞的严谨定义

首先,在不考虑碰撞时,弹性物体的所有采样点的位置

在每个时间歩可通过最小化Incremental Potential
来更新:(使用隐式欧拉时间积分)

这里

,其中
为采样点速度,
为外力(比如重力),
为采样点的质量矩阵,
为时间歩长。
是弹性势能。最小化Incremental Potential是一个已经解决的很好的问题,用牛顿迭代辅助line search就能保证稳定、精确地求解。但如果考虑碰撞呢?其实也很简单:

加一个“无穿透”的约束条件就好,但如何为离散曲面定义无穿透的数学表达式,以及如何求解就显得尤为尴尬了。

之前大家试过很多方法,比如定义物体表面距离很近的“点-三角”对和“边-边”对(接触元对)组成的四面体的有符号体积要恒大于0;或者在每个时间歩开始时,找到距离近的每个接触元对上距离最近的点对,限定这些点对的距离大于0等。这些定义的问题在于,如果物体在某个时间歩移动比较多,他们可能无法正确描述无穿透这件事。另外这类方法大多基于sequential quadratic programming优化方法,没法像无约束条件时的牛顿迭代那样方便地通过line search保证稳定收敛。

另一种思路是把物体外的空间也分割成四面体微元,作为另一些有限元“物体”来模拟,通过保证这些“物体”的每个微元不反转(体积恒正)来保证无穿透。这样做的问题是需要不断更新外界四面体网格的拓扑来防止被卡住,使得模拟非常昂贵,而且这种“变硬的空气”还可能阻碍弹性体本来应有的形变。

而我们观察到,如果准确计算物体表面每一个“点-三角”对和“边-边”对的距离,即在不同相对位置关系的情况下都准确找出距离最近的点对并求出距离(注意这个距离是非负的),那么如果初始状态下无重叠,只要保证所有这些距离在模拟的每一个时间歩 t 中的优化的每一次迭代 i 的更新轨迹上每一处都不为0,物体就不可能穿透!

写出我们所需的距离的表达式就是:

  • 第 k 个“点

    -三角
    ”对:
  • 第 k 个“边

    -边
    ”对:

这样“无穿透”三个字就可以在任意情况下准确严谨地表达为:

知乎视频​www.zhihu.com

局部障碍函数

虽然我们的

其实都可以根据相对位置关系写成连续分段解析函数,我们对“无穿透”三个字的数学描述还是很昂贵的:a 可以取0到1之间无穷个实数,k 的个数则是物体表面点、边、三角形数量的二次方级别的!而IPC的解决方案,就是巧用连续碰撞检测(CCD)来对付a,并构造光滑的局部障碍函数来对 k 降维!

对于每次迭代更新,物体位置其实是从

线性渐变成
,那么只要我们在这两个状态间做CCD,找出第一次恰好产生穿透的那个 a,然后保证这一步迭代的更新步长不超过这个找出的 a 就好了,而无需对迭代更新过程进行更多的采样。(注意这里说的是迭代步长而不是时间步长。)这其实是一种line search filtering,常在内点法中使用。

配合上述CCD line search,我们把防止穿透的力定义为延距离函数梯度方向,随距离减小而增加,并在距离趋近于0时趋近于无穷,类似于用障碍函数法处理不等式约束条件。也就是说现在我们的问题转化成了

没有显式的约束条件,配合CCD就能精确近似原问题!这里 b 就是障碍函数,常用的比如log函数,它能为物体提供防穿透所需的任意大小的接触力;

是接触硬度,在IPC中通过数值分析自动调节。

传统的障碍函数当距离很远时力很小,对仿真结果的影响可忽略不计。但是接触元对的数量是随采样点二次方增加的,都处理的话仍然会非常昂贵。很自然地,我们会想去在计算中忽略那些距离远的接触元对,但是直接忽略会造成目标函数的不连续性,从而影响一切梯度下降方法的收敛性。IPC的解决方案则是,设计一个随距离增加光滑地下降为0并保持的函数:

就是IPC接触力产生的临界距离,一般设成毫米至微米级别。注意我们的函数 b 在
处也是C2连续的,画出来就是下图中的C2曲线:
IPC用来近似真实碰撞模型(discontinuous)的障碍函数

比起使用C0或者C1的截断函数,IPC的C2障碍函数更利于梯度下降方法的收敛,

设置的越小,IPC对真实碰撞模型的近似也就会越精确,需要在优化中计算的接触力和力贾科比矩阵的接触元对也越少,配合空间哈希快速找出需要考虑的接触元对,就能实现高效的仿真了!

知乎视频​www.zhihu.com

摩擦力

现实中,物体间的接触难免会产生摩擦。传统的摩擦力通常根据库仑模型由NCP问题定义,也是个很难解的带约束条件的问题。为什么摩擦力要由约束条件来描述呢?简单来说,这是因为静摩擦力在两个有着完全相同物体位置与速度的场景中,还是可能由于外力的不同而不同,这就使得摩擦力系统不得不引入更多变量,并由约束条件来描述变量间的关系,就像原本的碰撞问题一样。

IPC则通过可控的平滑近似来描述静、动摩擦力与速度的关系,使得摩擦力的大小方向可以唯一由物体接触元对的切向相对速度决定,从而避免了更多变量以及约束条件的引入。区分静、动摩擦力的速度值越小,近似就越精确:(这个临界速度通常设为毫米每秒至微米每秒之间)

IPC用来近似真实摩擦力模型(discontinuous)的函数

即使这样,很遗憾,摩擦系统还是无法写出Incremental Potential,因为它并不是保守力。IPC在对摩擦算子的时间离散中,巧妙的对法向碰撞力和摩擦切平面进行显式离散,将两者的误差保证在

内,从而构造出了近似的摩擦力势能,并融合到Incremental Potential中,实现了完整的Incremental Potential Contact:

这里

是所有上一个时间歩中的法向接触力不为0的接触元对,
是它们在上一个时间歩中的法向接触力和切平面算子,
是近似摩擦势能(
为近似摩擦力)。更多细节见原文。

知乎视频​www.zhihu.com

精度验证

可能大家固有思维是我们计算机图形学里的有限元都是花架子,上面说了那么多“可控近似”、“精确近似”,IPC这样做的精度到底怎么样?有没有convergence under refinement?那么我们一起来看一看文章里的一个实验对比:

知乎视频​www.zhihu.com

这段高尔夫球高速撞墙视频是我们在Youtube上找到的,我们在网上查阅了高尔夫球的材料参数以及这段视频中球的初速度并设置到场景中,使用能量守恒效果更好的Newmark时间积分,加上了一点lagged Rayleigh阻尼,就成功得到了这段仿真,视觉上完美重现高尔夫球撞墙后的形变,以及弹性波的变化。一定程度上验证了IPC碰撞处理的准确性。

计算机图形学的确不关注convergence under refinement,对于IPC来说,接触元对的距离、阻碍函数、以及接触硬度

都是resolution independent,所以refine后随着接触元对数量增加,结果肯定是不收敛的,这点我们在对IPC的后续研究中也发现了,并会有所改进。至于其它力,我们为了效率直接使用的是线性微元和lumped mass matrix,收敛性和能量守恒当然也是一般了,而且在大形变中肯定也有locking,这都是我们没有关注的点,而且后者和IPC关注的有限元碰撞也算是相对独立。

所以计算机图形学和机械、材料科学中有限元的区别一目了然,计算机图形学更关注稳定性和效率,机械、材料科学更关注数值精度,其实是各有千秋。我读过一些IJNME和CMAME的文章,它们为了精度,时间歩长即使是隐式积分也只取1e-4~1e-5秒左右,所以不会遇到大时间歩长牛顿迭代的不稳定性(由泰勒展开精度下降导致),所以也不会去研究或尝试在优化中加凸函数近似和line search。我们文章的三作,泰西欧.施耐德,就是机械工程背景,他第一次看到我仿真的neo-Hookean弹性材料能在这么大的时间歩长、这么大的形变下也保持稳定,直接惊呆了,你们可以发邮件和他求证。当然了,计算机图形学由于只关注视觉效果,所以基本也不会有动力去使用更高阶的有限微元,更不太会去关注isogeometric analysis这种高端的东西,因为贵啊!还【看】不出区别。但是呢,计算机图形学和机械、材料科学的有限元也是相互借鉴、互相促进的。它们就像科学、宗教与艺术,都有自己对这个世界的独特解构。

开源项目

IPC已在Github上全面开源,附带详细使用手册:

IPC开源项目​github.comIPC使用手册​github.com

只需简单几行的配置文件,就能与世界说你好:

shapes input 2
input/tetMeshes/cube.msh 0 3 0  0 0 0  1 1 1
input/tetMeshes/cube.msh 0 1 0  0 0 0  1 1 1selfFric 0.1ground 0.1 0

IPC开源项目hello world仿真场景

还能方便地设置材料属性、边界条件、以及任意维度的预设物体:

shapes input 2
input/tetMeshes/cube.msh 0 3 0  0 0 0  1 1 1 material 3000 1e8 0.4
input/tetMeshes/cube.msh 0 1 0  0 0 0  1 1 1selfFric 0.1ground 0.1 0

IPC开源项目hello world仿真场景变种 —— 不同硬度与质量的正方体自然耦合
shapes input 2
input/tetMeshes/cube.msh 0 3 0  0 0 0  1 1 1
input/tetMeshes/cube.msh 0 1 0  0 0 0  1 1 1  DBC -0.1 -0.1 -0.1  0.1 1.1 0.1  -0.2 0 -0.2  0 0 0  DBC 0.9 -0.1 0.9  1.1 1.1 1.1  0.2 0 0.2  0 0 0selfFric 0.1ground 0.1 0

IPC开源项目hello world仿真场景变种 —— 狄利克雷边界条件
shapes input 2
input/tetMeshes/cube.msh 0 3 0  0 0 0  1 1 1
input/triMeshes/triangle.seg 0 1 0  0 0 0  2 2 2 angularVelocity 10 90 0selfFric 0.1ground 0.1 0zoom 0.3

IPC开源项目hello world仿真场景变种 —— 正方体与预设三角线框的contact

目前我们正在为IPC开发Houdini插件,以及进一步提升IPC代码的可读性与可扩展性,预计将会与一个新的开源物理仿真项目共同发布。同时我们也在研究如何让IPC更高效地适用于更广泛的应用场景。我们希望为广大研究人员、工程师、设计师、同学们、亲人们、朋友们提供可控、易用、可微分的物理仿真方法,让大家远离调参,直接使用真实物理参数得到预想结果,为这个世界创造更多美好!

如果一定要给最后一个视频加一个期限,我希望它是100s:

知乎视频​www.zhihu.com

弹性碰撞后速度方向_IPC: SIGGRAPH 2020开源有限元碰撞独家处理方案相关推荐

  1. 弹性碰撞后速度方向_高中物理竞赛典型例题精讲——垫圈弹性碰撞后速度方向...

    04-07-16_垫圈弹性碰撞后速度方向 本期高中物理竞赛试题,我们来看一下非对心正碰情况下的物体运动状态,并且考虑在题目中给出的特殊情况下的物体运动状态的控制方法,其实对于碰撞以后的物体的运动状态的 ...

  2. 弹性碰撞后速度方向_$1.1.1 弹性碰撞经典例题1——力学及运动学

    [ph1] 质量为2m的木块放置于质量为m的长木板上,木块与模板之间的动摩擦系数为 μ ,木板与地面的摩擦忽略不计.木块和木板以速度V0向右运动,在右侧足够远处有刚性墙壁,木块与墙壁发生完全弹性碰撞后 ...

  3. 弹性碰撞后速度方向_MEMS加速度计辐射效应

    本文内容转载自<太赫兹科学与电子信息学报>2020年5月,版权归<太赫兹科学与电子信息学报>编辑部所有. 刘珉强,杜川华,许蔚,朱小锋,许献国 中国工程物理研究院 电子工程研究 ...

  4. 弹性碰撞后速度方向_找准模型,快速求解碰撞类问题

    找准模型,快速求解碰撞类问题 正式开讲之前,扯一会儿废话!很多小伙伴可能根本不会看下去,想想动量守恒,有什么好看的呢?人需要自信,但也不能太自信,有时候,明明大家知识点掌握的都一样,却有人能考高分,而 ...

  5. 弹性碰撞后速度方向_高三期中考后分析,不得不知道的重难点

    对于已经升入高三的学生来说,期中考只是一场小小的考试,对于你们来说只是对近三个月学习情况的小检验,为了帮助大家快速完成考后梳理工作. 没有时间参加也不要紧,贴心的我们分析归纳总结了本次高三诊断测中的高 ...

  6. 弹性碰撞后速度方向_两物体发生弹性碰撞后.相对速度大小不变.方向相反. ,也可以说两物体的速度之和保持不变.即 ....

    (1)(5分)2011年3月日本发生9级大地震,并引发海啸.位于日本东部沿海的福岛核电站部分机组发生爆炸,在日本核电站周围检测到的放射性物质碘131.在核泄漏中,碘的放射性同位素碘131(半衰期为8. ...

  7. SIGGRAPH 2020 | 基于样例的虚拟摄影和相机控制

    编者按 生命在于运"动",场景在于"动"态,摄影在于相机移"动"."动"是常态,也是图形生成.理解与呈现的核心研究对象. ...

  8. 真·降维打击:这篇SIGGRAPH 2020论文帮你「想象」三维生物眼里的四维空间

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 四维空间是什么样子?里面的物体如何运动?一篇 SIGGRAPH 2020 论文帮我们 "想象 ...

  9. 只要做出角色3D模型,AI就能让它动起来!再也不怕3D动画拖更了丨SIGGRAPH 2020

    点击上方"AI遇见机器学习",选择"星标"公众号 重磅干货,第一时间送达 郭一璞 发自 云凹非寺 量子位 报道 | 公众号 QbitAI 一只3D的狗头卡通角色 ...

最新文章

  1. Java 中序列化与反序列化
  2. Black Hat|英特尔CPU设计漏洞为恶意软件打开后门
  3. 直播连麦贾扬清,谈谈他所理解的四大 AI 落地问题 | 攻“疫”技术公开课
  4. 【面向对象】包可见性和友元可见性
  5. C语言——判断是该年的第几天
  6. php mysql刷新表格_PHP和AJAMYSQL数据库刷新表格
  7. 你看得懂的海明码校验和纠错原理
  8. 新手必看,老鸟绕道–LAMP简易安装
  9. java 声明数组_Java中的数组简介
  10. Castle ActiveRecord学习实践:构建配置信息
  11. 用南边代称一个公司,汝竟然也不满?
  12. pythonexcel怎么读_python怎么读excel
  13. 实验室信息管理系统LIMS的25个典型模块
  14. 一、恒生电子面试 (校招)
  15. 用javascript和jquery部分知识实现的打地鼠小游戏
  16. fiash星空动画制作_Flash8简单制作酷炫的星空飞越动画特效
  17. n 以内与 n 互素的元素集合必然形成一个循环群
  18. XPO的UpCasting
  19. Ant Design Pro 4 动态菜单icon丢失解决办法
  20. dp2px px2dp

热门文章

  1. 彭荣新:喜马拉雅自研网关架构演进过程
  2. 支付宝研究员兼OceanBase总架构师杨传辉:我在数据库梦之队的十年成长路
  3. JimuReport积木报表—分版设计解决什么问题?
  4. jbpm的例子之四 使用decision
  5. 实践中整理出tomcat集群和负载均衡
  6. 在Kotlin中使用Gradle构建缓存
  7. 在命令行中将CentOS 7与Samba4 AD集成
  8. CDN缓存服务器现状
  9. 揪出占用磁盘空间的罪魁祸首-企业生产实战
  10. libcurl 多线程使用注意事项 - Balder~专栏 - 博客频道 - CSDN.NET