您现在的位置: 博杰 >> 文章频道 >> 3 D 教程 >> 动画教程 >> MAYA教程 >> 正文
[教程] Sprite粒子应用高级教程     
[教程] Sprite粒子应用高级教程
[ 作者:佚名 | 转贴自:本站原创 | 点击数:3609 | 更新时间:2006-11-4 | 文章录入:liubo ]

首先看一下效果。

  人群是由sprite形态的粒子构成,我们在粒子的材质上贴上一个跑步循环的序列图片,再用表达式来控制跑动方向等参数,如图。

 现在我们开始吧。

  1、首先设置动画从0帧到250帧,然后创建一个Emitter,设置如下:
  Emitter Type: Volume
  Volume Shape:Cube
  Rate: 200
  Speed: 0
  Away 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帧―――Image Number =0,set key。
  第49帧―――Imager Number=49,set key。
  Sequence Start =0。
  Sequence End = 49。
  按下键盘上的6显示贴图。

 3、要想让每个Sprite粒子按顺序显示我们贴的跑步序列图片,那么需要添加一个spriteNumPP属性,spriteNumPP就相当于是一个索引,与Imager Number 相对应。

  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数值的变化情况。

  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向上随机分布播放,如图。

  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表达式particleShape1.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。

 18、设置ramp的Interpolation为None,随便调一些颜色。

  19、然后为rgbVPP添加Creation表达式particleShape1.rgbVPP = rand (0,1);这样粒子产生的随机的颜色,可以通过滑块位置来控制该颜色的显示比例。

 20、动画基本上快完成了,但我们仔细一点会发现每个人不管是平路、上坡、下坡,都是竖直向下的,我们想要它与始终与地面保持垂直。

  21、如图所示,我们可以得出速度方向与世界坐标Y轴的夹角,然后对spriteTwistPP旋转相应的角度就能得到我们想要的效果了。

22、添加spriteTwistPP属性,然后为其添加一个Runtime表达式float $angle = angle (<<0,1,0>>,particleShape1.worldVelocity);angle用来求两个向量的夹角,<<0,1,0>>即Y轴particleShape1.spriteTwistPP = rad_to_deg ($angle) - 90;由于angle返回的值是弧度,我们通过rad_to_deg 来将其转化为角度,减去90度以得到正确的方向。

  23、选择Emitter,将粒子数目适当减少,比如Rate=30左右勾选ParticleShape1的Depth Sort,使其具有深度。

 

  24、动画就完成了。现在你可以随时改变地面的缩放,调节CV点,粒子都会自动作适应。最后你可以给地面贴图,加入背景等等。(注意摄像机位置必须在视图正面,因为sprite始终是与摄像机垂直的)

  附上跑步周期图片:

  runCycle.part01.rar (195.0k)


  runCycle.part02.rar (195.0k)
  
  runCycle.part03.rar (195.0k)

  runCycle.part04.rar (195.0k)

  runCycle.part05.rar (195.0k)

  runCycle.part06.rar (195.0k)

  runCycle.part07.rar (195.0k)

  runCycle.part08.rar (195.0k)

  runCycle.part09.rar (192.93k)

  对于在本教程的学习中遇到任何疑问或有更好的建议,请到技术论坛讨论。

上一篇文章:没有了
下一篇文章:[教程] 用maya的粒子作水流
发表评论 | 告诉好友 | 打印此文 | 关闭窗口
热门文章
 
推荐文章
 
相关文章
· [教程]Smart3D系列教程[2286]
· [随笔] 故宫保护总体规划2…[2989]
· [知识] 建筑动画知识大全[3624]
· [流程] 建筑动画的制作流程…[2943]
· [论文] 世界上最奇怪的桥[3483]
 
· [教程]Smart3D系列教程[2286]
· [论文] 流动城市:超低成本…[2925]
· [浅谈] 浅谈住宅小区规划中…[2647]
· [教程] 3D教程-建筑漫游设…[3303]
· [访谈] 城市建设要注重保护…[2479]
  · 没有相关文章
网友评论 只显示最新10条。评论内容只代表网友观点,与本站立场无关!
    没有任何评论
查看关于此文章的所有评论