首页 百科知识 粒子的简单应用

粒子的简单应用

时间:2022-10-16 百科知识 版权反馈
【摘要】:这个Rotate_RatePP的属性现在还没有对粒子产生任何影响,我们将会在spriteTwistPP的RunTime表达式使用它:注意:在渲染的时候要想渲染出ColorAccum的效果必须使用MayaHardware渲染,而使用MayaHardware进行批量渲染就必须先为粒子设置粒子缓存,否则最终结果会有意想不到的闪烁。

第二节 Sprite(精灵)粒子的简单应用

通过星空,可以熟悉Sprite(精灵)粒子的一些最基本的属性,就凭借着最基本的属性我们就可以制作专业级的影视特效了,还记得怪物是瑞克里面那个胖胖天使手中的魔棒吗?总是有很多星星从那只魔棒里面飞出来,星星转阿转的就变出了一些什么东西。这些绕来绕去的星星用Sprite(精灵)粒子最基本的属性就可以制作出来:

img667

img668

img669

img670

鸭子的出现是在后期里面使用AfterEffect制作的,很简单的后期特效,使用Maya制作那些转圈圈的星星。

为了产生绕着鸭子旋转的星星,我们使用一个粒子发射器然后使用路径动画绕着鸭子旋转上升,所以首先创建一条曲线绕着鸭子上升(起点在鸭子的脚底,终点在鸭子的头上):

img671

进入动力学面板,使用菜单命令Particles→CreateEmitter创建一个粒子发射器:

img672

使用菜单命令将粒子发射器利用曲线制作路径动画,使得粒子发射器沿着曲线向上运动:

img673

将粒子的惯性(Conserve)设置到0.9:

img674

于是得到旋转上升的粒子:

img675

粒子非常有规律,这不是我们需要的,所以为粒子添加两个动力场,重力(Gravity)和混乱场(Turberlence):

img676

于是粒子就在原有轨迹上面适当混乱和下坠了:

img677

接下来修改粒子的生命周期,星星不会一直存在,所以要有时间性:

img678

经过以上设置,粒子的基本动力学属性差不多了,在把粒子变成星星之前,我们继续使得粒子的运动不规律一些:因为现在粒子的受力情况都是一样的,所以运动的时候速度都是一样的,我们希望每个粒子的运动速度都不一样,这样就更好了。

要实现这个功能,就需要控制每一个粒子的质量(mass),因为质量不同的物体受相同的力,运动速度是不一样的,所以为粒子的PerParticleAttribute属性:mass添加Creation表达式:

particleShape1.mass=rand(0.1,1);//每个粒子的质量从0.1至1不等。

所以效果很明显不一样了:

img679

img680

img681

经过表达式控制的粒子明显产生了不同,有的粒子飞快的散开了,这样的效果才有更多的细节。

接下来就是把默认的Point粒子变成Sprite(精灵)粒子,然后为粒子赋予新的Lambert材质,并为其颜色(Color)属性进行贴图(使用文件纹理节点),在文件纹理节点中使用的星星的图我们同样自己制作,这次制作更多的细节,同样是使用Photoshop软件进行制作:

打开Photoshop软件,新建一个文件大小为128*128(通常贴图的大小是2的n次方的大小),然后制作颜色层和通道层如下图。

颜色使用了黑白的明暗过渡,这就会使星星产生边缘暗淡中间光亮的细节;同时通道的细节也增加了:

img682

将文件存储为start.tga,这样就保存了通道信息,在maya中,将该文件赋予文件文理节点的文件输入,于是最基本的星星出来了:

img683

接下看来就是给每个粒子不同的随机(紫色调)颜色,所以按照前面星空的原理,添加rgbPP属性,增加Ramp控制:

img684

img685

在创建Ramp时注意InputV的选项:

img686

img687

于是,粒子就有了Ramp里面的颜色的随机的一种:

img688

接下去使用同样的原理制作随机的透明OpacityPP,但是使用Linersmooth的Ramp。

img689

颜色和透明都设置好了,接下去就是渲染测试了,使用硬件渲染(MayaHardware)。

img690

默认得到的结果会是这样的:

img691

这与在软件界面中的效果是一样的,甚至更差一点,所以我们打开ColorAccum再次渲染:

