相关分类
MAYA入门教程
MAYA建模教程
MAYA材质灯光
MAYA渲染教程
MAYA角色动画教程
MAYA经典教程
MAYA场景教程
MAYA视频教程
飞特网 顶部通栏广告

MAYA表达式控制动力学动画之小鸡抢食

夏雪发布于:2012-3-10 00:28 |原作者: 飞特信息采编-张薇| |来自:互联网
夏雪
辽宁省 鞍山市 
发私信 + 关注
简介: 本教程向FEVTE的朋友们介绍利用MAYA表达式控制动力学动画之小鸡抢食场景,群体动画是表达式或MAYA mel语言的强项,下面我们来做一个追逐的表达式练习,希望朋友们喜欢! ...
本教程向朋友们介绍MAYA表达式控制动力学动画之小鸡抢食场景的方法,群体动画是表达式或MAYA mel语言的强项,下面我们来做一个追逐的表达式练习,感兴趣的朋友可以看看。
用小鸡抢食的情景来说明。
  一群小鸡在觅食,突然一只小鸡发现一只小虫,其他小鸡过来抢食,于是就会出现一群小鸡追逐一只小鸡的场景,在具体的测试中,我用一个球体代表叼着小虫的小鸡,其他的小鸡用圆锥表示。下面详细说明整个制作过程。
  1.首先制作场景,建立一块崎岖不平的地面,代表小鸡的球体和圆锥。如图。

MAYA表达式控制动力学动画之小鸡抢食 飞特网 MAYA角色动画教程

FEVTE编注:更多MAYA角色教程讨论交流和MAYA作业提交请进入飞特论坛三维作业板块,地址:https://www.fevte.com/forum-54-1.html

2.随机的在地面上排布 "小鸡"。 .为了上小鸡们能够贴在地面并且是随着地面坡度而发生相应的角度倾斜,将小鸡们与地面进行法

线约束和几何体约束,如图。

