Animation Editor

“Animation Editor”显示动画参数、通道、动作和关键帧,以用于编辑和播放。当使用下列工具时,将填充“Animation Editor”:

缺少 Gif

Objects 以与“Object Lister”中相同的方式作为节点和组列出,并为 NURBS 几何体显示额外的层次结构级别以显示 CV。还显示材质球和灯光参数。过滤器图标会影响显示的对象。

Parameters 是可设置动画的节点的属性。如果未应用任何动画,则这些内容将以中性色显示。

Channels 是已设置动画并以 XYZ 颜色亮显的参数。通道数据描述动画播放期间其参数在不同帧时间的值。动画参数及其通道之间的对应关系是隐含的,即由相同名称表示。

Actions 显示动画的持续时间。这些在节点级别显示为摘要栏,在参数级别显示为单个关键帧。

Keyframes 设置节点的时间、值和切线类型设置。可以使用关键帧菱形图标上的鼠标右键关联菜单访问和更改这些设置。

Expressions 将动画添加到节点,而无需设置关键帧。可以通过双击参数的动作部分并输入语法(如表达式语法参考中所述)来添加表达式。

相关视频

Animation Editor - 鼠标交互

可以向左和向右移动关键帧,以更改动画的计时。在“Action”摘要栏上移动关键帧也会移动和调整下面的通道关键帧。下面的各个参数关键帧可以单独移动。

缺少 Gif

鼠标滚轮可用于导航编辑器的区域,如下图所示。

使用 Shift+Alt 与鼠标中键和鼠标右键也可以在“Actions and Channels”主窗口中移动。

缺少 Gif

Animation Editor - 工具和控件

缺少 Gif

Playback Controls

  • - 正向/逆向播放。

  • - 下一个/上一个关键帧。

  • - 下一个/上一个帧。

  • - 跳至开始/结束。

  • - 停止播放。

    • 注意:单击 Alias 窗口中的任意位置也会停止动画播放。

时间轴和播放指针 - 单击并拖动以移动播放指针。这是动画的当前帧。使用滚动按钮左右移动时间轴。

Playback Settings

  • Current - 显示播放指针所在的帧。输入值以移动播放指针。
  • By - 当设置为 1.00 时,播放会显示每一帧。例如,当设置为 2 时,将仅每隔一帧查看一次。
  • FPS - 每秒帧数。如果将其设置为零,则动画会按照显卡允许的速度快速播放。要实现受控播放,请输入帧速率(例如 25 fps)。
  • Range - 如果“Range”为“On”,则输入“Start”和“End”值以设置播放的时间周期。如果“Range”为“Off”,则动画会从第一个关键帧播放到最后一个关键帧,并继续循环播放。有时,这不会根据计时更改正确更新。在这种情况下,使用“Range”来设置所需的播放周期。

Expanders

  • 公开或隐藏节点层次结构。
  • 公开或隐藏每个节点的参数。此图标通过高亮颜色和强调来指示具有动画通道的参数。

Pin - 选择固定 图标以在节点列表中固定某个节点,而不考虑过滤器设置。固定节点会移动到列表顶部,因此您可能会看到部分列表重组。

Shortcuts - 节点列表中选定项的“Set Keyframes”和“Delete Channels”的快捷键。单击列表中的节点或参数名称。使用 Shift 键选择多个项目。

Animation Editor - 关联菜单

使用鼠标右键访问关联菜单。

“Object Lister”的关联菜单

缺少图像

要选择多个节点,请先将 Ctrl 键与鼠标左键一起使用。然后,关联菜单工具将应用于所有选定节点。

关联“Set Keyframe”工具会使用以下设置:

  • Parameters:Global - 指的是“Param Control Settings”。
  • Hierarchy:None - 仅为选定节点或参数设置关键帧。
  • Tangent Type:与在“Animation”>“Set Keyframe”工具选项中设置的一样。
  • Overwrite Tangents:On

关联“Clear Animation”工具会使用以下设置:

  • Channel Types:Both - 删除动画通道和表达式。
  • Objects:Active - 仅删除选定节点或参数的通道。
  • Parameters:All - 在节点级别使用时,删除所有参数的所有通道。这不是指“Param Control Settings”。
  • Hierarchy:None - 仅删除选定节点的通道。

