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

豆芽兵的生存探索

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

 
 
 

日志

 
 

第五节:自由落体  

2013-03-26 18:46:56|  分类: RealFlow探索 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
第五节:自由落体 - 豆芽兵 - 豆芽兵的生存探索

第五节:自由落体

5.1、一个经典动力学现像

自由落体,肯定是最有名也是最古老的动力学形式。单一一个的物体模拟,肯定很容易完成的,因为只需要改变质量(mass)和加速度值(acceleration)。从这两个给定的值计算出力和速度。当有两个物体时,一切就变得复杂了,因为两个物体可能会碰撞;当有多个物体时,需要进行碰撞检测。为了更真实,摩擦力(friction),弹性(elasticity)等一些初始参数需要考虑到。让刚体自由下落,几乎所有三维软件都能做到,太常见了

5.1.1 关于重力(Gravity)

重力使物体下落。静止的物体在没有外力推动时永远不会运动。在地球上,静止的物体也是一直受到重力作用的,只是它与其它力平衡了。放一个小球到你手心,往上托起。这个动作,你的肌肉产生的力抵消了重力。只要你不扔下这个小球,所有力都是平衡的。直到你让小球手指间落下。球下落,加速度是恒定的。小球的"路径-时间图"如下所示:

第五节:自由落体 - 豆芽兵 - 豆芽兵的生存探索

更高质量的物体不会产生更大的下落速度,只有加大重力加速度才会使曲线更陡。下图加速度是9.81 m/s^2 ,也是地球上g(重力)的平均值。在太阳系最大的行星——木星(Jupiter)上,这个平均值是24.79 m/s^2。下图是直接使用RealFlow模拟木星的重力加速度,让物体下落时的曲线。

第五节:自由落体 - 豆芽兵 - 豆芽兵的生存探索

图15:脚本记录了刚体的路径-时间图

下面是太阳系中主要天体的重力加速度值:

Sun(太阳) 274.0 m/s2

Mercury(水星) 3.70 m/s2

Venus(金星) 8.87 m/s2

Earth (地球) 9.81 m/s2

Moon (月亮) 1.62 m/s2

Mars (火星)3.73 m/s2

Jupiter (木星)24.79 m/s2

Saturn (土星)11.1 m/s2

Uranus (天王星)9.00 m/s2

Neptune (海王星)11.4 m/s2

Pluto (冥王星) 0.17 m/s2

http://en.wikipedia.org/wiki/Planet 查看维基相关数据 (注意:上面数据来自维基百科。与RealFlow帮助文档中的表略有出入)

这个值可以直接在Gravity Daemons的Strength框中输入。使用值非常高时,考虑改变Substeps,因为自由落体随着时间越来越快。这可能也会导致不必要的影响,像穿插或碰撞检测失败。也就是常说的,尽量避免夸张的值。

5.2、滚落的铅笔

下落的铅笔,类似于多米诺效果。对初学者来说是一个非常好的刚体案例,因为结果容易预测,并不需要花太多精力来验证。主要任务就是制作出写实的运动,没有怪异的运动。我们要避免铅笔动态太一致,所有的都一样滚落。在效果制作前,心里就要知道最终要达到什么样子,这点很重要。此案例,是假设有人拿一把铅笔,从手里松开落在桌子上。

5.2.1 准备和做模型

第一步是做一个标准的铅笔模型,每个人都可以自己动手做一个。有贴图的高精度模型用来最终渲染,低面数的(代理或叫低模)模型导入RealFlow用来模拟动态。在这个场景,低模只有428个面,而高模有3314个面。

第五节:自由落体 - 豆芽兵 - 豆芽兵的生存探索

图16.有贴图的高模和导入RealFlow中的低模

千万不要忘记代理模型要使用三角面,并检查法线是否正确。现在一共有50个模型。铅笔要落到木质地面上。知道撞击的表面是什么材质这是很重要的,地面材质会影响铅笔的撞击动态。地面是有弹性的,硬的,或软的,还是蓬松的像地毯一样?

如你看到的,必须要了解整个模拟场景,知道每一个交互对像。放在这的的铅笔是随机堆在一起的,已经转成了三角面。准备导出SD文件,做第一次测试。

第五节:自由落体 - 豆芽兵 - 豆芽兵的生存探索

图17:50支铅笔,准备输出的

看到,只有很少几支铅笔落到木质桌子(原文写的是:榉木)上。结果有点让人惊讶,因为铅笔反弹的相当高。我们为了让动态更自然不要忘记这点。

5.2.2 RealFlow 设置

导入铅笔SD文件到RealFlow中

Ctrl + i (Win) / Cmd + i (OS X)

File > Import > Import object

选中所有铅笔

右键> Group

右键 > Rename > Pencils

打组导入会让流程简化一点点

