首页 理论教育 理解弹簧力学原理-MAYA 粒子特效

理解弹簧力学原理-MAYA 粒子特效

时间:2024-10-05 理论教育 版权反馈
【摘要】:当用户播放动画时,弹簧尽力地到达它们的静止长度。当值为0时,表明结束点不受弹簧伸缩力的影响,当值为1时,影响最大。

理解弹簧力学原理-MAYA 粒子特效

第二节 理 解 弹 簧

弹簧作为控制粒子的一个最特殊的物体,在很多时候有着很重要的作用,在本章的开始内容里面有过对弹簧的简单描述:

弹簧(Spring)和生活中的弹簧是一样的,当你拉长它的时候,它就产生拉力阻止变长;当你压迫弹簧时,弹簧会产生弹力阻止变短。如果在粒子之间创建弹簧,就可以在粒子之间产生相互的作用力,使得粒子互相总是保持原有的距离。

弹簧可以创建在柔体粒子里面,也可以创建在单个粒子之间、单个粒子和点之间。这是很重要的特性,这意味着我们可以将动力学物体和非动力学物体通过弹簧联系起来。在进入实例之前,我们先把弹簧的创建属性和参数详细的了解一下:

为柔体创建的弹簧有三种方式可以选择:

1.你可以为在最大距离和最小距离之间的粒子创建弹簧;

2.每一个粒子都和其他的粒子之间都创建一根弹簧;

3.这是最特殊的,他创建沿着模型表面创建弹簧,也就是创建“表面张力”。

除了创建的方法,弹簧最重要的是属性,主要是:

弹性(stiffness),阻力(damping),长度(length)这三个最基本的性。

Stiffness:设置弹簧的刚性。如果用户将弹簧的刚度设置得太高,弹簧可能被过分地拉伸和压缩,通过改变刚性属性,用户可以调整碰撞柔体的弹跳。

Damping:设置弹簧的阻尼力。高的阻尼值,使弹簧的长度变化很慢,低的阻尼数值可以使弹簧的伸缩加快。用户可使用低的阻尼数值和高的弹力数值来创建柔体的颤动效果。

RestLength:设置弹簧静止时的长度。在弹簧物体中的每个弹簧都具有相同的静止长度值。当用户播放动画时,弹簧尽力地到达它们的静止长度。如果将此项的值设置得比弹簧的静止长度小,当用户播放动画时,弹簧缩短。如果用户将弹簧的数值设置得比静止时的长度大,当播放动画时,弹簧扩张。

在这里RestLength是一个比较特殊的属性,通常我们无法确定要建的弹簧的确切长度,所以通常会选择:UseRestLengthPS,使用这个选项maya就会在创建弹簧的时候,自动设置初始长度为RestLength。

剩下的两项通常都设置为1:

End1Weight:设置弹簧的伸缩力施加到弹簧开始点的数量。此项的取值范围从0到1。当值为0时,表明开始点不受弹簧伸缩力的影响,当值为1时,影响最大。

End2Weight:此项设置弹簧的伸缩力加到弹簧结束点的数量。此项的取值范围从0到1。当值为0时,表明结束点不受弹簧伸缩力的影响,当值为1时,影响最大。

简单的属性解释这里就不多作介绍了,在单个粒子之间、单个粒子和点之间创建弹簧能够为我们带来很多功能,最简单的应用是:模仿真人拍摄时的摄像机抖动:

为了模仿摄像机抖动,我们创建一个Polygon的cube,然后再cube的正中间放置一个locator,用与将来连接摄像机:

要模仿抖动,我们的思路是:将中间的locator作为摄像机的平台,让locator用8根弹簧连接cube的8个定点,这样利用弹簧的特性就可以在cube移动的时候带动locator移动,当cube停下来的时候,由于弹簧的特性会产生抖动,这样locator就会抖动,从而实现了摄像机的仿真抖动。

在这里我们就利用在单个粒子之间、单个粒子和点之间创建弹簧来实现这个效果:(www.xing528.com)

首先要做的就是在Locator上面创建一个粒子,因为一个粒子是很特殊的,它的自身transform位置和粒子属性的WorldCentor属性正好是一样的,我们就利用这个特点,使用Connectediter将粒子的位置信息(不断受弹簧的力而改变)传递给Locator。

为了在Locator上面创建一个单一的粒子,使用点捕捉是一个好办法:

最终制作一个位于Locator上面的粒子:

有了这样的一个粒子,接下来就是使用弹簧来影响粒子的移动,注意我们是为单个粒子和点之间创建弹簧,所以必须进入子物体选择状态:

接下来先选择粒子(注意我们选择的是粒子中的粒子个体,并不是整个粒子,群虽然粒子群只有一个粒子),然后按住shift选择cube的一个角上的点:

使用菜单soft/rigrbody里面的命令spring来创建一根弹簧:

弹簧参数设置如下:

于是,一根弹簧制作好了:

接下来就是制作剩余的七根弹簧,由于这八根弹簧都拥有相同属性就可以,所以我们可以将八根弹簧统一到一个弹簧物体里面:

通过这种方法,我们可以得到一个弹簧物体,八根弹簧,这样就不会造成outliner里面有一大堆的弹簧物体难以控制了:

(场景里面有很多弹簧,但是其实只有一个弹物体。)

造好了弹簧接下来就是将粒子的属性worldCentroid和Locator的translate属性连接起来了,(这里请注意:粒子的worldCentroid属性是粒子的行节点属性)所以我们使用connectionediter:

首先要选择粒子的行节点:

为了选择粒子的行节点,必须打开Shape的显示选项:

然后选择locator,分别载入connection editor的Output和Input栏目里面,然后将粒子的属性worldCentroid和Locator的translate属性连接起来:

于是,随着cube的移动,中间的Locator会很真实的被弹簧拉着作跟随运动了,最后只需要将摄影机parent到Locator下面就可以了:

摄像机仿真运动做好了。

在这里使用的是一个粒子,但是摄影机有时候是要镜头摇动的,甚至于摄影机有时候会要旋转的,这样我们用一个粒子点就不够用了,我们不得不使用Camer and Aim摄影机或者Camer,Aim and up摄影机,这样我们就需要使用两个和三个粒子来分别控制摄影机的本身移动、aim点的移动和up点方向的移动。

另外,有很多教程会使用这个技术制作模仿制作互相牵扯的物体的动画,比如吊起来的箱子,太空飞船的运动等等,由于本书重点在于粒子控制,所以不详细描述了。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