达达首页 | 设计教程 | 辅助工具 | 字体字库 | 素材贴图 | 非 主 流 | PS 笔刷 | 签名模版 | 网页模版 | 达达贴吧
设为首页

加入收藏

联系我们
PhotoShop 教程 | Illustrator 教程 | CorelDraw 教程 | FireWorks 教程 | 3D MAX 教程 | MAYA 教程 | Flash 教程 | After Effects 教程
相关教程
普通教程 MAYA 制作烟火教程
普通教程 使用PF粒子制作“雨…
普通教程 MAYA用粒子给文字勾…
普通教程 MAYA教程:用粒子制…
普通教程 了解maya粒子—动力…
普通教程 利用MAYA制作下雪的…
普通教程 在Maya中使用粒子产…
普通教程 MAYA粒子教程:落花…
普通教程 MAYA粒子教程:制作…
普通教程 金沙MAYA——粒子动…
最新更新

Maya粒子特效动画…

Maya教程:柔体制…

MAYA教程:制作剔…

改变Sprites型粒子…
您现在的位置: 达达派 >> 教程中心 >> MAYA教程 >> 粒子篇 >> 教程正文
MAYA教程:用粒子制作动态龙卷风
作者:佚名 文章来源:网络采集 点击数: 更新时间:2007-4-30 10:48:39
教程录入:令彬    责任编辑:令彬  添加到雅虎收藏+

因为需要,查看了些资料,制作了动态的龙卷风,先看效果。

首先画一条曲线,不要分太多的段,对其进行从建,如下图。作用会在下面讲到。并将曲线改名为axis

制作一段骨骼,并给骨骼一个线条IK,将曲线绑定到骨骼上.利用骨骼运动带动曲线运动.大家可以用簇变形来做,怎么做大家都会吧.要将每个蔟子化到梗骨骼上,方便整体运动.如图

下面,关键时刻到了.建立一个粒子发射器.简单的进行设置,如图

现在给粒子的位置属性设置表达式:
float $para=sin(1.57*particleShape1.age/particleShape1.lifespan);
float $poi[]=`pointOnCurve -pr $para -p axis`;
float $rad=0.6+pow(particleShape1.age/1.5,6);
float $ang=particleShape1.age*3+(particleShape1.particleId+rand(0.1,0.3))*0.25;
float $x=$rad*sin($ang);
float $z=$rad*cos($ang);
particleShape1.position=<<($x+$poi[0]),$poi[1],($z+$poi[2])>>;

然后对梗骨骼的位移进行动画,龙卷风就会跑起来.下面,我来对表达式进行解释.

float $para=sin(1.57*particleShape1.age/particleShape1.lifespan);
这句大家可以发现"particleShape1.age/particleShape1.lifespan",
particleShape1.age的值是从0到particleShape1.lifespan,而particleShape1.lifespan的值始终是2,不变,所以"particleShape1.age/particleShape1.lifespan"的值就是从0到1,而1.57是弧度值对应的角度值是90度.所以
"$para=sin(1.57*particleShape1.age/particleShape1.lifespan)"的值就是从0到1,这是粒子中常用的技巧.而第2句
float $poi[]=`pointOnCurve -pr $para -p axis`利用到了$para,我来解释下这句,pointOnCurve是个获得曲线信息的命令 -pr是曲线参数命令,后面跟的是个数 ,而$para的范围正好覆盖了整个曲线,0-1(因为重建曲线时已经标总化,大家可以回头看看) -p  得到的是每个点的空间坐标,是个失量,axis是曲线名,必须跟在后面.然后将得到的每个点的空间位置存在一个数组$poi[]中.记住加单引号,是ESC键下面那个,别搞错了.
这样就找到了曲线上每点的空间位置信息.float $x=$rad*sin($ang);
float $z=$rad*cos($ang);这两句比较好理解,是圆周运动必要的.前面的
$rad是半径.float $rad=0.6+pow(particleShape1.age/1.5,6);用一个函数定义了半径的变化,也就是龙卷风从下到上的半径变化.为什么用这么一个函数呢?因为他的曲线符合我的要求,你们也可以用别的函数来定义.

a越大,龙卷风的半径越大,b越大转弯处离根部越远,N越大则转弯越急.
float $ang=particleShape1.age*3+(particleShape1.particleId+rand(0.1,0.3))*0.25;
这句很明显,particleShape1.age*3是让粒子持续运动,(particleShape1.particleId+rand(0.1,0.3))*0.25;是让每个粒子的初始转角不同,这样才会行成面,不会是线.particleShape1.particleId大家都知道吧,每个粒子的都不同.
particleShape1.position=<<($x+$poi[0]),$poi[1],($z+$poi[2])>>; 最后将粒子自身定义的运动与曲线上点的位置叠加就可以了.我只是给大家一个思路,大家自己回理解的.
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    关于我们 | 帮助(?) | 广告服务 | 版权声明 | 商业合作 | 发展历程 | 联系我们

    Copyright ? 2005-2008 CGFancy.com, All Rights Reserved,达达网络:陕ICP备06010337号

    技术交流:71125455(平面)、545534707(三维),业务合作:71125455