为材质球、灯光或纹理参数设置关键帧

为材质球和灯光参数设置关键帧的唯一方法是使用关联菜单。材质球参数显示在材质球节点下。在 Shader Editor 或 Light Editor 中进行调整,然后使用关联菜单在选定参数上设置关键帧。

缺少 Gif

关键帧的关联菜单

缺少 Gif

“Keyframe”关联菜单适用于单个参数关键帧,而不适用于嵌入在节点的动作摘要栏中的关键帧。

在“Animation Editor”内的“Settings”窗口外单击以关闭。

可以使用 Shift 键选择多个关键帧,但关联菜单仅应用于使用鼠标右键选择的关键帧。

平移值以厘米显示。

Animation Editor - 表达式

表达式将动画添加到节点,而无需设置关键帧。

可以通过双击参数的动作部分并输入语法(如下面的表达式语法部分中所述)来添加表达式。

Enter 键确认键入的表达式。

缺少 Gif

例如,表达式可以引用已设置关键帧动画的另一个通道:

缺少 Gif

表达式可以引用帧并创建一个无限持续的运动:

缺少 Gif

表达式语法

表达式只能引用 DAG 节点及其 CV。例如,不支持引用材质球和灯光参数。

要在移动鼠标时查看表达式更新,请在“Preferences”>“Performance Options”的“Expression Updates”部分启用“During Transform”。

引用其他参数

参数引用的定义如下所示:

ObjectName[.CVreference]:Parameter
  • “ObjectName”是要引用的对象(DAG 节点)的名称。
  • “CVreference”是用于指定 CV 的可选限定符。
  • “Parameter”是要引用的特定参数。

DAG 节点引用

在 DAG 层次内,可以使用相对引用来引用在层次中位置更高的 DAG 节点。使用单个句点 . 指定当前 DAG 节点。两个句点 .. 表示当前 DAG 节点上方的 DAG 节点。引用开头的反斜杠 \ 表示当前 DAG 节点上方最高层次的 DAG 节点。反斜杠也可以用于分隔向上的引用。

例如,假定您按照降序定义了以下层次结构:

BaseLevel:SubLevel1:SubLevel2:object
For example:
Fluffy:Shoulder:Paw:mySphere

此时,对于 mySphere 对象的相对引用可按如下方式创建:

.
mySphere
..
Paw
..\..
Shoulder
..\..\..
Fluffy
\
Fluffy

如果添加或移除了中间级别,将重新计算相对引用。因此,如果移除了 Paw,则 .. 是指 Shoulder

相对引用很有用,因为从一个对象复制到另一个对象的表达式将引用新对象的 DAG 层次,而明确的非相对引用将继续引用旧对象的层次。

CV 引用

曲面内任何 CV 的参数可能会如下表中所示进行引用:

