Maya 4.0 刚体和柔体-刚体动力学
形状和尺寸保持固定,不随事件而变化的几何体,称为刚体。刚体动画,实质上就是在 Maya 中建立一个物理模拟环境,并用它来模拟现实环境中的物体在力 ( 如说重力、风等 ) 的作用下或是在同其他物体相碰撞时所发生的情景。 NURBS 物体和多边形物体都可以转换成刚体。图 11-1 所示为刚体作用的效果。
图 11-1 刚体运用效果
刚体运用起来相当简单,例如,首先创建一个或多个刚体,然后创建一个或多个作用于刚体的力场,再给定刚体的初始位置、初始速度及冲击,最后播放动画。由 Maya 的动力学引擎在给定的初始信息基础上对刚体的运动进行计算,从而使动画趋于真实。刚体可分为被动刚体和主动刚体两种。被动刚体不受场的影响,它是主动刚体的碰撞物体,而且在参与碰撞时不会因碰撞而发生运动。被动刚体可以用关键帧技术来制作 ( 可以通过关键帧移动、旋转、缩放被动刚体 ) 。主动刚体受场的影响,而且会因为碰撞改变运动。主动刚体不能用关键帧技术制作 , 即不能直接操作它们。
一般来说,与外界固定的物体(如地板和墙等),可以作为被动刚体;而各种下落的、移动的或相互碰撞的物体(如篮球和硬币),可以作为主动刚体。尽管主动刚体不能用关键帧技术制作,但是由于在动画制作过程中可以随时将刚体由被动状态变为主动状态,因此刚体动力学的优点更为突出。
创建刚体
创建刚体的方法非常简单,选中一个多边形或者 NURBS 物体,执行 Soft/Rigid Bodies → Create Passive Rigid Body 命令,则所选物体变为被动刚体,如果执行 Soft/Rigid Bodies → Create Active Rigid Body 命令,则所选物体变为主动刚体。创建刚体之后将会产生一个刚体节点,在 Outliner 窗口中可以看到这个节点,如图 11-2 所示。
下面是刚体的建立属性。执行 Soft/Rigid Bodies → Create Passive Rigid Body
命令或者 Soft/Rigid Bodies → Create Active Rigid Body 命令,打开 Rigid Options 对话框,如图 11-3 所示。图 11-2 Outliner 窗口 图 11-3 Rigid Options 对话框
● Rigid Body Name :设置刚体的名称。
● Active :选中此时,创建的是主动刚体:撤销选中此复选框时,创建被动刚体。
● Particle Collision :如果选中此复选框,粒子与主动刚体之间产生碰撞,碰撞的力量会使刚体产生运动。
● Mass :设置主体刚体的质量,刚体的质量决定了碰撞时的程度。刚体的质量越大,则碰撞的效果越强烈;刚体的质量越小,则碰撞的效果越弱。
● Set Center Of Mass :设置刚体的质量中心,即物体的中心,它影响着刚体的碰撞效果,尤其是反弹效果。例如,当把主动刚体的中心降低一个单位时,将它抛到被动刚体上时,它会像不倒翁一样来回摇摆;当设置 Initial Spin 的值为 0 时,主动刚体的重心决定了主动刚体围绕哪个点旋转。例如,当重心在主动刚体内部时,主动刚体会围绕自身旋转,就像地球自转一样;当重心在球体之外时,圆球会围绕重心旋转,就像地球公转一样。
● Center of Mass X 、 Y 和 Z :设置刚体的重心位置,默认状态时主体刚体的实际重心位置。
● Static Friction :设置主动刚体的摩擦力。当主动刚体运动时,必须有一个外力来克服这个摩擦力。当该值为 0 时,主动刚体可以在其他表面上自由运动;当该值为 1 时,主动刚体的静止摩擦力最大。
● Dynamic Friction :设置主动刚体在运动时所受阻力的大小。
● Bounciness :设置主动刚体反弹力的大小。
● Damping :设置阻力的大小。
● Impulse X 、 Y 和 Z :设置推动力的大小和方向,推动力可以模拟一个巨大的外力在短时间内作用于物体之上的效果。默认状态下,推动力的作用点位于刚体的重心。
● Impulse Position X 、 Y 和 Z :设置推动力在刚体上的作用位置。
● Spin Impulse X 、 Y 和 Z :设置刚体产生旋转时扭矩的大小,该值是一个矢量,可以控制方向。
● Initial Setting 中的选项为刚体初始设置选项,如图 11-4 所示。
图 11-4 Initial Setting 区域中的参数
● Initial Spin X 、 Y 和 Z :设置刚体的初始角速度。
● Initial Position X 、 Y 和 Z :设置刚体在场景中的初始位置。
● Initial Orientation :设置场景中刚体的 X 、 Y 、 Z 轴方向。
● Initial Velocity X 、 Y 和 Z :设置刚体初始速度的大小和方向。
● Performance Attributes 区域中的参数是刚体的操作属性,如图 11-5 所示。
图 11-5 Performance Attributes 区域
♦ Stand In :它包括三个选项参数: None 、 Sphere 和 Cube 。用户可以在播放动画的过程中使用立方体或者球体来替换复杂的刚体,以提高系统的性能。这些物体只是虚拟物体,它不会影响刚体的实际效果。
♦ Tessellation Factor :在为刚体动力学制作动画时, NURBS 物体首先要转换为多边形物体。该文本框决定了在转换的过程中,多边形的面片数目,较低的值虽然创建出比较粗糙的几何体,但可以提高刚体动画的播放速度。
♦ Collsion Layer :碰撞层可以容纳两个或者多个碰撞刚体,同一层中的两个刚体才能发生碰撞,不互相碰撞的刚体被放置在不同的层中。在图 11-6 中,右边的圆球与圆柱体属于 Layer1 ,彼此之间是相互碰撞的,左边的圆球与圆锥体属于 Layer2 ,彼此之间是相互碰撞的,地面物体属于 Layer1 ,它与球体、圆柱体、圆锥体之间是相互碰撞的。
图 11-6 Collsion Layer 不同值的效果
♦ Cache Date :当选中此复选框时,刚体在动画中的每一帧位置和方向数据都被存储起来。当第 1 次播放动画时,刚体解算器计算刚体的位置和方向,当第 2 次播放动画时,缓存中的数据被启用,这样可以大大提高动画的播放速度。
(1) 创建一个新场景。创建一个 NURBS 平面并且将其调整到与 Maya 栅格大小相当。然后创建一个半径为 1 的 NURBS 球体,并且把它移到平面上方。如图 11-7 所示。
图 11-7 创建一个新的场景
(2) 选中平面,进入 Dynamics 模块,执行 Soft/Rigid Bodies → Create Passive Rigid Body 命令。现在所选平面成为被动刚体。
(3) 选中 NURBS 球体,执行 Soft/Rigid Bodies → Create Active Rigid Body 命令,所选小球成为主动刚体。
(4) 为了使动力模拟可以正常播放,播放速度设置为 Free ,以便物理引擎计算进入到下一帧所需的数据。选择 Window → Setting/Preferences → Preferences 命令并选择 Setting/Timeline 命令,或者单击位于屏幕右下方的 Animation Preferences 按钮,都可以激活同一个对话框。在 Preferences 对话框的 Playback 区域,设置 Playback Speed 为 Real-time ,如图 11-8 所示。
图 11-8 Prefernece 对话框
(5) 除了为物体添加刚体节点之外,还要为主体刚体制作出初速度和运动方向,这样才能发生刚体动画。选择 Dynamics|Fields → Gravity 命令。然后打开 Dynamics Relationships 窗口 (Window → Relationship Editors → Dynamics Relationships 命令 ) ,选择窗口左边 Outliner 中的 nurbsSphere1 ,并且确保在所选窗口右边框内的 gravityField1 是高亮显示,如果不是高亮显示,单击 gravityField1 使它成为高亮显示。如图 11-9 所示。
图 11-9 Dynamics Relationships 窗口
提示:
如果在创建重力场之前就选中球体,那么二者会自动建立关系。如果这时有其他未被选择的主动刚体,它们将不受这个场的影响。
下面回倒并且播放动画,小球会落向地板并且反弹起来。如果动画结束得太快以至于看不到这些,那么将动画的帧数增加到 200 帧以上。
现在对物体检查其刚体设置。在 Channel 盒,可以看到所选物体中 rigidBody1( 或 rigidBody2 或其他 ) 列在形状节点下面。选择平面,然后单击 rigidBody1 文本。
这时在通道栏中将会看到更多的选项,这些选项提供了比想像还要多的刚体控制。主要有以下几个参数:质量 (mass) 、弹性 (bounciness) 、阻尼 (damping) 、静摩擦力 (static friction) 以及动摩擦力 (dynamic friction) 。将弹性改为 0.9 并重放动画 ( 记住首先要回倒动画! ) 。小球在第 1 次弹回时应当达到与开始下落时几乎一样的高度,并且花较长的时间才能静止下来。现在将弹跳力改为 2 ,可以看到小球一次比一次跳的高,很快就从视野中消失了。
还可以试试其他设置,比如摩擦和阻尼小球和平面的设置都可以试一试。也可以试试质量设置,但是被动刚体的质量被定义为无穷大,因此这项设置对平面无效。改变小球的质量时动画并没有什么变化,这是因为重力是一种万有引力,它以同样的方式作用于所有的物体。
提示:
改变这些数字是学习刚体应用的重要途径。要对每一个通道内的每一个刚体都试试不同的设置。
主动刚体和被动刚体之间的转换
选取物体,执行 Soft/Rigid Bodies → Set Active Key 命令,无论刚体的原始状态如何,刚体都将变为主动刚体。执行 Soft/Rigid Bodies → Set Passive Key 命令,则刚体将变为被动刚体。
下面是打开和关闭刚体主动模式的实例具体操作步骤如下:
(1) 创建一个新场景。创建一个与栅格大小相当的 NURBS 平面。再创建一个长方体,将其平放在 X 轴上,然后将其压扁成一个平板,如图 11-10 所示。
(2) 为了使长方体能够正确转动,移动它的坐标中心点。按 Insert 键 ( 这样会把 Move 工具手柄从有箭头变成没有箭头的 ) ,然后将手柄移动到长方体的最右侧,如图 11-11 所示。设置完成后一定再按一次 Insert 键,否则将一直停留在插入状态。
[NextPage]
图 11-10 建立场景 图 11-11 移动手柄
(3) 完成这些设置后,再创建一个半径为 1 的球体,把它放在长方体的左端。如图 11-12 所示。
图 11-12 建立球体
(4) 选中平面和球体,执行 Soft/Rigid Bodies → Create Passive Rigid Body 命令,将 它们设置为被动刚体。在 Hypergragh 窗口或者 Outliner 窗口中,把球体用鼠标中键拖曳到长方体的上面,把球体设置为长方体的子物体,如图 11-13 所示。这样球体和长方体就可以一起旋转。在长方体的旋转通道,把第 1 帧设置为关键帧。将时间滑块移动到大约 15 帧,沿 Z 轴旋转长方体约成 45 °角,如图 11-13 所示,把这一帧也设为关键帧。
图 11-13 设置子物体
图 11-14 制作长方体动画
提示:
如果 Auto keyframe 按钮启动状态,那么当某通道内发生变动时,只要该通道内已经由人工手动设置了第 1 个关键帧, Maya 会自动设置新的关键帧。
(5) 播放动画,将看到圆柱体 ( 连同球体一起 ) 会在几帧内旋转,然后停住不动。
下面使球体产生刚体运动。在 Channel 栏中从刚体属性的底部找到 Active 属性,它的当前值应当为 Off 。选中通道的名字 (Active) ,把时间滑块移动到第 12 帧,在 Active 名字上单击鼠标右键,在出现的菜单中选择 Key Selected 命令。这将在 Active 通道设置一个值为 off 或 false 的关键字。现在向前移动 1 到 2 帧,单击 Active 名旁边的文本,在 Channel 盒内输入 On 。如果 Autokey 功能是打开的,这时将自动生成一个关键帧;否则在该通道内手动生成一个关键帧。
这样球体就会变成一个要被圆柱体投掷到空中主动刚体。即小球将从圆柱体的运动中“继承”它的速度和转动,在离开圆柱体飞出去的同时小球变成了一个主动刚体。
(6) 回倒并播放动画。小球会飞向无穷远处。为了使模拟更为真实,应当再一次加上重力场。选中小球,然后执行 Fields → Gravity 命令, ( 重力场会自动与小球连接起来 ) 。再一次播放动画,小球或者从圆柱体上发射出去,或者从圆柱体上的滚下来。若小球从抛射机上飞出去的速度太慢,可以试着让圆柱体在最后一帧中转动的角度大一些,也可以减少圆柱体转动的帧数;若是小球飞得太快,可以让圆柱体在最后一帧中转动的角度小一些,或者增加圆柱体转动的帧数。