导言:
本教程主要介绍如何Maya硬件粒子来模拟烟花的绚烂效果,里面涉及较高级的Maya粒子表达方式的使用方法,其中包括如何用速度控制粒子的生命,如何通过ParentId粒子的子父粒子属性继承其父粒子的颜色等等!
按F5快捷键,切换到动力学模块,选择Particles->Create Emitter(粒子->创建发射器),创建一个独立的粒子发射器,设置参数,体积发射器,方形,发射数量为2,方向为Y轴向上,随机方向为1,随机速度为3,方向速度为10,其它速度为0 。确定发射器是在世界坐标原点的位置,调整方形放射器的大小为(2,0.1,2)。这样可以使粒子都从地面发射出来(也可以使用面发射器)。调整时间划条为1至500。播放动画,因为粒子发射数量很少,所以在视图里只能看到很少的粒子。(图01)
图01
命名发射器为baseEmitter,命名粒子为mainPart(后面会有多个粒子出现,明确地命名可以防止混淆物体)。选择粒子mainPart,选择Fields->Gravity(场->重力场),为其创建重力场,命名刚创建的重力场为mainGravity,设置重力场mainGravity的参数:强度为2,衰减为0,方向为Y轴向下。(图02)
图02
选择粒子mainPart设置它的生命类型为每粒子,粒子的最大数量为1,lifespanMode为lifespanPPonly,maxCount为1。为粒子mainPart的每粒子生命写表达方式。在粒子的属性编辑器里找到每粒子属性卷展栏(perParticle(Array)Atrributes)。在属性lifespanPP右边的长方框里点右键,在出现的菜单中选择Creation Expression(创建时表达方式)打开表达方式编辑窗口。(图03)
图03
为粒子mainPart的每粒子生命写创建时表达方式:
lifespanPP=20;
注意这句表达方式后面的分号,它代表这句表达方式的结束。这句表达方式是给每个粒子在它出生时定义了一个生命值,这个生命值的大小不是特别重要,我们还要在运行时的表达方式里来改变它的生命值,这里只要给它一个生命,让它不活就行了。(写表达方式时要注意字母的大小写)。输入完表达方式,点击下边的Create创建按钮,创建表达方式(创建按钮在创建成功时会变成Edit编辑)。(图04)
图04
小技巧:在表达方式编辑窗口里按住Ctrl键,然后滑动鼠标中键可以放大编辑的字母。#p#e#
为粒子mainPart的每粒子生命写运行时表达方式,播放可以看出粒子出生时向上升起,在达到一定高度时,因为受重力的作用就会往下落,这里主要控制的是只要粒子往下落,就让粒子活亡。在表达方式编辑窗口中,把粒子表达方式点到运行时的编辑窗口中,在窗口中间有一个Particle粒子表达方式大体上是分两种:第一种是在粒子的创建时表达方式,是在粒子出生的那一帧为粒子计算一次,也就是说,创建时表达方式只计算一次。第二种是运行时表达方式,运行时表达方式是在粒子出生之后的每一帧为粒子计算一次。而运行时表达方式又细分为两种:一种是动力场之前计算,另一种是动力场之后计算。Particle后边的三个单选按钮就是这三种表达方式:
Runtime before dynamics、Runtime after dynamics和Creatio,分别是运行时场前表达方式、运行时场后表达方式和创建时表达方式。
选择运行时场后表达方式,为粒子mainPart的每粒子生命写运行时表达方式:
Vector $vel=velocity;
If($vel.y<0) lifespanPP=0;(图05)
图05
完成每粒子生命表达方式,播放时会发现粒子在上升时不会活亡,而只有粒子在往下落时就会活亡。接下来设置粒子的渲染类型,在粒子的属性编辑器中,找到Render Attributes渲染属性。在Particle Render Type后边的下拉菜单中选择multiStreak多条纹渲染类型。然后点击Add Attributes For后边的Current Render Type添加当前渲染类型的渲染属性按钮,(如果看不见属性,就点击属性编辑器下边的Load Attributes载入属性按钮)。(图06)
图06
修改粒子多条纹的数量属性Multi Count为30,多条纹半径Multi Radius的数值为0.15,尾部的透明TailFade为-1。为粒子mainPart添加颜色和透明。在属性编辑器中找到Add Dynamic Attributes卷展栏。(图07)
图07
先点击Color添加颜色按钮,打开添加颜色窗口,在打开的窗口中选择Add Per Particle Attribute。点击Add Attribute按钮,添加每粒子颜色属性。这时在每粒子属性卷展栏里会看到RGB PP属性。(图08)
图08#p#e#
用同样的方法添加每粒子透明属性,点击Opacity按钮,打开添加透明属性的窗口。在打开的窗口中选择Add Per Particle Attribute。点击Add Attribute按钮,添加每粒子透明属性。在每粒子属性卷展栏里会看到Opcity PP属性。(图09)
图09
在每粒子透明属性Opacity PP右边的栏里点右键,在出现的菜单中选择Create Ramp为属性添加一个斜面纹理。然后再在已添加斜面纹理的每粒子透明属性Opacity PP右边的栏里点右键,在出现的菜单中选择Array Maper1.out ValuePP->Edit Ramp打开斜面纹理属性窗口。修改斜面纹理的颜色块的位置和V值。(图10)
图10
返回到粒子属性窗口,为rgbPP每粒子颜色添加另一个斜面纹理,方法与透明不同,需要在出现的右键菜单中选择Create Ramp后面的小方块,打开斜面纹理创建窗口。在斜面纹理创建窗口中把Input V项改成rgbVPP。(图11)
图11
点击OK按钮,为每粒子颜色属性创建斜面纹理,但同时也创建了一个新属性,rgbVPP,可以在每粒子属性卷展栏里看见它。打开表达方式编辑窗口,为rgbVPP写创建时表达方式:
rgbVPP=rand(1);(图12)
图12
注意:之前写的创建时表达方式不可以删除掉,粒子mainPart的所有创建时表达方式都存在与这个窗口中。#p#e#
点击Edit编辑按钮。这时可以按Alt+B快捷键,将视图的背景眼色改为黑色,播放动画,能清楚的看到粒子的颜色是五颜六色的(也可以修改rgbPP每粒子颜色的斜面纹理,给它一个特定的色相)。(图13)
图13
接下来,创建一个新粒子,模拟烟花在高空咋开的效果。这个新粒子要从第一个粒子mainPart身上发射出来,而且是在mainPart要活亡时才发射出来,才是这里想要的效果。所以,选择粒子mainPart,选择Particles->Emit From Object(粒子->从物体发射后边的小方块,打开创建从物体发射选项窗口,设置发射器的参数,点发射器,速度为6,随机速度为4。点击Create创建按钮,创建第二个粒子,命名粒子为sparkPart。(图14)
图14
选择粒子mainPart(第一创建的粒子),选择Particles Per->Point Emission Rates(粒子->每粒子发射数量,为粒子mainPart添加每粒子发射数量属性emitter1RatePP,在粒子mainPart的属性编辑器中找到该属性)。(图15)
图15
每粒子发射数量属性emitter1RatePP,是控制粒子mainPart发射粒子sparkPart多少个的属性,给该属性添加一个斜面纹理,与添加透明斜面纹理时相同,编辑该纹理,将Interpolation插值改为none,删除一个颜色,只留下两个,下边的是纯黑色,上边颜色的位置在0.95,颜色是白色,但V值要设置的很高,这里可以是2400,也可以或多或少,但太少会看不到粒子出现。(图16)
图16#p#e#
选择粒子sparkPart,选择Fields->Gravity(场->重力场),创为其创建重力场,命名重力场为 sparkGravity,设置重力场sparkGravity的强度为3。(图17)
图17
选择粒子sparkPart,修改它的conserve继承属性为0.97,生命类型为randomRange随机范围lifespan生命范围为2,lifespanRandom随机范围为1。为粒子sparkPart添加每粒子颜色rgbPP和每粒子透明opacityPP,与第一个粒子mainPart的添加方法相同。在粒子sparkPart的属性编辑器中找到新添加的每粒子颜色rgbPP和每粒子透明opacityPP属性。为粒子sparkPart的透明opacityPP添加一个斜面纹理,方法与粒子mainPart的方法相同。(图18)
图18
给粒子sparkPart添加颜色的方法很多,这里介绍一种可以继承它的父粒子颜色的方法,就是发射它的粒子mainPart是什么颜色,就给它也定义成什么颜色。所以要添加一个新属性parentId,这个属性记录了它的父粒子的ID号。在粒子sparkPart的属性编辑器里,点击Add Dynamic Attributes添加动态属性卷展栏里,添加每粒子颜色左边的general按钮,打开添加粒子动态属性窗口。(图19)
图19
在添加粒子动态属性窗口中,默认是new标签,点击中间的particle标签,在下边的列表中找到parentId属性。点击OK按钮,添加属性,属性会出现在每粒子属性栏里。(图20)
图20#p#e#
为粒子sparkPart的rgbPP每粒子颜色写创建时表达方式:
Int $pid=parentId;
Float $rgb[]=`getParticleAttr –at rgbPP mainPart.pt[$pid]`;
rgbPP=<<($rgb[0]),($rgb[1]),($rgb[2])>>;(图21)
图21
修改粒子sparkPart的渲染类型为multiStreak多条纹,设置参数,勾选颜色叠加,设置多条纹的数量为24,多条纹的半径为0.1,尾巴的透明为-1。(图22)
图22
给两个粒子分别添加拖尾效果。先给粒子mainPart添加拖尾,选择粒子mainPart,选择Particles->Emit From Obects后边的小方块,打开物体发射选项窗口,设置发射器的速度为0。点Create创建按钮,创建第三个新粒子,命名为mainTailPart,选择新粒子mainTailPart,选择Fields->VolumeAxis(场->体积轴场),为其创建体积轴场,命名体积轴场为mainVolumeAxis,调整场的缩放为(50,50,50),设置体积轴场mainVolumeAxis的参数。(图23)
图23
修改粒子mainTailPart的生命类型为随机范围。修改粒子mainTailPart的渲染类型为multiPoint多点。(图24)
图24#p#e#
为粒子mainTailPart添加每粒子颜色rgbPP,每粒子透明opacityPP,和父粒子ID号属性parentId。(图25)
图25
为粒子mainTailPart的每粒子透明属性opacityPP添加一个斜面纹理,方法与前面相同,修改斜面纹理的属性。(图26)
图26
为粒子mainTailPart的每粒子颜色属性rgbPP写创建时表达方式:
int $pid=parentId;
float $rgb[]=`getParticleAttr -at rgbPP mainPart.pt[$pid]`;
rgbPP=<<($rgb[0]),($rgb[1]),($rgb[2])>>;(图27)
图27
这时会发现拖尾的粒子太实了,需要它再透明一些,可以在每粒子透明的属性opacityPP上点右键,在出现的菜单中,选择Array Maper1.out ValuePP->Edit Array Maper打开斜面纹理巨阵编辑窗口,设置MaxValue为0.08。(图28)
图28#p#e#
为粒子sparkPart添加一个拖尾粒子。方法与第一个拖尾相同,不同的地方,要注意这拖尾粒子是从sparkPart上发射出来的,它继承的颜色也是sparkPart的颜色,还有就是它不需要体积轴场。命名新拖尾粒子的名字为sparkTailPart。表达式为:
Int $pid=parented;
Float $rgb[]=`getParticleAttr –at rgbPP sparkPart.pt[$pid]`;
rgbPP=<<($rgb[0]),($rgb[1]),($rgb[2])>>;(图29)
图29
这时发现粒子sparkTailPart后边有点太细了,适当给它的发生器一点速度数值,可以使它向外散开一点,调整发射器属性,调整速度和随机速度为0.1。(图30)
图30
然后创建最后一个粒子,为粒子mainPart添加另一个拖尾效果,选择粒子mainPart,选择Particles->Emit From Obects后边的小方块,打开物体发射选项窗口,设置发射器的类型为点发射器,速度和随机速度都为1 。命名刚创建出来的粒子为mainTailPart1。(图31)
图31
修改粒子mainTailPart1的生命类型为随机范围,生命值为1,随机生命为0.5,修改粒子mainTailPart1的渲染类型为多点,勾选颜色叠加,多点数量为10,多点半径为0.05,点的大小为1。为粒子mainTailPart1添加每粒子颜色rgbPP,每粒子透明opacityPP。分别为粒子mainTailPart1的rgbPP和opacityPP添加两个默认的斜面纹理,适当修改两个纹理的V值和颜色。(图32)
图32#p#e#
调整基本色调,这里的颜色控制,主要在粒子mainPart上,它的颜色决定了后面所有粒子的颜色,现在来调整一下烟花的色调。选择粒子mainPart,在属性编辑器里编辑它的rgbPP的斜面纹理的颜色。(图33)
图33
在Outliner中,将所有的物体选择,这里只选择最上层的物体。(图34)
图34
按Ctrl+G快捷键,打组,名命新组为yanhuaGrp。到此为一组颜色偏暖的烟花效果,保存文件,命名文件为yanhua。另存文件,命名文件yanhua_ok。选择File->Import导入窗口中选择yanhua文件,点击Import按钮,导入同样的烟花粒子。(图35)
图35
调整新导入的烟花粒子发射器的位置,在Y轴旋转45度。选择新导入的粒子yanhua:mainPartShape,调整它发射器的随机属性。(图36)
图36#p#e#
调整新导入的粒子yanhua:mainPartShape的每粒子颜色属性,使其与前边的颜色不同。(图37)
图37
修改导入粒子的表达方式,这步很重要。选择粒子yanhua:sparkPart,打开创建时表达方式编辑窗口,看一下修改前的。(图38)
图38
本来表达式是可以自动修改物体名的。但因为这里的表达式里使用了MEL命令,物体的名字在这里没有自动更新,所以要手动修改表达式,修改之后的表达式。(图39)
图39
粒子yanhua:mainTailPart,yanhua:sparkTailPart的表达方式做同样的修改。(图40)
图40
注:这里为了得到更随机的效果,很多东西都可以调整,比如场的参数,粒子的各个参数等等。#p#e#
重复前五步,导入第三组粒子,完成最终效果。(图41、42)
图41
图42(点击放大)
上一篇 Maya教程:超写实安吉丽娜朱莉
热门课程
专业讲师指导 快速摆脱技能困惑相关文章
多种教程 总有一个适合自己专业问题咨询
你担心的问题,火星帮你解答023年以来,在版号审批、出海政策等影响下,新品游戏大量涌现,这也为游戏市场带来了一些新变量、新现象。
学习游戏开发班可以帮助游戏爱好者从零基础成为游戏开发专家,掌握全面的游戏开发技能。
火星时代教育为您提供专业的界面设计实战班,在实践中掌握界面设计的核心技巧和最新趋势,成为优秀的UI设计师。
了解UI交互设计培训的最佳选择,比较不同培训机构的优势和特点。
火星时代教育为您推荐专业的学影视后期培训机构,提供高质量的培训内容及资深导师指导,助您成为优秀的影视后期剪辑师或合成师。
火星时代教育是一家专注于交互设计培训的机构,为学员提供专业的交互设计培训课程,并帮助他们成为优秀的交互设计师。
1. 打开微信扫一扫,扫描左侧二维码
2. 添加老师微信,马上领取免费课程资源
同学您好!