第一节 Sprite粒子的基本属性
制作满天的星光是Sprite(精灵)粒子最简单的一种应用了,却着实使用了Sprite(精灵)粒子的最大的特性和常用的方法:
先用PareticlesTool在场景里面创建一大团的粒子:
(在用户给Sprite指定图像之前,需要创建Lambert材质并将它指定给粒子物体。Lamber材质将用于控制纹理图像。Lamber材质没有高光反射等属性,所以,用于显示sprite是最好的。)
接下来把粒子的类型变成Sprite(精灵)粒子类型,并赋予新的Lambert材质:
Sprite(精灵)粒子最大的好处就是无论摄影机的位置怎么转,Sprite(精灵)粒子总是正面对着摄影机,所以只要在这些小方块粒子上贴上星星的图片就可以制作成一团星星了,那么星星图片的制作就很简单了,只需要在Photoshop里面制作一个带有星星形状的Alpha通道的图片就可以了,图片格式是.Tga就可以了。
之所以要有通道是因为:有通道就会自动产生透明,通道以外的就看不见了,存储成为Tga的格式,这样Maya可以自动连接通道属性值到Sprite(精灵)粒子材质的透明属性上产生很自然的透明,几乎没有毛边的感觉。
打开Photoshop创建一个新文件使用256*256的大小:
然后如图将整个图层填充为白色,在通道里面增加一个通道层并且绘画一个星星的形状,然后填充上白色。最后存储为Strat.tga:
接下来回到Maya中,为Sprite(精灵)粒子材质进行贴图,就只需要简单的为材质的Color属性增加一个文件节点,然后使用Strat.tga就可以了:
再看场景里的Sprite(精灵)粒子就已经全部变成灰色的星星了:
为了产生星星颜色的混乱性,我们为Sprite(精灵)粒子添加rgbPP粒子属性:
添加了rgbPP粒子属性以后,默认的场景里面的粒子变成了黑色的,因为默认的Rgb=<<0,0,0>>表示黑色:
所以接下来就为粒子的rgbPP粒子属性添加颜色控制以产生随机的又可以控制的颜色,如果我们直接用表达式:rgbPP=sphrand(1);就可以产生一个随机的颜色;
但是这样的随机颜色并不可控制,或者说是很难随心所欲的控制颜色的随机范围。由于星空是冷色调的,所以我们必须将随机颜色控制在冷色调里面,同时又要随时作调整,如果能够有更好的办法就最好不要使用简单的一个表达式控制颜色。
所以我们使用Ramp制定控制技术:
首先,为粒子的rgbPP粒子属性添加Ramp,操作时用鼠标右键单击rgbPP粒子属性然后在弹出的菜单里面不要直接选择CreateRamp,选择后面的OptionBox:
接下来会弹出一个对话框:
这个对话框的名字是:CreateRampOptions。在前面的章节中都没有涉及,因为默认的,在IputV选项的设置是Particle’sAge。这就产生了随着粒子的生命周期的变化依次得到从下到上的Ramp颜色的效果。
在这里我们希望得到的就不再是随着粒子的生命周期的变化而变化的颜色了,我们希望得到的应该是在Ramp的V方向上的随机的颜色,所以我们选择了rgbVPP。
rgbVPP这个属性名称并没有任何意义,只是一个属性变量而已,它的属性值是Float(浮点数)的默认是0,如果读者愿意也可以自己为粒子添加一个PerParticle的属性变量只要是Float(浮点数)变量,它就会在这个选择框里出现。
这里我们就使用这个系统自己创建的变量了:
选择OK以后在粒子的PerParticleAtributes里面会自动添加了一个属性名字就是rgbVPP:
在rgbVPP的后面有一些符号“→…”这些符号的意思就是该属性的值控制了其他的属性的输出值,在这里它控制的就是rgbPP的输出值了。
既然我们希望得到的是rgbPP里面的Ramp的V方向上的随机颜色,而rgbVPP的值又被输出到Ramp的InpuV里面,所以只需要使rgbVPP的值成为大小在0和1之间的随机值就可以了,所以为rgbVPP添加表达式:particleShape1.rgbVPP=rand(0,1);
于是得到下面的情况:
星空的颜色是:红、绿、蓝随机分布的,这是因为rgbPP里面的Ramp是默认的颜色,还没有改动过:
由于使用的是VRamp所以InpuV就直接控制了从下至上的颜色输出,最下面是0(红色),最上面是1(蓝色),由于InpuV受到rgbVPP的控制变成了随机值,所以产生了颜色随机分布的结果。
我们可以通过控制Ramp的颜色结构来控制分布在星空的颜色:
最后,星空的星星会有大有小的,为Sprite(精灵)粒子添加spriteScaleYPP和spriteScaleXPP属性:
SpriteScaleX沿X轴按百分比缩放图像。例如,值为0.5时,以50%收缩图像;值为2时,按200%伸展图像。
SpriteScaleY沿Y轴按百分比缩放图像。例如,值为0.5时,以50%收缩图像;值为2时,按200%伸展图像。
通过上面的两个属性我们就可以在横向和纵向控制Sprite(精灵)粒子的大小了:
接下来就围着两个属性进行表达式的控制:
particleShape1.spriteScaleYPP=rand(0.5,1);//在Y轴方向上粒子比较长一点
particleShape1.spriteScaleXPP=rand(0.1,0.5);//在X轴方向上粒子比较窄一点
这两个表达式非常简单,却产生了星星随机大小的效果:
把摄像机移动到粒子群中间去效果就更好了:
星空有了颜色还不够,接下去就是要让星星闪闪了,否则星空不就太无聊了?要让星星闪闪其实就是让每个Sprite(精灵)粒子都一会儿透明一会儿不透明,所以接下来就是为Sprite(精灵)粒子添加opacityPP属性:
接下来为opacityPP属性添加一个RuntimeExpression表达式:
particleShape1.opacityPP=abs(sin(time*3+particleShape1.particleId));
//abs是一个绝对值函数返回只返回正数,sin就不用说了,返回-1到1的循环。由于particleId的不同,每个粒子的opacityPP都不相同,所以结果就是星星杂乱的闪烁:
表达式窗口如下:
效果如下:
由于是RuntimeExpression表达式控制透明,所以每播放一帧,这个表达式就会执行一次,每个星星的透明度就会有所改变。所以感觉好似闪烁的星空。
由于使用Creation表达式控制粒子的颜色,所以每次点播放按钮,然后回到开始时间的时候表达式就会执行一次,也就是每次重新播放动画星星的颜色就会重新随机分布一次。
如果要渲染Sprite(精灵)粒子就必须使用硬件渲染。有两种方法:
1.使用MayaHardware渲染器;
2.使用菜单命令Windows→RendingEditors→HardwareRenderBuffer打开硬件渲染窗口:
菜单命令:
HardWareRenderBuffer
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。