MAYA表达式控制动力学动画之小鸡抢食 飞特网 MAYA角色动画教程 4.打开表达式编辑窗口,定义各小鸡初始位置。
  for($k=1;$k<41;$k=$k 1)
  {
  if(frame==1)
  {$tx[0]=ball.translateX;//
  $tx[1]=ball1.translateX=7.9;
  $tx[2]=ball2.translateX=3;
  $tx[3]=ball3.translateX=-0.8;
  $tx[4]=ball4.translateX=1.3;
  $tx[5]=ball5.translateX=-2;
  $tx[6]=ball6.translateX=-4.3;
  $tx[7]=ball7.translateX=8.8;
  $tx[8]=ball8.translateX=16.02;
  $tx[9]=ball9.translateX=12.0;
  $tx[10]=ball10.translateX=5.2;
  $tx[11]=ball1.translateX=-7.9;
  $tx[12]=ball2.translateX=13;
  $tx[13]=ball3.translateX=-10.8;
  $tx[14]=ball4.translateX=21.3;
  $tx[15]=ball5.translateX=-12;
  $tx[16]=ball6.translateX=-14.3;
  $tx[17]=ball7.translateX=28.8;
  $tx[18]=ball8.translateX=10.02;
  $tx[19]=ball9.translateX=18.0;
  $tx[20]=ball10.translateX=15.2;   $tz[0]=ball.translateZ;
  $tz[1]=ball1.translateZ=1;
  $tz[2]=ball2.translateZ=3.347;
  $tz[3]=ball3.translateZ=8.908;
  $tz[4]=ball4.translateZ=0.736;
  $tz[5]=ball5.translateZ=2.525;
  $tz[6]=ball6.translateZ=-2.145;
  $tz[7]=ball7.translateZ=4.207;
  $tz[8]=ball8.translateZ=0.542;
  $tz[9]=ball9.translateZ=6.277;
  $tz[10]=ball10.translateZ=5;
  $tz[11]=ball11.translateZ=-1;
  $tz[12]=ball12.translateZ=-3.347;
  $tz[13]=ball13.translateZ=-8.908;
  $tz[14]=ball14.translateZ=-0.736;
  $tz[15]=ball15.translateZ=-2.525;
  $tz[16]=ball16.translateZ=-10.145;
  $tz[17]=ball17.translateZ=-4.207;
  $tz[18]=ball18.translateZ=-5.542;
  $tz[19]=ball19.translateZ=16.277;
  $tz[20]=ball20.translateZ=15;
  具体定义值根据当时各小鸡法线和几何体约束后其位移通道的参数来定义,需要一些耐心,如果小 鸡更多的话,需要耐心更多,我知道我的方法很笨。有朋友知道简单方便的定义方式吗?
  5.下面进行核心的算法说明,在追逐中,不管小鸡当时在什么方位,他们的目标都为有虫的小鸡, 另外小鸡不能相互穿过,所以在后面的小鸡若要跃过前面的小鸡,需要改变奔跑的方向,找空当穿插追 逐。   for($j=1;$j<41;$j=$j 1)   {$dz[$j]=$tz[$j]-$tz[0];
  $sign[$k]=sign($vz[$k])*sign($tz[$k]-$tz[$j]);
  $dx[$j]=abs($tx[$j]-$tx[$k]);
  if((abs($dz[$k]-$dz[$j])<5)
  &&($sign[$k]>0)&&($dx[$j]<=5))
  {   $lz[$k]=abs($dz[$k]-$dz[$j]);
  $lz[$k]=min($lz[$k],$zz[$k]);
  $zz[$k]=$lz[$k];   $code[$k]=$j;
  $n[$k]=$n[$k] 1;   }
  }
  这段程序是避免小鸡们相互穿插的,通过判断各小鸡相对其它小鸡的位置及距离,决定其加速或减 速或改道。在这个练习中,我定义的小鸡个体半径为1个单位,所以我定义小鸡前面若5个单位内有其他 小鸡,它会考虑改变速度或方向。
  if((abs($dz[$k]-$dz[$j])<5)
  &&($sign[$k]>0)&&($dx[$j]<=5))
  其中$lz[$k]是用来表示小鸡前其他小鸡在z轴方向相对其最近的距离。$n[$k]表示在同一帧中,某 小鸡前面(z轴方向)其他小鸡距其距离小于5单位的个数。以上是用按照序号逐个小鸡遍历方式比较得 出结果,因此在小鸡数量较多或小鸡速度较快时,会有较大的误差,有朋友知道根本解决问题的方法吗 ?
  if($n[$k]==0)
  $aFz[$k]=15 0*abs($dz[$k]/3);
  else
  $aFz[$k]=15 0*abs($dz[$k]/3)-$k1*(7-$lz[$k]);
  if($tz[$k]<$tz[0])
  $aFz[$k]=-$aFz[$k];
  if(($lz[$k]<3)&&($n[$k]>0))
  $afz[$k]=8*$k2*$vz[$k] 10*sign($vz[$k]);
  else
  $afz[$k]=$k2*$vz[$k];
  $az[$k]=$aFz[$k]-$afz[$k];
  if(($lz[$k]<2)&&($n[$k]>0))
  $vz[$k]=$vz[$code[$k]];
  else
  $vz[$k]=$vz[$k] $az[$k]*$t; $tz[$k]=-$vz[$k]*$t-0.5*$az[$k]*$t*$t $tz[$k];
  这段是定义各小鸡在z轴方向奔跑加速度和速度及位置的程序。其中$aFz[$k]表示其他小鸡相对有虫 小鸡的主动加速度,$afz[$k]表示其他小鸡在奔跑中因速度和前面障碍而产生的反向阻碍其追逐的加速 度。
  if(($lz[$k]<2)&&($n[$k]>0))
  $vz[$k]=$vz[$code[$k]];
  其中的这句表示如果某小鸡前面有小鸡与之距离小于2个单位时,强制其速度与前面的这只小鸡相同 ,从而避免穿插。另外式中的一些系数和参数大多是试验确定的,并不是最合理的定义。   $lx[$k]=$tx[$k]-$tx[$code[$k]];
  $dx[$k]=$tx[$k]-$tx[0];
  $aFx[$k]=-3*($dx[$k]/5) 0.05*sign($dx[$k]);
  if(($lx[$k]<2)&&($n[$k]>0)&&($lz[$k]<2))
  {$afx[$k]=-5*sign($lx[$k])*((2.5-$lx[$k])/2)*((2.5-$lx[$k])/2) $k3*$vx[$k];
  $ax[$k]=0;}
  else if(($n[$k]>0)&&($lz[$k]>=2))
  $afx[$k]=-0.1*sign($lx[$k])*((5-$lx[$k])/2) $k3*$vx[$k];
  else
  $afx[$k]=$k3*$vx[$k];
  $ax[$k]=$aFx[$k]-$afx[$k];
  $vx[$k]=$vx[$k] $ax[$k]*$t;
  $tx[$k]=$tx[$k] $vx[$k]*$t 0.5*$ax[$k]*$t*$t;   这段是定义各小鸡在x轴方向奔跑加速度和速度及位置的程序。各变量含义与前类似。
12下一页
14

好评
11

差评

刚表态过的朋友 (25 人)

  • 飞特游客

  • 飞特游客

  • 飞特游客

  • 飞特游客

  • 飞特游客

  • 飞特游客

  • 飞特游客

  • 飞特游客

  • 飞特游客

  • 飞特游客

  • 飞特游客

  • 飞特游客

  • 飞特游客

  • 飞特游客

  • 飞特游客

  • 飞特游客

  • 飞特游客

  • 飞特游客

  • 飞特游客

  • 飞特游客

  • 飞特游客

  • 飞特游客

  • 飞特游客

  • 飞特游客

夏雪
辽宁省 鞍山市 
+关注 发私信

最新评论

您需要登录后才可以评论和提交作业 登录 | 立即注册
本周热点文章
2020 新飞特 从心开始
关于飞特| 广告服务| 付款方式| 版权申明| 网站地图| 联系我们| 加入我们| 举报| 帮助中心| 移动版| 手机版| 飞特网

委托设计