img692

产生了颜色堆积的效果,默认的Sprite是不能使用ColorAccum选项的,但如果使用其他的粒子类型打开ColorAccum再回到使用Sprite粒子类型就可以了。

img693

颜色差不多了,接下来控制粒子的大小,因为现在的粒子都是一样大小,所以为粒子添加spriteScaleYPP和spriteScaleXPP属性来增加粒子形状的细节,并且使用简单的Creation表达式控制着两个属性:

img694

img695

到了这里似乎都做好了,可是还有两个细节没有做好:

1.星星是要闪烁的,这里只是随机的透明了而已;

2.星星应该有旋转的,因为是运动所以要旋转,而且角度要都不一样才好;

首先解决第一个细节,在星空的例子里面我们使用的是直接给opacityPP写表达式来产生闪烁的效果,这里我们使用了和颜色一样的精确控制透明度的Ramp纹理,同时使用opacityVPP的表达式在opacityPP的纹理上随机拾取颜色;

所以要制作闪烁就要为opacityVPP写Runtime表达式,返回值应该是在0~1之间来回连续变化的,所以和星空的那个表达式的概念是一样的:

particleShape1.opacityVPP=linstep(−1,1,noise((time*10)+particleShape1.particleId));//noise返回值的范围是−1到1之间的随机值(并且有连续性),linstep则将返回值固定在0~1之间。

所以得到的返回值就是一个有连续性的,范围在0到1之间的,每个粒子都不一样的(因为是建立在Id的基础之上的)数值,所以星星就闪烁了,且频率可以通过修改表达式中:“time*10”的参数来改变。

以下两张图片相隔6帧:

img696

img697

解决了闪烁,接下来就是最后的细节:旋转了。

Sprite(精灵)粒子的旋转可以通过spriteTwistPP属性控制,所以首先为粒子添加spriteTwistPP属性:

img698

接下来就是控制spriteTwistPP属性了:

SpriteTwist设置场景中图像位置的旋转角度。值为45时,粒子将沿逆时针旋转45°。

所以为这个属性写两个表达式,一个是在粒子产生的时候的产生随机旋转角度的Creation表达式;另一个是在运行时候不断增加旋转角度的RunTime表达式:

创建时候的表达式:

particleShape1.spriteTwistPP=rand(0,360);

Creation表达式:

img699

效果:

img700

现在粒子只有初始的角度,在运动的过程中并不能够旋转,所以必须写RunTime表达式,每一帧都让spriteTwistPP有所变化;在这里为了增加细节使得每一个粒子的旋转速度都不一样,我们使用增加一个PerParticle的粒子属性。

取名为Rotate_RatePP,并且为其赋值:rand(−1,1):

img701

这个Rotate_RatePP的属性现在还没有对粒子产生任何影响,我们将会在spriteTwistPP的RunTime表达式使用它:

最后一步就是为粒子添加spriteTwistPP的RunTime表达式:

img702

(以上表达式可以写作:particleShape1.spriteTwistPP+=particleShape1.Rotate_ RatePP*3;)

这样粒子就会旋转了,并且旋转方向和大小都不一样:

img703

img704

所有的细节都设置完成,最后一步就是渲染了。

注意:在渲染的时候要想渲染出ColorAccum的效果必须使用MayaHardware(硬件渲染器)渲染,而使用MayaHardware(硬件渲染器)进行批量渲染就必须先为粒子设置粒子缓存,否则最终结果会有意想不到的闪烁。

将渲染器调整为MayaHardware(硬件渲染器):

img705

必须事先为粒子创建粒子缓存:

img706

最后设置摄影机的动画,进行渲染粒子。等完毕以后再渲染中间的鸭子,当然了不需要有材质动画,鸭子的出现消失我们可以在后期中完成:

以AfterEffect为例:

将渲染好的文件导入AfterEffect,一共两个序列,一个是鸭子,一个是粒子:

img707

为鸭子的那个序列制作特效如下:

首先是制作Noise效果:

img708

接下来为Noise效果上色:

img709

最后,调色,制作特效动画:

img710

然后使用简单的透明变化制作鸭子出现的动画:

img711

img712

img713

最后通过两个图层的合成就实现了这个效果:

img714

img715

img716

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

我要反馈