教您怎样用MAYA粒子替换实现射箭模型_第1页
教您怎样用MAYA粒子替换实现射箭模型_第2页
教您怎样用MAYA粒子替换实现射箭模型_第3页
教您怎样用MAYA粒子替换实现射箭模型_第4页
教您怎样用MAYA粒子替换实现射箭模型_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1.粒子替换实现MAYA制作射箭模型的效果的最大问题在于,如果用粒子的速度velocity作为instancer的Aim Direction,那么一旦粒子与地面产生碰撞(这里我们碰撞属性中的摩擦力Friciton设置为1,弹力Resilience设置为0),势必导致速度瞬时变为0,使得箭无法插在地面上,而是一碰到地面就倒下。 2制作一个地面,和一个用来发射箭的面. 3选择用来发射箭的那个面,通过Particles Emit form object,从该面上发射粒子 4打开粒子发射器属性:emitter type :surfacerate(particles/sec): 5speed : 20s

2、peed random: 4 5给粒子加个重力场 6选中粒子和地面,打开菜单命令particles make collide 后面的属性对话框,将弹力resilience设置为0,摩擦力friction设置为1,点击create生成碰撞事件。 7执行play场景,看到粒子与地面产生正确的碰撞,并停止在地面上(如果地面凹凸不平,会有滑动,不妨,这个我们稍后解决) 8先选弓箭再选粒子,打开菜单命令particles instancer 9打开粒子属性中的instancer一栏,勾启allow all data types,aimdirection设置velocity,此时播放我们就会发现剑一射中就

3、立马爬下了 10解决这一问题需要添加一个自定义属性,在粒子属性窗口中add dynamic attributes一栏中,点击general,添加一个名为dirpp的每粒子属性,类型为vector矢量(此处一点要注意) 11右击dirpp属性,添加runtime before dynamics表达式:float $speed = mag(arrow_particleshape.velocity);if($speed != 0)arrow_particleshape.dirpp = arrow_particleshape.velocity;这里详细解释一下,我用$speed来存储粒子的速率(速度是

4、个矢量,是三维的,速率是个标量,是一维的,函数mag()正是将三维的矢量计算得到一个相 应的一维标量),只要粒子在运动,速率不为零,那么我自定义的dirpp将不停的更新为粒子的速率,而一旦碰撞产生,速度为零,那么我的dirpp就不会 更新,所存储的是粒子停止之前一帧的那个速率,并且之后也将一直存储这个值,这样我们就可以用这个dirpp作为instancer的 aimdirection了 12. 修改粒子属性面板中instancer一栏中aim direction 为 dirpp,在播放一下看看,箭就不会射中倒下了 13.接下来要解决的问题就是,即便摩擦力为1,弹力为0了,箭还是会在地面上滑动这

5、里我们为粒子添加个runtime after aynamics的表达式:float $speed mag(arrow_particleshape.velocity);if($speed 4)arrow_particleshape.velocity = 0,0,0;这样,当粒子在碰撞时速度小于一定值后我们将其速率强行限制为0,0,0,注意,你也可以试试其他的数值不一定用4,但数值不宜过小,否则箭在射出的一瞬间会有个抖动。 14. 这是我们发现即使箭的速率为零了,但还是会在地面上滑动,我想到的解决方法还是和上面的差不多,用一个自定义的pospp来存储碰撞产生前一帧的position,以此来作为箭插

6、入地面后的永久坐标选中粒子,添加自定义的每粒子属性pospp,类型还是矢量。 15. 右击pospp添加runtime before daynamics的表达式,这里我直接在原先的表达式的做些添加就可以了,修改后如下float $speed = mag(arrow_particleshape.velocity);if($speed != 0)arrow_particleshape.dirpp = arrow_particleshape.velocity;arrow_particleshape.pospp = arrow_particleshape.position;elsearrow_particleshape.position = arrow_particleshape.pospp;后果有朋友看不懂,我再解释一下其意思:每过一帧,只要粒子速度不为零,我就将粒子的坐标值position赋给pospp,一旦产生碰撞,速度为零了, 那么也就停止了position赋值给pospp这一操作,我的pospp存储的值是粒子停止前一帧所处的位置,接下来,我们反过来将这一固定了的值赋给 position,以防止例子因为重力场的作用会出现position不停地在一个范围内抖动的结果。16.至此,整个过程也就差

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论