布料和可变形材料之间摩擦和空气效果建模图1:旋转球体.我们给出了有效的算法来逼真的实现布料和可变形材料之间的摩擦和空气的动画效果.它们可以让我们模拟那些外面由一块布料包裹,内层和布料之间夹杂着空气的物体.和只有外层布料(a)或者内层可变形材料(b)的动画比较可以看到这种材料展现了不同的动态效果(c).摘要现实世界中的布料在接触可变形的材料时会展现复杂的行为.本文中,我们从三个方面来研究如何提高对这种布体材料之间的相互作用的模拟效果:碰撞,摩擦,还有空气压力.我们通过使用表面遍历技术给出了一个有效和稳健的算法来检测布料和可变形材料之间的碰撞.我们开发了一个摩擦力衡量装置,用现实生活中的实验来捕获摩擦数据.这种摩擦捕获模型能够真实有效地处理布料复杂的摩擦属性,其中包括各向异性和非线性特征.为了产生布料和可变形材料之间由空气造成的压力效果,我们在布料层定义了一个空气质量场并且使用到了现实生活中空气的渗透性数据.我们的结果表明我们的系统能够有效和准确的模拟包含三层结构的物体(布料层,空气层,和内层),如枕头,羽绒服,夹克和填充玩具.1介绍在现实生活中,布料经常用来当作外套来保护里面的物体,防止其分散,受潮,受热或者防尘.对于床和衣服来说,内层是由软体材料做成的,摸起来很舒服和温暖.要实现布料和他的内层之间的动画不仅需要模拟器解决布料和可变形材料的动态效果而且需要考虑它们之间的相互影响.当然,图形学的研究者们已经做出了能够对布料还有可变形材料进行模拟和建模的程序,但是如何有效和准确的处理它们的相互作用任然缺乏研究.在布料自我碰触或者接触其他物体的时候会形成一些动画效果,比如皱纹,折叠.如图一所示,如果没有准确的处理接触的问题,我们就不能有效地产生生动的布料动画效果.模拟布料和可变形材料之间接触相互作用的效果主要有来自两个方面的挑战.首先,覆盖层布料和它里面的可变形材料之间的碰撞时非常频繁的,这使得碰撞检测程序需要消耗大量的计算机资源.这种碰撞经常随着时间和空间的不同而产生,但是布料的自我碰撞确很少见.我们认为这些特性能够用来提高对cloth-body的相互作用时碰撞检测的效率.第二,现实生活中由于布料和可变形材料组合所用的材料种类不同,它们之间的产生的接触效果非常的复杂.例如,它们之间的摩擦可能是非线性的,各向异性的,甚至是不对称的.布料和可变形材料之间夹杂的空气使得动画效果更加生动逼真,但是需要使用流体动力学来对它进行模拟使得它同样需要消耗大量的计算机资源.据我们所知,在图形学或者是纺织工业当中,如何对这些行为进行建模,以及如何将它们组合到现有的模拟器当中还没有较好的研究.我们对布料和可变形材料之间接触效果进行有效和准确的动画模拟进行了系统的研究.我们研究的目的就是可以模拟那些现实生活中能够用覆盖布料层,内层和中间夹杂空气层三个层来建模的物体.在这片论文中,我们开发了新异的技术来对cloth-body进行模拟和建模,包括三个方面:碰撞,摩擦,还有空气作用.我们的主要贡献如下:1)一个基于表层遍历的碰撞检测算法,它的算法效率明显优于现有的方法,它对频繁性的接触碰撞的情况更加有效,同时它的结果对处理摩擦和空气效果非常有用.2)一个非线性,各向异性摩擦模型.我们采用一个摩擦测量装置来捕获摩擦数据.这些数据包含多种不同的布料和可变形材料,比如,棉,皮革,海绵.3)一个空气质量场表示空气层.我们通过空气传播模型和空气传递模型来跟新空气场,后者依据[Cayetal.2007]中的真实世界的空气的渗透率数据来对空气穿透布料进行动画模拟.我们提供的模型和技术兼容大多数现存的布料和可变形材料模拟器.我们依据它实现了一个系统同时在布料动画的例子中对它进行了测试.我们的实验表明,这个系统能够有效的,准确的处理一系列现实生活中的三层结构物体,例如枕头(图3),羽绒服(图12b),和马甲(图12c).2前期工作碰撞和接触处理.碰撞处理在计算机图形学中是一个很大的研究领域,以前的研究已经研究了很多问题,包括碰撞剔除,碰撞检测和异步性.然而,以前的技术一般都是处理普通的碰撞情况,我们的碰撞检测算法是专门用于处理两个表面频繁接触之间的碰撞.像其他分离方法一样,它在每个时间戳结束的时候检测和处理碰撞.当物体的移动速度不是很快的时候,它是有效和稳健的.一个更加普遍的问题是如何对两个物体复杂的接触进行动画模拟.摩擦典型的是使用Bridson和他的同事们在[2002]中陈述的库仑土压力理论(Coulomb).Pabst和他的协作者们给出了一个摩擦张量来对各向异性摩擦效果建模.黏性摩擦可以用粘合约束或粘合弹性建模.弹性粘合也可以被用于处理弄湿的布料和其他物体的接触,Huber和他的同事在[2011]中给出了证明.Shinar和他的同事在[2008]中开发了一个同一时间积分器来模拟变形材料和固态物体之间的接触.Guendelman和他的同事在[2005]中研究了布料和液体之间的接触.Lenaerts和他的同事在[2008]中使用平滑粒子流体动力学对流体渗透通过多孔变形对象进行了动画模拟.通过假设不可压缩液体虚拟的存在两个物体之间,Sifakis和他的同事们在[2008]中解决了流体动力学关于计算接触反应的问题.Stam在[2009]中使用均匀的空气压力对膨胀和压缩效果进行了建模.与之相反,我们的系统的气压来自一个随时间变化的气场,气场随着空气的传输和传播而实时更新.通过使用它,我们能够方便的处理网格布,实现布料上波浪效果的动画显示.材料测量.材料测量最近已经成为计算机图形学非常火热的研究课题.Pai和他的同事在[2001]中开拓了这个领域,他们得到了一个3D可变形材料的形状,弹性和摩擦属性数据并对其建模.他们的这个想法被Lang和他的协助者们在[2002]中得到扩展,从而变得更加稳健.Schoner和他的同事在[2004]中增加了粘弹性.虽然像[2010]所述的那样,布料的材质属性也能够从非约束布料运动中得到,但是结果由于自遮挡和大变形而产生了更多困难的问题.相反,Wang在[2011]以及Miguel在[2012]中开发了他们自己的2D测试器用来测量布料的非线性,各向异性弹性行为.3D物体的弹性同样出现了非线性特性,Kauer在[2002]中提供了一个方法来测量它.Bickel在[2009]中通过同时考虑3D物体的非线性和非均匀性从而极大的推动了这个方向的发展.材料科学和纺织工业的研究者们同样发明了一系列的材料测量装置,例如拉力测量装置,弯曲测量装置,还有空气渗透性测量装置.大多数空气渗透测量装置采用的是Shirley测量方式,它们通过一个真空泵来产生期望的压力差,用流量测试计来测量通过测试样品的空气量,它们的一些结果能够在网上找到.当然,研究者们同样发明了摩擦测试装置,由于各种不同材料的组合,现有的摩擦数据对于图形学研究来说仍然作用不大.在我们这个项目中,我们不仅对布料材料的自摩擦属性感兴趣,而且对布料和可变形材料如棉料,海绵还有皮革之间的摩擦属性也感兴趣.3三层结构如图2所示,我们的系统基于一个三层结构.最外层是一个布料层.它由三角形网格组成,它可能不是闭合的.我们使用隐式有限元求解来模拟它的平面变形,就像Volino在[2009]中做的那样.我们使用Bridson的铰链边缘模型来计算弯曲的力度.平面和弯曲的强度系数都是从布料弹性数据库中得到,它们由Wang发表在[2011]中.最内层是一个密封的可变形材料.由于它的形状基本是光滑的,我们采用一个低分辨率的四面体网格来表示它,并且使用共旋转有限元对他进行模拟.在布料层和可变材料层中间有一个空气层,用空气质量场表示.在每个模拟的时间片内,我们首先分别单独模拟布料层和内层,然后处理它们的碰撞(第4节)和摩擦(第5节).在这之后,我们更新空气层,同时在布料层和内层应用空气层对它们的影响(第6节).图3在一个枕头的例子中展示了三层结构的效果.4碰撞处理我们在系统中采用布料和可变形材料之间的正负距离来处理它们的碰撞.此外,这个距离还被用在第5节和6节,用来处理摩擦和空气效果.考虑到碰撞检测经常是计算瓶颈,在本节中我们给出了一个更快的分离碰撞检测算法.4.1分离碰撞检测由于布料网格的分辨率通常会高于可变形材料网格.我们的碰撞检测算法的重点在于找到每个布料顶点与可变形体之间的碰撞.我们将在4.2节讨论如何消除其他碰撞.给定一个布料顶点Pi,和可变形体Ω,需要确定可变形体边界∂Ω上离Pi最近的点Ci的位置,这样,我们就能够使用Ci来计算Pi到∂Ω的带符号距离.当Pi∉Ω时,距离为正数;当Pi∈Ω时,距离为负数.表面遍历方法通过梯度下降方式需找Ci,如表4.首先在∂Ω上赋给Ci一个初始位置,Ci是在三角形Ti中.我们计算出Pi在Ti平面上的投影Pi’,然后将Ci朝Pi’移动.如果Ci碰到了Ti的边界,我们将Ti设为与这条边界相邻的另外一个三角形,然后更新Pi’,如此重复此步骤.当Ci=Pi’,或者下一个三角形已经被访问过的时候表面遍历停止,在直觉上,这种方法不断的驱动Ci朝向Pi,其中Ci一直限制在∂Ω内.当Ci停止移动的时候,它就是Pi到∂Ω之间距离函数最小的那个位置.如果Ci在全局也是最小的,那么我们就能够用这条法线来决定距离的符号,判断Pi是否在Ω内部.不幸的是,表面遍历方法不能够保证Ci是全局最小的.为了避免由于这个而造成碰撞丢失,我们用公式阐述了我们的碰撞检测算法,如算法1所示.假设t时间没有渗透存在,而且时间点为1.令U为最大的相对速度.在时间t和t+1之间,如果布料的顶点Pi和∂Ω在一个确定的点发生碰撞,那么这个点和Pit+1之间的距离一定被U界定.因此,Pit+1和∂Ωt+1之间的距离也一定被U界定.令S⊂∂Ωt+1为那些包围盒距离到Pit+1的距离少于或者等于U的三角形.如果Pit+1∈Ωt+1,那么离Pit+1最近的点一定在S中.因此,当S=∅的时候,没有碰撞发生,当S≠∅时,我们首先使用表面遍历方法记录Cit+1到Cit的距离,计算Cit+1到Pit+1带符号距离dit+1.然后,对于S中的每个没有被访问过的三角形T,我们测试dit+1是否小于0,而且Pit+1是在T的外侧,或者dit+1是否大于0而且Pit+1是在T的内侧.如果不一致的情况出现,我们通过计算T上离Pit+1最近的点C来访问T.如果C比Cit+1更近,我们用C取代Cit+1,然后相应的更新dit+1.如果dit+1改变了他的符号,我们重新启动对S的搜索.如果每个S中的三角形都没被访问过,或者和dit+1的符号一致,那么算法停止.算法的思想是:我们能够容许Cit+1不是最近的点,但是我们不允许dit+1的符号出现错误.令C是离Pit+1最近的点.那么一定存在一个三角形T(其中C∈T∈S),如果Pit+1∉Ωt+1那么Pit+1就在T的外面,如果Pit+1∈Ωt+1那么Pit+1就在T的里面.因此,如果所有的三角形都和dit+1的符号一致,那么我们就知道符号一定是正确的.有了这个思想,我们的算法能够保证如果Pit+1在Ω内部的话碰撞能够检测到.正如大家知道的隧道效应一样,作为一个非连续的检测方法,当顶点迅速的穿过物体的时候它仍然可能丢失一些碰撞.据我们所知,在基于分离框架的前提下,这个问题唯一的解决办法就是缩短时间片.分析.我们算法的效率主要来自两个方面.首先,表面遍历碰撞检测在时间和空间上是一致的.当布料的顶点滑过可变形体时,仅仅一小部分的三角形需要被检测.在极端条件下,当布料和可变形体之间没有相对移动的时候,对于每一个布料顶点仅仅只有一个三角形需要被测试.第二,可变形体网格在大多数情况下是光滑的.如果布料的顶点在外面,那么顶点可能在那些局部三角形的外侧;如果布料的顶点在里面,那么顶点可能在那些局部三角形的里面.如果这样的话,表面遍历额外的计算开销是对每个局部三角形每一个布料顶点一个点积的计算量.图6对我们的算法的表现和一种穷举算法进行了比较,穷举算法利用S中的每个三角形来计算顶点和三角形的距离.两种算法都使用了均匀网格加速结构,如图5