控制复杂运动和力

 
 
 

以下各节介绍控制复杂运动和力的技术,其中包括:

为刚体的冲量设置关键帧

可以允许和禁止为冲量设置关键帧以便立即更改刚体的速度,例如,在球棒撞击棒球时。

为冲量设置关键帧

  1. 选择刚体。
  2. 在动画的第一帧处,使用属性编辑器将冲量 X、Y、Z 和自旋冲量 X、Y、Z 的关键帧设置为 0、0、0。
  3. 转到要添加冲量的帧。
  4. 为冲量 X、Y、Z 和自旋冲量 X、Y、Z 的关键帧设置新值。
  5. 转到为属性设置关键帧的帧的下一帧。
  6. 将冲量 X、Y、Z 和自旋冲量 X、Y、Z 的关键帧设置为 0、0、0。
  7. “曲线图编辑器”(Graph Editor)或时间滑块中将所有关键帧的切线设置为阶跃类型。

    例如,在时间滑块中选择一个关键帧,在“通道盒”(Channel Box)中选择属性,然后在时间滑块上单击鼠标右键,并选择“切线 > 阶跃”(Tangents > Stepped)。对每个关键帧重复该过程。

组合刚体动力学和关键帧

在刚体处于被动状态时,可以通过为“平移”(Translate)“旋转”(Rotate)属性设置关键帧来为该刚体设置动画。在刚体处于主动状态时,可以使用动力学(具体地说是场和碰撞)来为该刚体设置动画。有时会希望组合使用关键帧和动力学。例如,可以使用关键帧使球滚下桌子,然后使该球在重力作用下下落。

在关键帧之后使用动力学

  1. 选择对象。
  2. 为对象的“平移”(Translate)“旋转”(Rotate)属性设置关键帧以提供对象运动。
  3. 在关键帧运动的第一帧处,选择柔体/刚体 > 设置被动关键帧(Soft/Rigid Bodies > Set Passive Key)

    该选项将主动属性的关键帧设置为禁用设置并为对象的当前“平移”(Translate)“旋转”(Rotate)属性值设置关键帧。

  4. 在使动力学具有控制权的第一帧处,选择柔体/刚体 > 设置主动关键帧(Soft/Rigid Bodies > Set Active Key)

    该选项将主动属性的关键帧设置为启用设置并为对象的当前“平移”(Translate)“旋转”(Rotate)属性值设置关键帧。

  5. 将动力学应用于对象。

    在后续帧处,可以通过选择柔体/刚体 > 设置被动关键帧(Soft/Rigid Bodies > Set Passive Key)将控制权从动力学切换到“平移”(Translate)“旋转”(Rotate)关键帧。

在动力学之后使用关键帧

  1. 选择对象。
  2. 使对象成为刚体并使用动力学控制其运动。
  3. 在动力学控制运动的第一帧处,选择柔体/刚体 > 设置主动关键帧(Soft/Rigid Bodies > Set Active Key)

    该选项将主动属性的关键帧设置为启用设置并为对象的当前“平移”(Translate)“旋转”(Rotate)属性值设置关键帧。

  4. 在希望“平移”(Translate)“旋转”(Rotate)关键帧具有控制权的第一帧处,选择柔体/刚体 > 设置被动关键帧(Soft/Rigid Bodies > Set Passive Key)

    该选项将主动属性的关键帧设置为禁用设置并为对象的当前“平移”(Translate)“旋转”(Rotate)属性值设置关键帧。

  5. 设置关键帧以控制运动。

    在后续帧处,可以通过选择柔体/刚体 > 设置主动关键帧(Soft/Rigid Bodies > Set Active Key)将控制权从“平移”(Translate)“旋转”(Rotate)关键帧切换到动力学。

    提示

    在关键帧之后使用动力学对刚体运动设置动画时,切换到动力学之前即时存在的速度会添加到动力学运动。在动力学之后使用关键帧对刚体运动设置动画时,该刚体会采用切换到关键帧时的即时关键帧位置。不会将以前的动力学速度添加到关键帧运动。

获取速度、力和碰撞数据

刚体具有包含其当前速度和任何应用于它的力和碰撞的只读属性。本节将介绍这些属性。

力、速度、自旋和扭矩属性

选择刚体时,“属性编辑器”(Attribute Editor)会显示“速度”(Velocity)“自旋”(Spin)“力”(Force)“扭矩”(Torque)的当前 X、Y 和 Z 分量值。也可以使用 MEL 命令或表达式(通过使用后面的表中的属性名称)来查询这些属性。

示例运行时表达式

print (velocityX + "\n");

该表达式在“脚本编辑器”(Script Editor)中显示每个帧的速度 X 内容。

接触属性

刚体具有包含碰撞过程中与其发生的接触的相关数据的只读属性。可以使用 MEL 命令或表达式(通过使用后面的表中的属性名称)来查询这些属性。

要积累这些属性中的数据,请选择控制刚体的解算器,显示“属性编辑器”(Attribute Editor)“刚体解算器状态”(Rigid Solver States)部分,然后启用“接触数据”(Contact Data)属性。每次启用“接触数据”(Contact Data)时都会将属性值清零。启用“接触数据”(Contact Data)会降低播放的速度。

示例运行时表达式

print (rigidBody1.contactCount +"\n");

该表达式显示每个帧的接触次数。