注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

豆芽兵的生存探索

因,记录。留下历史,看到未来...

 
 
 

日志

 
 

06_RealFlow布料算法(A Cloth Solver for RealFlow)  

2013-01-10 14:18:13|  分类: 探索实验室 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
06_RealFlow布料算法(A Cloth Solver for RealFlow) - 豆芽兵 - 豆芽兵的生存探索

06_RealFlow布料算法(A Cloth Solver for RealFlow

快速预览:“布料模拟”

1.       C++插件

2.       使用一个新的,非常快速的Verlet integration方法(韦尔莱积分法)

3.       没有使用Elastic Particles

主要开发者: 整个RF_toolfactory 团队

译者:豆芽兵

2012 8 10 日:RealFlow5版本开始,NextLimt公司引入了全新的刚体和柔体算法。这也是软件内部可进行布料模拟的终点(现在RFRBD,压根就没考虑布料,所以说是终点)。当然,有很多商业布料解决方案,几乎所有3D软件都配备了。但如果直接在RealFlow内使用布料,有时真的非常重要。

我们的第一步是基于Python脚本来这完成一些基本功能,但很快我们就改变了主意,开始使用C++代码来实现。主要原因当然是模拟速度,并且C++更灵活点。我们从Smoke插件中(详看博文:简单的烟)学习了很多关于:算法,集成方法和力知识。布料算法是一个很好的使用这些知识的途径。另一个原因是因为项目的复杂性:最初在Python中,尝试了“风吹窗帘”的例子,发现模拟不够严谨。我们需要自碰撞的方法,cloth-object(布料-对象)交互和复杂的策略来做点的约束(constraint)。总之Python弊端太多了。

这插件的主要问题在于,对像的变形或是创建,由于RealFlow长列表(long list)束缚,得要使用通用的SD格式。SD格式就是一切,但为了灵活一点,我们得要变通方法,绕过各种限制。

06_RealFlow布料算法(A Cloth Solver for RealFlow) - 豆芽兵 - 豆芽兵的生存探索

基本思路是,我们使用知名的毛巾案例作为开始,只是简单的2D平面有细分点和固定的点。固定点可以通过RealFlow内部工具来选择。我们引入了多种类型约束来,剪切和弯曲力。基于著名的:Verlet方法,开发一个全新的算法。这个新方法会让布料更稳定,但不会增加模拟时间。我们也使用了mass-depending(基于质点)方法来模拟不同种布料,并成功建立一个布料交互,使用了RealFlowDaemons。布料案例视频是在Gravity,Noise力作用下。在第三个案例,添加了Wind。不过,为了稳定只使用了很小的值。

2012 8 14 日:似乎我们找到了一种非常快速和可靠的方法来做自碰撞(self-collision,但我们得要小心:自碰撞总是非常难处理,因为它必须检测低分辨率布料网格与碰撞。仍有一些穿插问题,但函数已经在很多情况下很正常。同时我们将要执行相关参数来控制布料动态:“Rigidity,硬度”,Elasticity,弹性”和“Flexion,弯曲性”

2012 9 28 日:我们使用了全新的约束模式,来支持不只是毛巾一类的多种模型, 2D3D的都可以。这个模式在Bending(弯曲),Structural(结构),Shear(剪切)和Border Constraints(边框约束)。当然边界仅使用2D对像来检测。边界约束硬度可以单独调节,提高更多真实性:当你看到桌布或毛巾边界往往更硬,这实际上是一种约束模拟。

       自碰撞已经成功的改善,尽管它仍不完美,我们需要避免布料直接接触部分的穿插。在这些区域,我们仍能看到穿插和人为迹象。好消息是我们已经有好方法来解决这个问题:我们添加自定义厚度(thickness)参数。碰撞主要问题之一是如何处理弹力(bouncing force)和速度(velocity,但我们当前方法似乎非常稳定了。

2012 10 26 :自身碰撞和物体碰撞(self,object-collision)仍然是一个问题。绝对可靠方法要计算很多项目,需要大量解算时间。这也是为什么我们在寻找基于几何体方法的原因。我们的确发现了一种非常好和快速的技术 ,在大多数情况下能给出准确的结果。不过,还有一些困难需要克服,例如由于约束和他们力而产生的不想要的抖动。看起来我们得要分开处理碰撞和非碰撞的粒子,来保证布料不会抖动。我们当前方法不是100%方法。它主要目标是填补RealFlow3D软件之前差距:它不能跟专业布料解算器相比,但有助于直接在RealFlow中完成大量日常工作任务,不需要把模型数据导来导去。另一个缺点仍然是RealFlow自身的SD文件格式和方式,软件缓存数据。不能避开的许多限制绝对没有影响。尽管有这些限制,我们还是在模拟准确性与速度之间做了一个很好的平衡。

06_RealFlow布料算法(A Cloth Solver for RealFlow) - 豆芽兵 - 豆芽兵的生存探索 

Torus模型,完全适合用来测试自碰撞功能,因为当他们折叠产生了多个重叠。特别是在布料有很强的弯曲,我们仍能看到有交叉还有和多余的人工痕迹。

06_RealFlow布料算法(A Cloth Solver for RealFlow) - 豆芽兵 - 豆芽兵的生存探索 

旗帜是另一个典型的用来做面料解算的例子。旗帜受很强的风场影响吹动,还有扰动。要防止旗帜“折叠”到一起,辅助器点要略微上升。

06_RealFlow布料算法(A Cloth Solver for RealFlow) - 豆芽兵 - 豆芽兵的生存探索 

在此场景,你看到三个基本模型,每个结点单独布料解算。我们的工具是一个粒子插件,作为粒子类型在emitter的“Paticle”“Node Params,节点面板”下。另一个粒子类型,如“Liquid”或“Dumb.

我们一直使用“Objectemitter来使用我们插件,因为它它提供了工具来选择点(vertices.)这些点可以作为固定点。你可以清楚看到模型几何体最终模拟效果和布料动态。使用更高的面数(edges,布料就会变得更像刚体.

韦尔莱积分法(Verlet integration)简介

韦尔莱算法是一种用于求解牛顿运动方程的数值方法,被广泛应用于分子动力学模拟以及视频游戏中。韦尔莱算法的优点在于:数值稳定性比简单的欧拉方法高很多,并保持了物理系统中的时间可逆性与相空间体积元体积守恒的性质。

Carl St?rmer首次应用韦尔莱算法求解磁场中运动粒子的轨迹,因此韦尔莱算法又被称为St?rmer算法。1967年法国物理学家Loup Verlet将其应用于分子动力学计算,从此韦尔莱算法流行起来。

参考:

1.维基百科/Verlet Integration

http://en.wikipedia.org/wiki/Verlet_integration

2.verlet积分算法简介及程序实现(博主强烈推荐此篇,还有此类网站):

http://www.52souji.net/introduction-to-verlet-algorithm-and-matlab-code/

3.Verlet Cloth(这个网站有案例有代码)

http://www.maxgarber.com/projects/cloth/

……Google一下Verlet Cloth有非常多的论文和研究文章。有兴趣建议好好看看。。。。。。

  评论这张
 
阅读(2001)| 评论(2)
推荐

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017