切线约束可约束对象的方向,以使某个对象沿曲线移动时,该对象始终指向曲线的方向。曲线提供对象运动的路径,对象会调整自身的方向以指向曲线。切线约束用于使对象跟随曲线的方向,例如过山车会跟随轨迹的方向。
通常,将切线约束与几何体约束结合使用。有关几何体约束的详细信息,请参见几何体约束。
目标向量或加权平均向量表示在受约束对象的位置沿曲线的切线向量。Maya 以曲线附近切线的加权平均值形式计算目标向量(即,曲线的切线向量)。
受约束对象的方向由三个向量控制:目标向量、上方向向量和世界上方向向量。这些向量不会显示在工作区中,但可以推断它们对受约束对象的方向产生的效果。
无需为了有效地使用约束而了解这些向量如何工作的详细信息。如果不熟悉约束,则可以跳过本节的其余部分。但是,如果要对切线约束施加较高程度的控制,您将需要使用这些向量。此外,熟悉这些向量可帮助您了解受约束对象如何才能突然侧滚。
这些约束的工作方式是旋转对象,以使 aimVector 指向所需的方向。然后,围绕 aimVector 扭曲对象,以便 upVector 的指向尽可能接近 worldUpVector。
如果 aimVector 和 upVector 指向同一方向,那么不可能进行此处的第二个旋转。无论对象如何围绕 aimVector 旋转,upVector 都不会更加靠近 worldUpVector。
这可能会是一个很有用的效果,因为它允许受约束对象指向任何方向而从不翻转。它的旋转量最小,以便 aimVector 瞄准对象,然后它将停止。但是,它会从当前的位置旋转,因此,如果每次不对相同的帧序列求值,则得不到相同的答案。这可能会对渲染造成很大的破坏,最好避免这种情况
目标向量会约束受约束对象,以便它始终与目的向量对齐。目标向量始于受约束对象的枢轴点,然后与目的向量对齐。
对象如何旋转以与目的向量对齐取决于如何相对于对象的局部空间定义目标向量。例如,默认情况下,对目标向量进行定义,以使其指向与局部旋转正 X 轴相同的方向。因此,默认情况下,受约束对象的局部旋转正 X 轴将与目的向量对齐。
目标向量自身无法完全约束对象,因为目标向量并不控制对象可能会围绕目标向量旋转的方式。围绕目标向量的对象的方向是由上方向向量和世界上方向向量所控制的。
上方向向量控制围绕目标向量的受约束对象的方向。与目标向量类似,上方向向量也是相对于受约束对象的局部空间定义的。默认情况下,上方向向量尝试指向与世界上方向向量相同的方向,世界上方向向量是相对于场景的世界空间定义的。上方向向量通过尝试将它自身尽可能与世界上方向向量对齐,确定围绕目标向量的受约束对象的方向。
移动目的对象时,受约束对象的目标向量将移动以与目的向量对齐,并相应地确定受约束对象的方向。同时,受约束对象将按照上方向向量的定向自行确定绕目标向量的方向。
例如,默认情况下,对上方向向量进行定义,以使其指向与局部旋转正 Y 轴相同的方向。受约束对象的局部正 X 轴会按照默认目标向量的指向与目标向量对齐。同时,该对象的局部正 Y 轴将尝试按照该对象的上方向向量的定向指向与世界上方向向量相同的方向。目标向量与上方向向量一起使用可约束受约束对象的方向。
默认情况下,上方向向量将尝试保持尽可能与世界上方向向量紧密对齐。但是,可以使用各种方法控制世界上方向向量的作用。例如,可以相对于某个其他对象的局部空间定义世界上方向向量,而不是相对于工作区的世界空间定义它(默认设置)。这样的对象称为世界上方向对象。
某些情况下,受约束对象可以快速围绕其目标向量旋转。为了理解为什么出现该情况,需要了解目标向量、上方向向量和世界上方向向量的工作方式。如果对约束还很陌生,那么可以跳过这一节。有关详细信息,请参见上一节目标约束的受约束对象的方向。
随着目标向量越来越接近指向与上方向向量相同的方向或相反的方向,受约束对象围绕目标向量旋转得更快。如果目标向量恰好指向相同的方向,或恰好指向相反的方向,则受约束对象可能会突然围绕目标向量旋转 180 度。
这些快速旋转会产生翻滚效果,您可能希望避免这些效果。通过移动世界上方向向量或设置其动画,可以避免翻滚效果。有关详细信息,请参见控制目标约束的运动历史相关性效果。
运动历史相关性是指对象如何可以在相同的情况下(除了对象先前受操纵或已设置动画之外)提供不同的运动效果。
例如,当设置某个对象的动画并循环运行动画时,如果对象在每个循环中在相同的帧处以略为不同的方式结束移动,那么该对象与运动历史相关。在某个帧处,根据其先前的方向,可能会以不同的方式确定对象的方向。相反,如果在每个循环中对象以完全相同的方式移动,那么该对象就与运动历史无关。
如果需要可预测的运动效果,那么运动历史相关性效果可能会是一个问题。但是,如果要寻求某些不可预测的运动效果,则可能需要利用对象的运动历史相关性。
在某些情况下,受约束对象的方向可能会变成与运动历史相关。为了理解为什么出现该情况,需要熟悉目标向量和上方向向量(请参见目标约束的受约束对象的方向)。
如果将目标向量和上方向向量定义为指向同一方向,则受约束对象可能会变成与运动历史相关。例如,如果相对于受约束对象的局部 Y 轴定义目标向量,但不更改上方向向量的默认方向(上方向向量也相对于对象的局部 Y 轴),则可能会这样做。有关详细信息,请参见控制目标约束的运动历史相关性效果。
如果将约束的“世界上方向类型”(World Up Type)属性设定为“无”(None),那么受约束对象也可能会变成与运动历史相关。有关详细信息,请参见编辑点约束。