给事个组激活Rigid Body Dynamics,而不需要一个个结点开启。此外默认的基本形状(Collision geometry),直接就在组结点中。在这个案例,你可以选择convex Hull 或是Mesh。保持@mass值不变。对于@friction,地面和铅笔都设置成0.2,因为它们是相同的材质制作的。@elasticity可以设置成0.7。

在第一次测试时,你可能发现有一些错位的铅笔,一开始是相互交叉的。这些模型会导致更多的模型穿插。虽然多数铅笔会撞击到地面,但仍有一些会"浮"在半空中。

第五节:自由落体 - 豆芽兵 - 豆芽兵的生存探索

图18.交叉的模型可能会导致一连串模型出错

要解决这点,只要点击SD<->Curve按钮。这个功能可以使选择的对像可编辑,而不需要再次导入SD数据。当你点击SD<->Curve之前不要忘记重置场景(reset)。否则,模型会保持最后的位置,不能再重置。如果更新修改模型,建议在三维软件中进行。

从多米诺骨牌动画中的经验,我们知道,得用很高的substeps 值,没有Stacking时,大约150。结果还可以,但仍缺乏一定的随机性。另外,模型位置修正后,已经没有任何穿插了。

第二次测试,增加铅笔的@elasticity值(0.85),并激活Stacking(10,也就是RF5及之后版本的"High")。如下图所示,模拟结束后,铅笔还有堆叠到一起。为了优化场景,Stacking看起来是不错的设置 。现在,模拟!

第五节:自由落体 - 豆芽兵 - 豆芽兵的生存探索

动画已经非常接近自然的行为。铅笔反弹,碰撞,有些分散到右边,有些滚到左边。实际上,已经很不错了,但一些方式,会让模拟更完美。这些微妙的影响会得到更多真实性,使模拟可信。

现实中木头,不可能所有都是相同的。不同铅笔木材肯定在密度质量等方面有些不一样,包括弹性。而摩擦力应该是差不多的,我们没有必要去改变它。还可以添加一些初始的旋转,沿纵向轴旋转。类似于多米诺示例,我们可以使用ChangeParameter脚本(本书后面有介绍)。花一些时间所有设置做好,我们再次模拟一下:

5.3、控制自由落体

前面的例子中铅笔运动或多少有一些随机,但某些情况下,需要控制它有特定的运动。如咖啡豆落到碗里,货物要放到规定的地方,或谷物放到一个无形的盒子中。所有这些场景都需要控制物体的运动路径。

让我们看一下第一种情况,玻璃球:只增加几个Daemon几乎无法做到,强制玻璃球沿一定的路线运动。我们需要另一种方法,让物体来按照我们需要路径运动。解决方法是使用一个辅助物体。

5.3.1 辅助物体

辅助物体可以是任何形状。因为这些辅助物体最终是不需要渲染。通常,它们只是来引导物体到一个特定的方向。因此,它们应该尽可能的简单。不需要高精度的模型。太高面数只会增加解算时间,没有一点好处。典型的辅助对物体是Funnel(漏斗),各种类型的Tube(管子),通道,Box(盒子),或其它你能想像到的。

使用这些辅助物非常重要的一点是,我们有一个沿用至今的设置:Sollision side(碰撞面)。默认的Collision面是设置成Outside(外面)。Mesh类型设置成Primitive, 我们还能自由切换Inside和Outside。这很有用,因为我们不必关心法线的方向。举例来说,要使物体沿着管道运动,切换Collision side为Inside,看到物体会沿着管道,而不是直接落下去。

辅助物体不只适用于自由落体。他们几乎可以用到刚体动力学模拟的各个部分,这其实是任何特效类型制作都用的到的思路。(比如流体运动,做火山啊,做群组啊等等,这其实是一种根本思想,与"层"、分块制作作这样的根本思路类似。)

第五节:自由落体 - 豆芽兵 - 豆芽兵的生存探索

图19.下落的铅笔序列图

5.4、滚落的玻璃球

一个非常明显的能说明辅助物体作用的例子是:玻璃球填充进果酱瓶。玻璃球从很远的地方来,通过一个螺旋形管直接滚到瓶子中。我们只需要一个基本的瓶子,切一半的螺旋形管子,当然还有几个弹珠。这就是我们测试场景所有需要的所有物体。与往常一样,我创建了代理模型,而不是直接使用高模。

在RealFlow中的物体位置如下图。这个排列的弹珠是较早的测试。在第一次运行时,它们排成队,一个接一个,后来有一点转移。球之间距离也没有随机设定。瓶子开口太小,所以球不能靠太近了,否则它们可能会被卡住。

第五节:自由落体 - 豆芽兵 - 豆芽兵的生存探索

