樱桃落在水面,你能分辨出这张图是真实还是模拟的吗?
因为表面张力的存在,落叶可浮于水面、水黾得以在水面爬行,这是十分自然的现象。
而计算机模拟表面张力,也可以达到十分真实的效果。
近日,在由北京大学陈宝权教授研究团队与北京电影学院未来影像高精尖创新中心、达特茅斯学院、德克萨斯农工大学合作的论文《Solid-Fluid Interaction with Surface-Tension-Dominant Contact》中,作者们提出全新的模拟框架处理带表面张力的流固强耦合, 能够精确模拟各种与表面张力相关的物理过程。
本文入选了 SIGGRAPH 2021论文 Trailer(精选预告片),并将在计算机动漫节 Computer Animation Festival (CAF) 上播放,并在 SIGGRAPH 主页推荐。
以下为论文一作、北大图灵班学生阮良旺对此研究的解读。树叶落在水面上泛起阵阵涟漪,密度比水大的回形针却能漂浮在水面上,这些现象的背后有一个共同原因——表面张力。现有的物理模拟技术能够单独模拟流体和固体,但是想要在屏幕上重现表面张力的作用时,我们需要搭建一个全新的模拟框架。在这篇文章中,我们使用显式三角网格表示流体表面的薄层,并在薄层中建立表面张力模型,然后采用统一的模拟框架将流体、流体表面层和固体三者耦合起来,实现表面张力驱动的流固耦合模拟。在这个框架下,我们可以模拟一些之前不能实现的表面张力效果:密度大于水的物体漂浮在水面上,水面上的物体相互吸引(甜麦圈效应),以及表面张力不足以支撑物体后的水面破碎效果。表面张力指的是流体表面会尽可能收缩的趋势。微观原理上是因为流体表面的分子密度比流体内部的分子密度更为稀疏,因而表面分子之间的平均距离更大,所以分子间的相互作用表现为一种吸引力。从宏观上来讲,我们可以定义一个表面张力势能:其中 是流体表面的面积, 称为表面张力系数。当流体与固体发生作用时,流体表面的分子同时会受到固体分子的作用,从而将表面张力作用在固体上。固体根据表面特性不同可以分为亲水和疏水两类,疏水材质在水面上会受到向上的表面张力作用,对于一些细小的结构来说这个力要比浮力更为明显。比如说水黾是一种可以生活在水面上的昆虫,它的脚非常细长,并且有很多绒毛来保持疏水特性,因而水黾可以依靠表面张力维持自身的重量,并通过脚来划动水面来向前运动甚至跳起。我们的耦合系统分为三个部分:流体,表面层,固体。流体部分我们采用传统的欧拉网格的模拟方法,在交错网格(Staggered Grid)上用算符分离的方法求解离散不可压的 Navier Stokes 方程。固体部分采用传统的拉格朗日方法求解牛顿方程。我们的主要贡献在于在流体与固体之间插入了一层有质量、有厚度的流体表面层,这个表面层直接对应我们上面介绍的流体表面分子稀疏的部分。因为这个表面层非常薄,我们可以使用带虚拟厚度的单层三角网格来表示,然后在这个表面层上施加表面张力势能。为了将这三个部分耦合起来,我们在表面层和背景网格、固体和背景网格之间定义了速度的插值矩阵,同时将流体的压强作用在表面层和固体上,以及将表面张力作用在固体上,这样我们将这三部分写进一个三相耦合方程里进行统一求解和更新。最终我们算法的流程如下:这里我们展示我们论文的部分结果,更多结果请查看我们的视频(点文末“阅读原文”跳转)。在樱桃、回形针、树叶和小船这三个例子中,我们使用尽量与真实图片相同的配置进行模拟,都得到了与真实图片相差无几的结果,体现了我们算法的真实性。在这个例子中我们展示了在其他条件都相同的情况下,我们仅仅改变了流体的表面张力系数,樱桃掉进表面张力系数更大的水面上可以漂浮起来,但是在表面张力系数更小的牛奶里就会掉下去。在这个例子中我们成功使密度大于水的回形针漂浮在水面上,水面下面的条状背景会因为水面的弯曲而变形,从左到右回形针的密度逐渐增大,中间条纹的密度也在逐渐增加。在最右边的场景中,回形针的密度达到了7.9 g/cm^3(金属铁的密度),是水密度的将近8倍,但是依然可以依靠表面张力漂浮起来,得到的条纹分布与真实图片最为接近。真实图片 © Pictoscribe -/Flickr在这个例子中我们展示了我们方法可以方便地处理薄壳刚体的情况,小船和树叶都使用单层三角网格来表示。在树叶的边界上,我们再次得到了与真实图片几乎完全一致的结果。在这个例子中,我们设计了一个类似于水黾的水上机器人,它可以依赖自身的关节驱动在水面上向前运动。