【Maya】刚体动力学特效-基本流程
标签:
学习杂谈 |
分类: maya粒子特效 |
刚体碰撞特效常用于制作一些较为随机的物理运动。从实际的动画意义上来说,链条摆动,撞击碎片,力的传递(保龄球),甚至鸡蛋的滚动等此类较为复杂的联动动画,都可以通过刚体解算器来完成。当然,我相信强大的动画师一样可以通过手动关键帧的方式设置几百个物体的碰撞动画(我就那样试过……#_#!)。
前面已经将刚体的基本属性进行了详细说明,这里再概括下刚体特效的几个技术要点:
1.刚体不能以常规的关键帧方式来设置其动力学动画,刚体的运动需要借助其内置的初始属性或者力场,约束,碰撞等动力学特效进行驱动;
2.PassiveRigidBody被动刚体不受动力学影响,也就是说,只要你打算让某个物体产生动力学动画(注意,是动力学动画,非关键帧动画),那么它就只能是ActiveRigidBody主动刚体;
3.默认的刚体碰撞是有间距容差的,过小甚至0距离的刚体初始间距容易产生运算错误;
4.刚体碰撞解算难以保证100%的完美,除了活用碰撞层、穿插属性的设置,配合动画关键帧的烘焙进行微调也是有必要的(还包括镜头的运用);
5.主动刚体的初始动力学属性通常都是对强度和方向进行同时设置的。
6.内核布料系统相当于柔体和刚体系统的总和,刚体柔体能完成的特效,布料系统基本都可以做到;不过相对布料节点那些复杂的参数设置,刚体柔体系统的动力学计算更为高效。
通常Maya中的几何体是不受力场作用的,如果直接对一个普通的几何体添加力场或动力学约束,Maya会自动将该物体转为主动刚体ActiveRigidBody。
【实例1】
1.以下为一个简单的动力学碰撞场景:沿着轨道滑动的小铁球落到杠杆上,杠杆上的物体受力弹起,撞击空中的小气球。
http://img230.ph.126.net/b5GxFcpcNVgN7tGsztTbXw==/1414411757972654337.jpg
2.进行动力学特效之前,首先需要分配好每个物体的基本属性:球体为高质量的主动刚体,轨道和地面为被动刚体,杠杆为较大摩擦力的主动刚体(包括支撑的轮子),方块和大球体都为低质量的主动刚体。
http://img396.ph.126.net/qrHTZWLGgX8q4wQoSVi0rQ==/1090715534754923111.jpg
3.除了模拟漂浮在空中的大球体,其他物体均与重力场进行连接,被动刚体只需要设置摩擦力和弹力值。此时播放演示,会发现每个主动刚体的运动都很平均,效果达不到预想的联动碰撞。
http://img396.ph.126.net/8coblJJ7JcQoDwE1Fve49w==/1090715534754923141.jpg
http://img396.ph.126.net/7qftegezlQGUbKiRTy3DRg==/1090715534754923151.jpg
播场景动力学动画之前,应将播放速度设置为Play every frame(涉及动力学特效,如粒子,布料,流体等都要设置为播放每一帧)
http://img396.ph.126.net/KDlSer_o1JUGlHZ6CFsz0Q==/1090715534754923155.jpg
4.设置每个物体的属性如下(选择物体后,直接在右边的通道栏内设置),未提到的为Maya默认值:
小球的质量Mass为100,弹力Bounciness为0.1;
杠杆的质量Mass为10,弹力Bounciness为0.1;
杠杆下的小轮的质量Mass为50,弹力Bounciness为0.1,静摩擦StaticFriction为0.5;
小方块的质量Mass为5,静摩擦StaticFriction为6;
大球体保持默认设置;
地面的弹力Bounciness为0.2,静摩擦StaticFriction为0.5;
轨道的Bounciness为0,静摩擦StaticFriction为0,DynamicFriction为0(因为该被动刚体参与的解算不多,因此关闭这些属性提高场景运算速度)
http://img396.ph.126.net/FAuEmtxvNP5DF7fiUawa9w==/1090715534754923172.jpg
当物体只受到一个外力作用时,刚体属性中的Mass(质量)仅作为碰撞时能量传递的参考,Mass的大小不影响刚体运动的快慢(伽利略已经做过“两个铁球同时落地”的实验……)。由于Maya中的重力计算单位并不是以m/S平方进行(Maya以厘米为单位),因此动力学解算下的物体速度往往很慢。不过因为可以在后期进行调节,因此这些细节我们不必太在意。
实际中,物体的摩擦力与压力(受重力作用的情况下为压力为物体的质量)成正比。Maya中的动静摩擦力是物体接触时的相对作用力,只有作用力大于静摩擦力,物体运动之后才会受到动摩擦力的影响。因此决定物体在场景中运动的速度主要为力场和摩擦,阻尼,内部初始状态等。
5.在小球和杠杆发生碰撞前,先通过动力学解算设置杠杆的初始静止位置:播放场景动画,在小球落到杠杆前停住时间滑块,然后选择杠杆,杠杆轮子和小方块,执行Solvers>InitialState>SetforSelected(设置所选物体当前状态为初始态)。基本上,需要进行多次的InitialState才能让物体完全静止下来。
http://img396.ph.126.net/-VwkAKWBdFrk5n3vKc9nYA==/1090715534754923186.jpg
6.现在,将大球体移动到小方块的运动路线上,执行动画解算。
http://img396.ph.126.net/sKhTf-f3TDvKf5dep71puA==/1090715534754923204.jpg
7.一切看起来似乎都差不多了,但大球的无限运动有点夸张,虽然我们不能在Maya中加入个空气摩擦的环境,不过可以设置Damping(阻尼)属性来模拟空气阻力。将大球的Damping设置为0.5。
http://img230.ph.126.net/Kz0fOKpC9u-VytbLvD0vqQ==/1414411757972654349.jpg
8.在测试过程中,我们可以使用高速缓存来提高动画运算速度。选择任意一个刚体,执行Solvers>MemoryCaching>Enable(在rigidSolver节点的属性编辑面板中勾选RigidSolverStates下的CacheData为同样效果)。如果在解算过程中乱晃场景,会导致解算异常,因此在一次完整的播放运算结束前,我们应避免其他耗费资源的进程和操作(例如没事别乱点鼠标……)。
如果在缓存后需要对刚体属性数值进行再调节,应先删除缓存,然后再设置数值进行解算。
http://img230.ph.126.net/2DW1BeNpxLOIG0cLXb8ZNA==/1414411757972654371.jpg
需要注意的是,这个高速缓存数据是存在硬件内存中,因此要保证有大容量内存可用。在Disable禁用MemoryCaching内存缓存之前,这个动力学数据会一直存在于计算机内存当中。
9.最终效果达成后,选择主动刚体,执行Edit>Keys>BakeSimulation烘焙动力学动画为关键帧动画。一般只需要修改以下,最好是保持默认的每隔1帧取样,否则烘焙效果常常会不同。
http://img396.ph.126.net/pk7_UTQxeKo3OiqDLFCybQ==/1090715534754923008.jpg
10.此时刚体属性依然存在,我们可以全选所有刚体,执行Edit>DeleteByType>RigidBodies删除刚体属性。
http://img396.ph.126.net/MsdUfwbVLYekCDBZhgs4pw==/1090715534754923033.jpg
11.回到正常的播放速度,例如24帧/S,结果会发现动画进行的太慢了。
http://img396.ph.126.net/NHR_xwPL5_okmc_uLviRWw==/1090715534754923093.jpg
按住Shift键,在时间滑块上选择所有物体的烘焙关键帧,然后点击所选区域最右边的箭头,将时间区域缩至150帧左右(基本上,都要缩为动力学解算范围的一半以下)。
http://img396.ph.126.net/CaDphSlxBY8m_zy6mBNVIA==/1090715534754923076.jpg
12.因为动力学烘焙会很细致的将每一帧烘焙出来,所以动画曲线编辑器中会看到密密麻麻的关键点。如果你仍打算进行动画调节,可以先使用Curves>SimplifyCurve命令对动画曲线进行修整,将TimeTolerance和ValueTolerance设置为0可以得到最接近动力学动画的效果。
http://img396.ph.126.net/sgGTxE4Igt0rnmsH81Iptw==/1090715534754923053.jpg
http://img396.ph.126.net/ADQetwPwtlci5CdIUf-Pwg==/1090715534754923067.jpg
【动力学的最终效果】
http://img396.ph.126.net/yxlXz9HbgzgubdmwCLEVCg==/1090715534754923212.gif
【基本流程】
创建刚体-加入力场-(创建约束)-设置属性-解算缓存-动画烘焙-时间压缩
除了以上简单的属性设置,刚体特效还包括碰撞容差,约束以及自身的初始状态,这些稍后会提到。

加载中…