对象引用(其中 # 表示一个数字)示例
曲面u#v#plane.u3v0
曲线u#curve.u1
面内曲线c#u#curve#3.c2u3

有效参数

对于 DAG 节点引用,可以使用下列参数:

X_TranslatetxDAG 节点的局部 X 平移
Y_TranslatetyDAG 节点的局部 Y 平移
Z_TranslatetzDAG 节点的局部 Z 平移
X_RotaterxDAG 节点的局部 X 旋转(以度为单位)
Y_RotateryDAG 节点的局部 Y 旋转(以度为单位)
Z_RotaterzDAG 节点的局部 Z 旋转(以度为单位)
X_ScalesxDAG 节点的局部 X 比例系数
Y_ScalesyDAG 节点的局部 Y 比例系数
Z_ScaleszDAG 节点的局部 Z 比例系数
Visibility指定此 DAG 是否可见的布尔值

对于 CV 引用,可以使用下列参数:

X_PositionpxCV 的局部 X 位置
Y_PositionpyCV 的局部 Y 位置
Z_PositionzpCV 的局部 Z 位置
Weight此 CV 的权重系数

表达式名称缩写形式

缩写的表达式参数名称,例如“tx”、“ty”、“sx”和“rX”可以展开为全名。还可以采用“TX”形式显示名称。

有效参数的示例

sphere:X_Translate球体对象的 X 平移
sphere.u2v3:X_Position球体对象内 u2v3 CV 的 X 位置
..\..:X_Translate“高”两个级别的 DAG 节点的 X 平移

数学函数

除了普通的数学运算符(+、-、*、/)之外,还可以使用任何 SDL 函数,此类函数的计算结果为“SCALAR”。

下表提供了对每个函数的简要描述以及应使用的参数。

  • 标准三角函数:

    acos(radians)acosd(degrees)
    asin(radians)asind(degrees)
    atan(radians)atand(degrees)
    atan2(value, value)atan2d(value, value)
    cos(radians)cosd(degrees)
    cosh(value) 
    sin(radians)sind(degrees)
    sinh(value) 
    tan(radians)tand(degrees)
    tanh(value) 
  • Bessel 函数 Jn(x):

    besselj0(value)besselj1(value)
    besseljn(order,value)besselyn(order, value)
  • 大于 value 的最小整数:

     ceil (value)
    
  • 限制 value,使其介于 startend 之间,是 by 的整数倍数:

     constrain (start, end, by, value)
    
  • 错误函数:

     erf (value)        erfc (value)
    
  • value 的绝对值:

     fabs (value)
    
  • 小于 value 的最大整数:

     floor (value)
    
  • value/divisor 的浮点余数:

     fmod (value, divisor)
    
  • Gamma 函数:

     gamma (value)
    
  • 使用标准 Gaussian 分布返回随机数字:

     gauss ()
    
  • 边长为 xy 的矩形的对角线长度。

  • value 的基数为 10 的对数:

     log10 (value)
    
  • valuepower 次幂值:

     pow (value, power)
    
  • 使用伪随机分布返回 -1.0 到 1.0 范围内的某个随机数字:

     rand ()
    
  • 使用参数 seed 作为伪随机数新序列的种子:

     srand (seed)
    
  • 如果 value 是 0.0,则返回 0.0,如果 value 是正数,则返回 1.0,如果 value 是负数,则返回 -1.0:

     sign (value)
    
  • value 的平方根:

     sqrt (value)   
    
  • 评估动作曲线:

     animate (action curve, expression) 
    

    animate 函数的值是通过 expression 指定的帧处的 action curve 曲线值。例如,animate (curve, frame - 2) 将返回比当前帧小两帧位置的动画曲线的值。可以在“Animation Editor”中查看任何动作的名称。

    • animate 函数以动作曲线而不是通道作为其第一个参数。因此,该函数不引用诸如 sphere:X_Translate 之类的参数,而是引用可能针对某个此类参数(例如 sphere.X_Translatemy_curve)设置动画的动作曲线。

    • 作为一种简便方式,在表达式中输入 animate 函数时,可通过在括号中包含引用来指定参数引用或通道引用,例如 animate ({sphere:X_Translate}, frame)。但是请注意,此引用将立即转换为当前针对该参数设置动画的动作曲线的引用,所以,仍不是真正的通道引用。

      animate 函数提供了两项非常有用的功能:

      • 可以引用某个对象在非当前帧时间的位置。
      • 可以作为一种机制,用于在表达式中定义您自己的函数。

逻辑运算

逻辑运算符包括:

  • 比较运算符(==!=><>=<=
  • 布尔运算符(&&|| !)

只要允许包含值,就可以使用这些运算符。如果逻辑运算结果是 TRUE,则计算为 1.0,如果逻辑运算结果是 FALSE,则计算为 0.0。

基于决策设置对象位置即属于逻辑运算。其算法如下所述:

  • 如果立方体和圆锥体之间在 X 轴上的距离小于 3 个单位
  • 则返回棱锥的 X 平移值减去 4 个单位
  • 否则,返回立方体的 X 平移值减去 5 个单位

此算法的输入如下所示:

((fabs (cube:X_Translate - cone:X_Translate) < 3) * (pyramid.X_Translate - 4)) +
((fabs (cube:X_Translate - cone:X_Translate) >= 3) * (cube:X_Translate - 5)) 

相关视频: