以下各节介绍控制复杂运动和力的技术,其中包括:
为刚体的冲量设置关键帧
组合刚体动力学和关键帧
获取速度、力和碰撞数据
为刚体的冲量设置关键帧
可以允许和禁止为冲量设置关键帧以便立即更改刚体的速度,例如,在球棒撞击棒球时。
为冲量设置关键帧
选择刚体。
在动画的第一帧处,使用属性编辑器将冲量 X、Y、Z 和自旋冲量 X、Y、Z 的关键帧设置为 0、0、0。
转到要添加冲量的帧。
为冲量 X、Y、Z 和自旋冲量 X、Y、Z 的关键帧设置新值。
转到为属性设置关键帧的帧的下一帧。
将冲量 X、Y、Z 和自旋冲量 X、Y、Z 的关键帧设置为 0、0、0。
在“曲线图编辑器”(Graph Editor)或时间滑块中将所有关键帧的切线设置为阶跃类型。
例如,在时间滑块中选择一个关键帧,在“通道盒”(Channel Box)中选择属性,然后在时间滑块上单击鼠标右键,并选择“切线 > 阶跃”(Tangents > Stepped)。对每个关键帧重复该过程。
组合刚体动力学和关键帧
在刚体处于被动状态时,可以通过为“平移”(Translate)和“旋转”(Rotate)属性设置关键帧来为该刚体设置动画。在刚体处于主动状态时,可以使用动力学(具体地说是场和碰撞)来为该刚体设置动画。有时会希望组合使用关键帧和动力学。例如,可以使用关键帧使球滚下桌子,然后使该球在重力作用下下落。
在关键帧之后使用动力学
选择对象。
为对象的“平移”(Translate)和“旋转”(Rotate)属性设置关键帧以提供对象运动。
在关键帧运动的第一帧处,选择柔体/刚体 > 设置被动关键帧(Soft/Rigid Bodies > Set Passive Key)。
该选项将主动属性的关键帧设置为禁用设置并为对象的当前“平移”(Translate)和“旋转”(Rotate)属性值设置关键帧。
在使动力学具有控制权的第一帧处,选择柔体/刚体 > 设置主动关键帧(Soft/Rigid Bodies > Set Active Key)。
该选项将主动属性的关键帧设置为启用设置并为对象的当前“平移”(Translate)和“旋转”(Rotate)属性值设置关键帧。
将动力学应用于对象。
在后续帧处,可以通过选择柔体/刚体 > 设置被动关键帧(Soft/Rigid Bodies > Set Passive Key)将控制权从动力学切换到“平移”(Translate)和“旋转”(Rotate)关键帧。
在动力学之后使用关键帧
选择对象。
使对象成为刚体并使用动力学控制其运动。
在动力学控制运动的第一帧处,选择柔体/刚体 > 设置主动关键帧(Soft/Rigid Bodies > Set Active Key)。
该选项将主动属性的关键帧设置为启用设置并为对象的当前“平移”(Translate)和“旋转”(Rotate)属性值设置关键帧。
在希望“平移”(Translate)和“旋转”(Rotate)关键帧具有控制权的第一帧处,选择柔体/刚体 > 设置被动关键帧(Soft/Rigid Bodies > Set Passive Key)。
该选项将主动属性的关键帧设置为禁用设置并为对象的当前“平移”(Translate)和“旋转”(Rotate)属性值设置关键帧。
设置关键帧以控制运动。
在后续帧处,可以通过选择柔体/刚体 > 设置主动关键帧(Soft/Rigid Bodies > Set Active Key)将控制权从“平移”(Translate)和“旋转”(Rotate)关键帧切换到动力学。
提示:在关键帧之后使用动力学对刚体运动设置动画时,切换到动力学之前即时存在的速度会添加到动力学运动。在动力学之后使用关键帧对刚体运动设置动画时,该刚体会采用切换到关键帧时的即时关键帧位置。不会将以前的动力学速度添加到关键帧运动。
获取速度、力和碰撞数据
刚体具有包含其当前速度和任何应用于它的力和碰撞的只读属性。本节将介绍这些属性。
力、速度、自旋和扭矩属性
选择刚体时,“属性编辑器”(Attribute Editor)会显示“速度”(Velocity)、“自旋”(Spin)、“力”(Force)和“扭矩”(Torque)的当前 X、Y 和 Z 分量值。也可以使用 MEL 命令或表达式(通过使用后面的表中的属性名称)来查询这些属性。
示例运行时表达式
print (velocityX + "");
该表达式在“脚本编辑器”(Script Editor)中显示每个帧的速度 X 内容。
接触属性
刚体具有包含碰撞过程中与其发生的接触的相关数据的只读属性。可以使用 MEL 命令或表达式(通过使用后面的表中的属性名称)来查询这些属性。
要积累这些属性中的数据,请选择控制刚体的解算器,显示“属性编辑器”(Attribute Editor)的“刚体解算器状态”(Rigid Solver States)部分,然后启用“接触数据”(Contact Data)属性。每次启用“接触数据”(Contact Data)时都会将属性值清零。启用“接触数据”(Contact Data)会降低播放的速度。
示例运行时表达式
print (rigidBody1.contactCount +"");
该表达式显示每个帧的接触次数。
,