旋转车轮

在本课程中,您将学习如何根据汽车模型的行驶距离将车轮旋转一定量。

让我们从计算车轮旋转中涉及的三角学开始。

在任意圆形对象中,旋转量 (α) 是由圆的半径和 α 角度围绕的弧长所定义的。以弧度表示的旋转量 (α) 等于弧长除以圆的半径(弧长/R),其中:

因此,车轮旋转计算(弧长/R)变为距离/13。然而,车轮半径为常数且等于 13,而行驶距离为可变的。

设置课程:

旋转车轮(在世界 X 坐标中):

  1. 在“透视”视口中,选择“底盘”。

    当前已在世界 X 轴上设置了汽车的方向:您将在此坐标系中开始工作。

  2. 右键单击车身对象,然后从四元菜单中选择“连线参数”。
  3. 从弹出菜单中选择“变换”“位置”(第二个)“位置 XYZ”“X 位置”。
    注: 重要的是始终将列表顶部的第一个动画控制器(在此例中为“位置 XYZ 控制器”)置于未启用状态,因为其作用相当于父/子关系的“锁”。选择要操作的控制器时,请始终从控制器列表顶部的第二个控制器开始向下操作。

    一条橡皮筋显示了您要在两个选中对象之间建立的链接。

  4. 单击汽车的左前轮 (Wheel-FL)。
  5. 从弹出菜单中选择“变换”“旋转”(第二个)“Euler XYZ”“Z 轴旋转”。

    将打开“参数关联 #1”对话框。您使用此对话框设置对象之间的单向和双向控制关系。将高亮显示您刚选中以彼此作用的两个对象的位置和旋转。

  6. 在“参数关联”对话框上,单击“控制方向”上的向右箭头。

    这将确保 Chassis X 位置控制 Wheel-FL Z 旋转而不是采用其他方法。

    “参数关联”对话框的右下角将显示车轮对象“表达式”面板。该面板将行驶的距离表示为 X_Position。

  7. 在 X_Position 旁边,键入 /13

    表达式现在应为 X_Position/13,即距离除以车轮的半径。

  8. 单击“连接”,但不要关闭此对话框。
  9. 通过沿车身的 X 轴移动车身以测试您的工作。

    请注意左前车轮为何不旋转。即使您向汽车和车轮添加一个列表控制器,列表中的第一个控制器(确保父/子“锁定”的控制器)仍处于活动状态。您需要将第二个位置控制器(关联过程中使用的控制器)设置为活动控制器。

  10. 如果先前移动过汽车模型,请按 Ctrl+Z 撤消移动。
  11. 选中车身后,在 “运动”面板 “PRS 参数”卷展栏上单击卷展栏底部的“位置”按钮。
  12. 在“位置列表”卷展栏上,高亮显示第二个“位置 XYZ”控制器并单击“设置激活”。
  13. 尝试重新沿汽车的 X 轴移动汽车。
    提示: 为了更好地查看车轮旋转,请使用“前”视口,并将其显示模式更改为“明暗处理”(如果使用的是传统视口驱动程序,则更改为“平滑 + 高光”)。

    车轮现在会以正确的速率旋转,但运动方向是向后的。

  14. 在“参数关联”对话框中,请在“表达式”面板上向表达式的前面添加一个减号 (-),然后单击“更新”。
  15. 再次沿汽车的 X 轴移动汽车并注意车轮是如何沿正确方向旋转的。
  16. 为剩余三个车轮的每个车轮都重复前面的步骤。
    提示: 若要选择汽车右侧的车轮,您可以在选择车身的 X 位置后按 H 键,然后使用“拾取对象”对话框拾取车轮。

    因为车轮为镜像关系,因此汽车右侧的车轮不需要对其表达式添加负号,而左侧车轮则需要。

  17. 关闭所有“参数关联”对话框。

