首页 理论教育 MAYA粒子特效技巧:多点目标

MAYA粒子特效技巧:多点目标

时间:2024-10-05 理论教育 版权反馈
【摘要】:粒子按照粒子产生的顺序,依次附着在相应的点上面了,这就是粒子的多点目标。第二条,我们可以设置关键帧将动乱场的强度再次提高,因为粒子的goalweigth等于1的时候,粒子不受力的影响。在MAYA内部粒子受目标吸引的总权重等于goalPP乘以goalweigth,在这里两这得最大值都是1,最小值都是0。

MAYA粒子特效技巧:多点目标

第二节 多 点 目 标

这一节,我们就用粒子制作出《蝙蝠侠》片头中的蝙蝠扑向字体然后飞散开来动作。这个特效是使用粒子的多点目标完成的,我们先看看什么是多点目标吧:

新建一个场景,然后建造一个多边形的球体,再建造一个粒子发射器(使用默认属性),使用Goal命令,将球体变成粒子的目标体,看看结果是什么样子的?

是不是和你所想的不一样?粒子按照粒子产生的顺序,依次附着在相应的点上面了,这就是粒子的多点目标。

下面我们就使用《蝙蝠侠》片头来学习多点目标的控制和应用:

首先,要知道需要有多少只蝙蝠(在这里使用粒子代替了),这个数量应该和球体的点的数量一样多,所以就使用菜单Display →HeadsUpDisplay →polycount来显示多边形的信息:很容易知道一共是72个点。

所以在这里应该有72只蝙蝠(在这里是粒子),那么如何让发射器产生72个粒子呢?很简单,选中粒子,可以在通道盒里面找到MaxCount这个属性,它就是粒子的数量,现在是-1,意味着无限多,把它改为72,粒子就只有72个了,然后把粒子发射器推远一点,产生一种蝙蝠(粒子)从远处飞来的效果:

可以看到,粒子的数量只有72个了,但是粒子由于受到惯性的作用,来回往复的运动,这个不是我们想要的效果,所以找到Conserve将它设置为0(这个上一节有介绍),这样粒子在不受力的作用下就不会运动了。

但是由于惯性没有了,所以例子落在球体上的时候非常的平稳,这和蝙蝠的动作完全不同,应该是在落下之前很混乱的在球体上面运动的,所以我们为粒子增加动乱场(turblence),这样粒子就会混乱了。

由于惯性Conserve=0,所以粒子的动乱场(turblence)强度就应该大一点,这样粒子才会有抖动,因为没有了惯性,不受力就不动了。

粒子动乱了,可是最后蝙蝠还是要停下来的,怎么做呢?方法有两个,可以减小动乱场(turblence)的强度、还可以增加goalweigth的大小为1,在这里我们同时使用两种方法:接下来我们就用关键帧的方法制作蝙蝠飞向球体,然后再球体上面混乱的抖动,最后慢慢的停下来,落在球体上面。

首先在动乱时候为三个属性纪录关键帧。

接下来播放一段时间后,也就是让蝙蝠混乱一阵子以后,让它们落下来:将动乱场(turblence)的强度降低到0(粒子不受力将不再运动),将goalweigth增大到1(粒子将完全受物体吸引不受其他里的影响),同时将惯性Conserve调高到最大1。(把惯性Conserve提高的目的是为以后蝙蝠再次飞散做准备的)。然后依次纪录关键帧:

现在,播放动画,蝙蝠会疯狂的扑向球体,然后在球体上面混乱的抖动一段时间,落到球体上安静下来。

这个动画已经做好一半了,剩下的就是要让粒子由上至下的,再次飞散而去。请注意:这里是让粒子从上至下的飞散,所以需要:

1.粒子的惯性Conserve要等于1,完全可以受力扩散。

2.粒子要受动乱场(turblence)的影响;

3.需要控制每一个粒子的goalweigth。

那么,第一条我们已经有准备了,做好了。

第二条,我们可以设置关键帧将动乱场(turblence)的强度再次提高,因为粒子的goalweigth等于1的时候,粒子不受力的影响。

第三条呢?如何控制每个粒子的目标权重呢?当然是使用PerParticle粒子属性了,到PerParticleAttribute面板里面找一下:

我们发现在PerParticleAttribute面板里面多出来一个goalPP的粒子属性,他就是控制每一个粒子的目标权重的属性;

那么goalPP是怎么与goalweigth一起控制力子的受目标吸引的呢?在MAYA内部粒子受目标吸引的总权重等于goalPP乘以goalweigth,在这里两这得最大值都是1,最小值都是0。

当前情况下,粒子的goalweigth值是1,那么只要让goalPP等于0,那么粒子的总权重就是0了,粒子就会受动乱场(turblence)的影响而散开了。

下面我们就开始着手制作,首先用一帧的时间将动乱场(turblence)的大小提高到足够大的值,由于当前goalweigth值是1,所以粒子不会受力的影响。(www.xing528.com)

在这里,150帧的时候,turblence的值是0,到了151帧的时候立刻增加到200。

接下来,就开始解决从上到下goalPP从1到0的赋值工作,这个工作当然是使用表达式了;为了产生一个从上到下的值,我们使用一locator从上向下的移动来产生一个在Y轴上面移动而产生的从大到小的值:

随着时间的增加,locator的Y轴移动属性返回一个从大到小的值。

有了这个从大到小的值,接下来就是怎样用到粒子的goalPP的赋值工作里了,在这里我们先用语言将表达式的内容写出来:

当粒子的Y轴位置大于locator的Y轴位置时候,粒子的goalPP等于0,否则等于1。

继续细化一下:

if(当粒子的Y轴位置>=locator的Y轴位置)

{粒子的goalPP等于0;}

else

{粒子的goalPP等于1;};

在这里,我们使用了if(…){…;}else{…;};这个语句。这是标准的判断语句,当满足if后面括号里面的语句,就执行后面大括号里面的语句,否则执行else后面的大括号里面的语句。

下面就继续细化语句:

现在就剩下particleShape1.position的Y轴值没有翻译成标准表达式语句了,在这里,MAYA只能够接受“物体.属性”不能接受“物体.属性.属性”所以,“particleShape1.position.y”是不能被接受的。那么如何得到particleShape1.position的Y轴值呢?我们使用一个技巧:

vector $pos=particleShape1.position;//自定义一个矢量值将粒子的位置信息保存在里面。

于是我们就可以通过$pos.y得到粒子的Y轴信息了。

所以表达式就可以这样写:

else

{particleShape1.goalPP=1;};

将这段表写到粒子的RunTimeExpression里面去,这样粒子的Y轴位置高于locator的粒子,就会由于goalPP=0而受到动乱场(turblence)的影响而散开了。所以locator从上到下移动,粒子就会从上到下的散开。

《蝙蝠侠》的片头类似动作已经完成了,只是蝙蝠变成了粒子,以后我们会学习怎样把粒子变成蝙蝠:

蝙蝠飞向目标:

蝙蝠停落下来:

蝙蝠停下来:

蝙蝠飞散开来:

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

我要反馈