教您怎样用MAYA粒子替换实现射箭模型..docVIP

教您怎样用MAYA粒子替换实现射箭模型..doc

  1. 1、本文档共14页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
教您怎样用MAYA粒子替换实现射箭模型.

1.粒子替换实现MAYA制作射箭模型的效果的最大问题在于,如果用粒子的速度velocity作为instancer的Aim Direction,那么一旦粒子与地面产生碰撞(这里我们碰撞属性中的摩擦力Friciton设置为1,弹力Resilience设置为0),势必导致速度瞬时变为0,使得箭无法插在地面上,而是一碰到地面就倒下。 ? ? ? 2.制作一个地面,和一个用来发射箭的面. ? ? ? 3.选择用来发射箭的那个面,通过Particles Emit form object,从该面上发射粒子 ? ? ??4.打开粒子发射器属性:emitter type :surfacerate(particles/sec): 5speed : 20speed 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,此时播放我们就会发现剑一射中就立马爬下了 ? ? ?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来存储粒子的速率(速度是个矢量,是三维的,速率是个标量,是一维的,函数mag()正是将三维的矢量计算得到一个相 应的一维标量),只要粒子在运动,速率不为零,那么我自定义的dirpp将不停的更新为粒子的速率,而一旦碰撞产生,速度为零,那么我的dirpp就不会 更新,所存储的是粒子停止之前一帧的那个速率,并且之后也将一直存储这个值,这样我们就可以用这个dirpp作为instancer的 aimdirection了 ? ? ?12. 修改粒子属性面板中instancer一栏中aim direction 为 dirpp,在播放一下看看,箭就不会射中倒下了 ? ? ?13.接下来要解决的问题就是,即便摩擦力为1,弹力为0了,箭还是会在地面上滑动这里我们为粒子添加个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,以此来作为箭插入地面后的永久坐标选中粒子,添加自定义的每粒子属性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;}else{arrow_particleshape.position = arrow_particleshape.pospp;}后果有朋友看不懂,我再解释一下其意思:每过一帧,只要粒子

文档评论(0)

sa43sad5 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档