为 Y 轴旋转添加子控制器:

    在上一过程中,您学习了如何添加控制器,该控制器确定了模型沿世界 X 轴行驶距离长度的车轮旋转量。 然而,如果您尝试沿任何方向旋转汽车,车轮旋转都将会减少或完全停止。因此,您需要添加对汽车沿 Y 轴方向的位移进行计数的控制器。

  1. 在“顶”视口中,选择“底盘”对象,并将其顺时针旋转 –90 度以使其前保险杠指向 12 点钟方向。

    现在已在世界 Y 轴上设置汽车的方向,因此您将在此坐标系中开始工作。

  2. 环绕“透视”视口,直到可以看到汽车的左前方。
  3. 沿 Y 轴前后移动汽车。请注意,车轮不会旋转。

    要使车轮旋转,您需要其他动画控制器,即控制汽车沿 Y 轴方向的位移的控制器。您将这些控制器添加为子控制器,这样便不会覆盖已经放置好的控制器。

  4. 转至 3ds Max 窗口的左下角,右键单击 MAXScript 区域,然后选择“打开侦听器窗口”。
  5. 在宏录制器面板上,高亮显示以下行:

    $.rotation.controller.Available.controller = Euler_XYZ ()

    确保您在做出选择时不包括行后的回车符。按 Ctrl+C 将此行复制到内存。

    如果您不是接着上一课继续操作的,并且该行不显示在“打开侦听器”窗口中,请从此教程文本中复制该行。

  6. 关闭“MAXScript 侦听器”窗口,然后 选择左前轮 (Wheel-FL)。
  7. 单击 MAXScript 项字段(3ds Max 窗口左下角的白色框),按 Ctrl+V 以粘贴代码行,然后按 Enter 键。
  8. “运动”面板 “PRS 参数”卷展栏中,确保“旋转”按钮处于活动状态,然后在“旋转列表”卷展栏上,验证是否已将新的子控制器(总共应该有三个)添加到旋转列表中。
  9. 重复步骤 7 以添加第四个旋转子控制器。您在本教程中稍后将需要此控制器。

    现在左前轮应具有四条 Euler XYZ 轨迹。

  10. 选择另一个车轮并重复步骤 7 至 9,直到全部四个车轮在其各自旋转列表中均具有四条 Euler XYZ 轨迹。

在世界 Y 坐标中旋转车轮:

  1. 选择“底盘”并右键单击,然后从四元菜单中选择“连线参数”。
  2. 从菜单中选择“变换”“位置”(第二个)“位置 XYZ”“Y 位置”。
  3. 单击左前轮 (Wheel-FL)。
  4. 从菜单中选择“变换”“旋转”(第三个)“Euler XYZ”“Z 轴旋转”。
  5. 在“参数关联”对话框上,单击“控制方向”上的向右箭头以确保 Chassis Y 位置控制 Wheel-FL Z 轴旋转。
  6. 在右侧的“表达式”面板上,键入 /13,然后单击“连接”。

    左侧车轮的表达式应为 Y_Position/13

  7. 单击“连接”。
  8. 对其他三个车轮的每个车轮重复步骤 2 至 7。
    注: 右侧车轮的表达式应为 -Y_Position/13
  9. 关闭“参数关联”对话框。
  10. 在“顶”视口中, 旋转汽车以便它不水平或垂直指向。
  11. 在主工具栏上,单击 (选择并移动),然后将坐标系设置为“局部”。
  12. 如果需要,请调整“透视”视口,以便可以看到汽车的侧面。
  13. 沿汽车的局部 X 轴移动汽车。请注意车轮是如何正确旋转的。
  14. 在“顶”视口中,将汽车旋转到前保险杠指向左侧为止。
  15. 将文件另存为 mycar_rig_03.max