图.20:场景设置与辅助物体(螺旋形管道

这个案例另一个非常重要的因此是,速度。控制弹珠速度的最好方式是使用摩擦力(friction)和空气摩擦力(air friction),这些值可以精确调节最终速度。尤其空气摩擦力(air friction)在这个例子中很有用。

整个模拟,substeps为固定的25,未激活Stacking。能使用非常低的Substeps值原因是:处理对像少。如果有物体数量很多,通常就需要更大的Substeps(通常来说)。

第五节:自由落体 - 豆芽兵 - 豆芽兵的生存探索

图2.1,弹珠的Rigid body设置

辅助物位置固定后,可以隐藏。隐藏后还是会正常计算交互的。另一个方法是使用Daemons,但有时,非常难控制特别的力。使用辅助物体会更快速,更简便可靠。

第五节:自由落体 - 豆芽兵 - 豆芽兵的生存探索

5.5、掀翻人行道

最后一个例子用来说明,使用辅助物体创建一个特别的效果。大部分读者都应该在电影中看过:人行道,被地下的力掀开。例如一个怪物从地下钻出来。路面的砖头等会飞到半空,甚至直接被撞碎,然后这些碎块又落下到这个坑里。

为了创建这种效果,我创建了一个较大的路面,用来演示。如果你想拓展这个效果。可以使用更大范围,随意添加一些物体。场景中包含:砖块,一些边界盒(bounding items),坑,和一些别的物体,如管道。另一个重要的模型是地面,在模拟时会被删除。这个辅助物避免了砖块在一开始就落到坑中。整个场景看起像这样(砖在这个图片中看不到)

第五节:自由落体 - 豆芽兵 - 豆芽兵的生存探索

在RealFlow,我们打开场景,把砖头模型打组,激活Dynamics。第一次模拟,建议使用默认的值。要掀飞砖头,需要使用一个辅助物。

在这,只是大球,作用辅助物。手动给这个大球做了动画,让它只与砖头交互。如下图,这个大球,与路面有接触。

第五节:自由落体 - 豆芽兵 - 豆芽兵的生存探索

红线表示动画路径。使用这个球,我们能完全控制强度和效果持续时间。我们甚至可以控制的凹凸的面,把球缩放大一点或小一点。模拟之前,做单独链接是有必要的:

1.在Global Lins中删除Helper Sphere对像

2.拖动Helper Sphere到Exclusive Links

3.把砖头模型组拖到Exclusive Links的Helper Sphere中

第一次尝试,模拟有一点快,砖头飞的太高。之后的效果相当好。要解决这个问题,我在Curve Editor中拉长了的球的动画,增加砖头质量上并增加@air Friction到0.04。得要按一下SD<->Curve成可编辑的。因为,不能穿插在一起。(上一个铅笔案例问题)。我也引入另一个辅助物,来防止砖头落到人行道左面。

5.5.1 辅助"地面"物体设置

现在可以把Helper Ground模型,设置成非刚体(Dynamics:No),允许砖头落到下面坑中。可手动或通过脚本。因为脚本是很方便的方法,我决定简单写几行。通过时间轴,看一下整个场景模拟,发现在第15帧时,有物体开始往下落。那就在这一帧开始把地面物体的Dynamics:No

Events Script: MakeObjectInactive.rfs
#--------------------------------------------------
# Function: onSimulationFrame
#--------------------------------------------------
def onSimulationFrame():
helper = scene.getObject("Helper Ground")
frame = scene.getCurrentFrame()
if (frame == 15):
helper.setParameter("Dynamics", "No")

这个脚本功能是模拟前,复位初始状态(Dynamics = Rigid Body),然后到15帧再设置成非刚体。脚本只是一种方法,你可以根据自己想法来写。还可以使用表达式:

1.选择Helper Ground 模型

2.Node Params >右击>Dynamics>Open curve

3.选择曲线,例如Helper Ground.Dynamics

4.Expression tab>删除所有存在的表达式

5.输入if(f>15,0,1)

(关于表达式更多信息,请看:《最不该遗忘的功能——RealFlow Expression  》

http://qqww2334.blog.163.com/blog/static/12036582201252851854952/)

这条语句告诉RealFlow在15帧关闭Helper Gound的动力学参数。对于简单的任务,表达式可以很好的替代脚本。因为脚本是单线程的,表达式可以加快你的模拟。

第五节:自由落体 - 豆芽兵 - 豆芽兵的生存探索

正如你看到的,辅助物体是很好的方法来触发效果。它们能帮助限制移动或执行自定义合适的运动。使用辅助物,你可以影响方式一个指定对像落下。形状,大小和模型数量取决于你自己,原则就是使用最简单物体。改变辅助物刚体参数,你可以完全控制速度和行为。因为这些优点,使辅助物体在刚体模拟场景是必不可少的。

  评论这张
 
阅读(1147)| 评论(0)
推荐

历史上的今天

评论

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

页脚

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