【问题标题】:Driving constraint weights from user-editable start and end keyframes in Maya从 Maya 中用户可编辑的开始和结束关键帧驱动约束权重
【发布时间】:2015-10-11 00:51:41
【问题描述】:

我正在尝试通过在另一个对象上设置的特定开始和结束关键帧来驱动约束的 0-1。动画师可以更改这些开始和结束关键帧的位置。

例如,如果对象上的第一个关键点是第 10 帧,最后一个关键点是第 100 帧,则约束将在第 10 帧的强度为 0,然后在第 100 帧的强度为 1。

同样,如果对象上的第一个关键点位于 0,最后一个关键点位于 20,则约束将在第 0 帧处为强度 0,然后在第 20 帧处为强度 1。

理想情况下,约束也可以在动画曲线中读取,因此它可以是线性过渡、慢入等。

我遇到的主要问题是如何动态读取开始和结束关键帧,以便如果用户更改时间,约束权重也会更新。似乎表达式可能是要走的路,但我觉得它们的播放速度会更慢。我不是脚本工作的粉丝,但这也可能是一种方法。我想我在一天结束时要寻找的是来自 animCurve 的开始和结束关键帧的输出值。

【问题讨论】:

    标签: python animation maya


    【解决方案1】:

    这有点棘手,因为通常的方法 - 表达式或驱动键 - 无法正常工作:动画曲线的“开始”和“结束”不是可以以通常方式访问的属性。

    您可以尝试使用使用 getAttr 来获取关键时间的表达式。这是一个基本示例:

    float $start = `getAttr pCube1_translateX.keyTimeValue[0].keyTime`;
    float $end =  `getAttr pCube1_translateX.keyTimeValue[1].keyTime`;
    float $pct = (frame - $start) / ($end - $start);
    $pct = clamp(0, 1, $pct);
    float $lerp =  linstep(0, 1, $pct);
    pCube2.translateZ = $lerp;
    

    这将使pCube2pCube1 的 translateX 通道上的第一个键和第二个键之间的间隔内沿 Z 在 0 和 1 之间移动。

    这可行——但它非常脆弱,除非你想扩展它以获取键的数量并在每帧更新$end 中的索引值。

    我建议将问题放在头上,并将这两个项目从某个地方的第三个人工参数中剔除。然后,您可以使用更常规的表达式或 SDK。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多