在路径约束下旋转车轮:

    在前面的过程中,您学会了如何在世界 X 和 Y 空间中添加控制器使车轮旋转以行驶任意距离。因此,当您沿任意方向在场景中手动移动汽车时,车轮都将正确旋转。

    不过,您通常要通过将汽车放在使用“路径”约束预定义的路径上来设置汽车的动画部分。此类型的动画需要不同的表达式。

    此新的表达式使用您前面使用过的相同公式(距离除以半径),不过尽管车轮的半径保持不变,但行驶距离的计算方式却不同。

  1. 从上一步骤中继续或 打开文件 car_rig_03.max
  2. 从主菜单 “选择集”列表中,然后选择“汽车路径”。

    将显示一条警告消息。

  3. 单击“是”以显示您将用于设置汽车动画的路径。
  4. 从主菜单中,选择“创建”“辅助对象”“点”。
  5. 在“参数”卷展栏上,启用“长方体”并将“大小”设置为 100.0

    这将增加辅助对象 Gizmo 的大小并使其在场景中更易于选择。

    注: 许多动画师使用“虚拟对象”辅助对象而不是“点”。使用点辅助对象的优点在于您可以调整其大小而不必缩放它。缩放层次结构中的辅助对象会影响其子对象:您通常想要避免此效果。
  6. 在“顶”视口中,单击汽车附近的一个点来放置点辅助对象。
  7. 在“点”辅助对象仍处于选中状态的情况下,在主工具栏上单击 (对齐),然后在任意视口中单击“底盘”对象。
  8. 在“对齐当前选择”对话框 “对齐位置”组,确保 X 位置和 Y 位置处于启用状态,而 Z 位置则处于禁用状态。
  9. 在“当前对象”和“目标对象”组中,确保选中“轴点”,然后单击“确定”。
  10. 在“前”视口中,将点辅助对象沿其 X 轴向右移动,直至其刚好移动至汽车后轴的左侧。

    移至后轴左侧的点辅助对象

    您指定的点辅助对象位置在前轮转动时将成为汽车的轴点。

  11. 在“命令”面板“名称和颜色”卷展栏上,重命名辅助对象 Dummy_CAR
  12. 在任意视口中选择“底盘”。
  13. 在主工具栏上,单击 (选择并链接),然后在“前”视口中,单击“底盘”并将其拖动至“点”辅助对象。这使得车身成为点辅助对象的子对象。
  14. 在主工具栏上,单击 (选择对象)以退出链接模式。
  15. 从主工具栏“选择集”列表中,选择 Garage_All。单击“是”退出警告并取消隐藏场景几何体的其余部分。
  16. 在“顶”视口中,使用 (最大化显示)查看整个停车场。
  17. 在“透视”视口中,单击“透视”标签,然后从菜单中选择“摄影机”“Camera_Wall-E”。

通过将虚拟对象约束至某个路径来设置其动画:

  1. 在任意视口中,选择 Dummy_CAR 辅助对象。
  2. 从主菜单中,选择“动画”“约束”“路径约束”。
  3. 在“顶”视口中,单击绿色路径 (CarPath)。

    辅助对象和链接的汽车将重新定位在该路径的起始处。

    注: 作为替代方案,您也可以将此汽车直接约束到路径。然而,在此情况下,最好约束作为此汽车父对象的辅助对象,这样您可以保持对汽车行为的额外控制(如在急转弯周围定义打滑)。

    该路径是 NURBS 曲线。

    提示: 当使用 NURBS 曲线作为动画路径时,将提供比普通样条线更平滑的“行驶”。
  4. 移动动画。

    在整个动画期间汽车方向保持不变。

  5. “运动”面板 “路径参数”卷展栏 “路径选项”组中,启用“跟随”。
  6. 向下滚动以显示“轴”组并启用“翻转”。

    “翻转”选项可防止汽车反向行驶。

  7. 再次拖动动画。

    汽车将在路径上指向正确方向,但车轮却不再旋转。这是因为您以前编写的用来定义车轮旋转的表达式不再适用。汽车的行驶距离取决于在世界坐标系中的 X 和 Y 位移。位移现在与路径长度及汽车行驶路径的百分比有关。必须添加反映此更改的关联。

将车轮旋转与路径连线起来:

  1. 在任意视口中,选择动画路径 (CarPath),然后转至 “工具”面板。
  2. 单击“测量”,然后在“图形”组中,记下路径长度。
  3. 选择并右键单击点辅助对象,然后从菜单中选择“连线参数”。
  4. 从菜单中选择“变换”“位置”“路径约束”“百分比”。
  5. 单击其中一个车轮,然后选择“变换”“旋转”(第四个)“Euler 旋转”“Z 轴旋转”。
  6. 在“参数关联”对话框上,将控制方向设置为右,这样将使用“百分比”参数控制车轮旋转。
  7. 在右侧“表达式”面板上,键入 (2365*Percent)/13
    注: 值 2365 为您先前测量的动画路径的长度。乘以百分比变量后,将计算出汽车在某一时间内的任意给定时刻沿路径行驶的距离。除以车轮半径 (13) 后,将得出车轮需旋转的圈数。
  8. 单击“连接”。
  9. 拖动动画查看车轮旋转。
  10. 要更好地查看动画,请单击 (时间配置)并在“时间配置”对话框 “时间显示”组中,选择“FRAME:TICKS”。
  11. 重复步骤 3 至 8 以将点辅助对象链接到其余三个车轮中的每个车轮。

    请记住向模型右侧车轮的表达式添加减号 (-) 运算符,以便这些车轮不会反方向旋转。

  12. 将文件另存为 mycar_rig_04.max

下一节

使车轮绕轴心转动