签到

06月06日
尚未签到

共有回帖数 0

    刘云

    等级:
    • 荣誉:
    for in循环,首先要定义一个数组,比如string $fallrain[],我们用个小例子来演示for in循环mel的应用,我们做一个分散聚合的小效果; 首先创建一个logo,而且要破碎成一小块一小块的,因为我的pdi出了点问题,这里我就直接在建模里做破碎了,创建一个文本,把里面的面片提出来,然后combine一下;

    然后把三角面转为四边面,其实这个也没什么影响,只是为了让碎块更好看,然后在保持不共面的情况下,在mesh下执行Extract,这样,这个模型就变成一片一片的了,然后中心点归位,删除下历史,冻结一下,之后执行挤出:

    这里只是做碎片,如果你有破碎插件的话就快多了,比如pdi就比较快,也可以用max的rayfire破碎完转到maya也行,我这里只是说下在没有插件的情况下做些有体积的分割物体,好了,下面我们开始写mel:我们让这个logo分散,就是让这些碎片向四周散开,而且随机性的,所以我们要在这些碎片的位置,选择,甚至缩放上做些变动即可,其实也就是key动画,给每个碎片key动画,可是这么多怎么key,for in循环就可以解决这个问题,好了,下面就说说改怎么写: 首先我们定义一个数组,用来指定这些碎片,因为这些碎片不是整形,也不是浮点,所以定义个字符串变量:
    string $fallrain[]=`ls -sl`;ls可以反馈你场景里的全部物体,然后我们加个sl也就是select,就是说,反馈我们所选择的物体,这样也方面我们key动画,想key谁就选择谁;然后:string $fallrain[]=`ls -sl`;for($a in $fallrain){}定义一个$a为$fallrain的子集,也相当于碎片;接着:string $fallrain[]=`ls -sl`;for($a in $fallrain){setAttr ($a+".tx") (rand(-10,10)); }这里我们设置$a的x轴的位置在-10到10的随机范围内;这样我们执行以下这个mel就会看见:

    我们就可以看见碎片沿着x轴方向随机分布,只要我们在时间轴上不同的位置key上几个帧,就会有动画了,同理它在y轴和z轴也一样:string $fallrain[]=`ls -sl`;for($a in $fallrain){setAttr ($a+".tx") (rand(-10,10));setAttr ($a+".ty") (rand(-10,10));setAttr ($a+".tz") (rand(-10,10));}再执行下,是这样的效果,分散的就比较开了

    当然,这个分散的范围比较大,你如果想小点直接调节rang的随机大小就行;同理我们也可以让他随机渲染这里我们让每个碎片在0到360度范围随机旋转:
    string $fallrain[]=`ls -sl`; for($a in $fallrain){  setAttr ($a+".tx") (rand(-10,10)); setAttr ($a+".ty") (rand(-10,10)); setAttr ($a+".tz") (rand(-10,10)); setAttr ($a+".rx") (rand(0,360)); setAttr ($a+".ry") (rand(0,360)); setAttr ($a+".rz") (rand(0,360));  }
    你再执行的话,因为是一帧,也看不出多大的变化,只有key成动画时才明显,如果你想在缩放上也变化的话,那我们也是用同样的道理,不过要先定义一个随机变量,好用来继承,使缩放的x、y、z能等比缩放:
    string $fallrain[]=`ls -sl`; for($a in $fallrain){  setAttr ($a+".tx") (rand(-10,10)); setAttr ($a+".ty") (rand(-10,10)); setAttr ($a+".tz") (rand(-10,10));  setAttr ($a+".rx") (rand(0,360)); setAttr ($a+".ry") (rand(0,360)); setAttr ($a+".rz") (rand(0,360));  float $rand=rand(0.8,2.2);setAttr ($a+".sx") ($rand); setAttr ($a+".sy") ($rand); setAttr ($a+".sz") ($rand);}
    这样就好了,其实到这,这个mel的功能已经达到了,但是为了更方便,我们把key帧属性也加进去,免得你没执行一次,还得自己手动
    key,string $fallrain[]=`ls -sl`; for($a in $fallrain){ setAttr ($a+".tx") (rand(-10,10));setAttr ($a+".ty") (rand(-10,10));setAttr ($a+".tz") (rand(-10,10));  setAttr ($a+".rx") (rand(0,360));setAttr ($a+".ry") (rand(0,360));setAttr ($a+".rz") (rand(0,360));  float $rand=rand(0.8,2.2); setAttr ($a+".sx") ($rand);setAttr ($a+".sy") ($rand);setAttr ($a+".sz") ($rand);  setKeyframe ($a+".tx");setKeyframe ($a+".ty");setKeyframe ($a+".tz");  setKeyframe ($a+".rx");setKeyframe ($a+".ry");setKeyframe ($a+".rz");  setKeyframe ($a+".sx");setKeyframe ($a+".sy");setKeyframe ($a+".sz");}

    楼主 2015-09-10 09:59 回复

共有回帖数 0
  • 回 帖
  • 表情 图片 视频
  • 发表

登录直线网账号

Copyright © 2010~2015 直线网 版权所有,All Rights Reserved.沪ICP备10039589号 意见反馈 | 关于直线 | 版权声明 | 会员须知