Maya Sprite粒子应用高级教程
- 2022-02-05
- 来源/作者: PS.ONEGREEN.ORG / 佚名
- 9 次浏览
首先看一下效果。
人群是由sprite形态的粒子构成,我们在粒子的材质上贴上一个跑步循环的序列图片,再用表达式来控制跑动方向等参数,如图。
现在我们开始吧。
1、首先设置动画从0帧到250帧,然后创建一个Emitter,设置如下:
Emitter Type: Volume
Volume Shape:Cube
Rate: 200
Speed: 0Away From Center:0
Away From Axis:0
Scale X, Y, Z =4
选择Particle设置如下:Max Count:50 (设置粒子在场景中的最大数,即存在50个粒子后将不再发射,除非有粒子消亡)
Particle Render Type:Sprites (最重要的) 。
2、给粒子一个lambert材质,为Color贴上跑步周期图片(在教程最后提供),由于提供的图片包含Alpha通道,所以自动与lambert 的Transparency 相关联了。勾选Use Image Sequence和Use Interactive Sequence Caching。
第0
帧4、 给spriteNumPP添加一个Runtime表达式(Before Dynamics或After Dynamics在这里无所谓,这里我们都用Before Dynamics):particleShape1.spriteNumPP += 1;相当于particleShape1.spriteNumPP = particleShape1.spriteNumPP +1;可以看到在前49帧,Sprite能显示动画了。
5、我们将Particle Render Type设为Numeric,attributeName输入spriteNumPP播放动画,可以看到数值以每一帧都增加1 的方式变化,这就是我们这个表达式的作用。然后再切换回来Particle Render Type为Sprite。
6、我们现在想要每50帧一个循环,即第49帧结束后又从第一张图片开始循环。现在我们再为spriteNumPP添加一个Runtime表达式particleShape1.spriteNumPP = particleShape1.spriteNumPP % 50;%即求余,返回两数相除的余数。如51%50=1;7%5=2;这时我们看到动画正确播放了。
7、为了让每个粒子的跑动更随机化,我们为spriteNumPP添加一个Creation表达式particleShape1.spriteNumPP = rand (0,50);//这里rand 函数返回0到50间的一个随机值。
8、同样的,我们将Particle Render Type设为Numeric,attributeName输入spriteNumPP,观察spriteNumPP数值的变化情况。
[NextPage]
9、地面制作。建立一个40×10的Nurbs 平面,如图,随意雕刻一些起伏(自己随意),注意UV方向应和图上一致(可以按F8进入CV点层级观看UV向),以保证与后面的教程一致。
10、先选择Particle,然后选择地面,设置Goal,Goal Weight 为1。
这时选择Emitter,设回Emitter Type: Omin,并将particleShape1的Max Count设回-1,前面的设置只是为了便于观察,方便
图片序列设置。播放动画,观察。
11、粒子寿命我们用lifespanPP来控制,选择粒子,在Lifespan Mode里选择lifespanPP only,然后在Per Particle Attributes里为lifespanPP添加一个Creation表达式particleShape1.lifespanPP = rand (6,8); 。
12、现在我们要利用两个参数goalU 和goalV来控制粒子,同添加spriteNumPP的方式一样我们为粒子添加goalU和goalV两个属性播放动画,这时所有粒子都停在了一个点,为什么?因为我们添加了goalU和goalV,但还未为其赋值,默以则goalU=0;goalV=0;所以出现了这样的情形。
13、根据地面Nurbs平面的UV向,我们为goalV添加一个Creation表达式particleShape1.goalV = rand (0,1); 即在V向上随机分布播放,如图。
[NextPage]
14、现在我们想让粒子物体从视图右边跑到左边,很简单,只需为goalU建立一个Ramp来控制。右击goalU-Creat Ramp,我们可以很方便的通过改变Ramp上的滑块位置来改变粒子跑动的速度。
15、现在我想让每个人有高矮胖瘦不同,让动画更自然。这需要添加spriteScaleXPP和spriteScaleYPP两个粒子属性(方法同上),然后创建Creation表达式particleShape1.spriteScaleXPP = rand (.75,1.25);particleShape1.spriteScaleYPP = rand (.9,1.1); 。
16、差不多像了,现在需要做的是让每个人的脚踩到地面上,而不是让地面从腰间穿过。这时我们又需要添加一个goalOffset属性了,顾名思义,goalOffset就是goal的Offset(偏移),它的参数类型是vector(向量),如goalOffset=<<x,y,z>>
添加Creation表达式partic
leShape1.goalOffset = <<0, particleShape1.spriteScaleYPP*.5, 0>>;因为之前的地面是从每个人的Y轴中心穿过,即spriteScaleYPP的中点,所以我们只需将粒子在Y轴上移动spriteScaleYPP的一半(即乘以0.5)。现在基本上正确了。
17、为粒子添加不同的颜色。当然我们可以为Color属性添加一个Per Object Attribute来整体控制,这里我们使用Per Particle Attribute,然后为rgbPP加入一个Ramp,Input V选择rgbVPP,因为Particle’s Age用来控制goalU的ramp属性了,所以这里用rgbVPP。
[NextPage]
18、设置ramp的Interpolation为None,随便调一些颜色。
19、然后为rgbVPP添加Creation表达式particleShape1.rgbVPP = rand (0,1);这样粒子产生的随机的颜色,可以通过滑块位置来控制该颜色的显示比例。