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

Objects 以与“Object Lister”中相同的方式作为节点和组列出,并为 NURBS 几何体显示额外的层次结构级别以显示 CV。还显示材质球和灯光参数。过滤器图标会影响显示的对象。
Parameters 是可设置动画的节点的属性。如果未应用任何动画,则这些内容将以中性色显示。
Channels 是已设置动画并以 XYZ 颜色亮显的参数。通道数据描述动画播放期间其参数在不同帧时间的值。动画参数及其通道之间的对应关系是隐含的,即由相同名称表示。
Actions 显示动画的持续时间。这些在节点级别显示为摘要栏,在参数级别显示为单个关键帧。
Keyframes 设置节点的时间、值和切线类型设置。可以使用关键帧菱形图标上的鼠标右键关联菜单访问和更改这些设置。
Expressions 将动画添加到节点,而无需设置关键帧。可以通过双击参数的动作部分并输入语法(如表达式语法参考中所述)来添加表达式。
Animation Editor - 鼠标交互
可以向左和向右移动关键帧,以更改动画的计时。在“Action”摘要栏上移动关键帧也会移动和调整下面的通道关键帧。下面的各个参数关键帧可以单独移动。

鼠标滚轮可用于导航编辑器的区域,如下图所示。
使用 Shift+Alt 与鼠标中键和鼠标右键也可以在“Actions and Channels”主窗口中移动。

Animation Editor - 工具和控件

Playback Controls

- 正向/逆向播放。

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

- 下一个/上一个帧。

- 跳至开始/结束。
- 停止播放。
时间轴和播放指针 - 单击并拖动以移动播放指针。这是动画的当前帧。使用滚动按钮左右移动时间轴。
Playback Settings
Expanders
公开或隐藏节点层次结构。
公开或隐藏每个节点的参数。此图标通过高亮颜色和强调来指示具有动画通道的参数。
Pin - 选择固定
图标以在节点列表中固定某个节点,而不考虑过滤器设置。固定节点会移动到列表顶部,因此您可能会看到部分列表重组。
Shortcuts - 节点列表中选定项的“Set Keyframes”和“Delete Channels”的快捷键。单击列表中的节点或参数名称。使用 Shift 键选择多个项目。
Animation Editor - 表达式
表达式将动画添加到节点,而无需设置关键帧。
可以通过双击参数的动作部分并输入语法(如下面的表达式语法部分中所述)来添加表达式。
按 Enter 键确认键入的表达式。

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

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

表达式语法
表达式只能引用 DAG 节点及其 CV。例如,不支持引用材质球和灯光参数。
要在移动鼠标时查看表达式更新,请在“Preferences”>“Performance Options”的“Expression Updates”部分启用“During Transform”。
参数引用的定义如下所示:
ObjectName[.CVreference]:Parameter
在 DAG 层次内,可以使用相对引用来引用在层次中位置更高的 DAG 节点。使用单个句点 . 指定当前 DAG 节点。两个句点 .. 表示当前 DAG 节点上方的 DAG 节点。引用开头的反斜杠 \ 表示当前 DAG 节点上方最高层次的 DAG 节点。反斜杠也可以用于分隔向上的引用。
例如,假定您按照降序定义了以下层次结构:
BaseLevel:SubLevel1:SubLevel2:object
For example:
Fluffy:Shoulder:Paw:mySphere
此时,对于 mySphere 对象的相对引用可按如下方式创建:
| |
| |
| |
| |
| |
如果添加或移除了中间级别,将重新计算相对引用。因此,如果移除了 Paw,则 .. 是指 Shoulder。
相对引用很有用,因为从一个对象复制到另一个对象的表达式将引用新对象的 DAG 层次,而明确的非相对引用将继续引用旧对象的层次。
曲面内任何 CV 的参数可能会如下表中所示进行引用:
| 对象 | 引用(其中 # 表示一个数字) | 示例 |
|---|---|---|
| 曲面 | u#v# | plane.u3v0 |
| 曲线 | u# | curve.u1 |
| 面内曲线 | c#u# | curve#3.c2u3 |
对于 DAG 节点引用,可以使用下列参数:
| X_Translate 或 tx | DAG 节点的局部 X 平移 |
| Y_Translate 或 ty | DAG 节点的局部 Y 平移 |
| Z_Translate 或 tz | DAG 节点的局部 Z 平移 |
| X_Rotate 或 rx | DAG 节点的局部 X 旋转(以度为单位) |
| Y_Rotate 或 ry | DAG 节点的局部 Y 旋转(以度为单位) |
| Z_Rotate 或 rz | DAG 节点的局部 Z 旋转(以度为单位) |
| X_Scale 或 sx | DAG 节点的局部 X 比例系数 |
| Y_Scale 或 sy | DAG 节点的局部 Y 比例系数 |
| Z_Scale 或 sz | DAG 节点的局部 Z 比例系数 |
| Visibility | 指定此 DAG 是否可见的布尔值 |
对于 CV 引用,可以使用下列参数:
| X_Position 或 px | CV 的局部 X 位置 |
| Y_Position 或 py | CV 的局部 Y 位置 |
| Z_Position 或 zp | CV 的局部 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,使其介于 start 和 end 之间,是 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 ()
边长为 x 和 y 的矩形的对角线长度。
value 的基数为 10 的对数:
log10 (value)
value 的 power 次幂值:
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_Translate 或 my_curve)设置动画的动作曲线。
作为一种简便方式,在表达式中输入 animate 函数时,可通过在括号中包含引用来指定参数引用或通道引用,例如 animate ({sphere:X_Translate}, frame)。但是请注意,此引用将立即转换为当前针对该参数设置动画的动作曲线的引用,所以,仍不是真正的通道引用。
animate 函数提供了两项非常有用的功能:
逻辑运算符包括:
==、!=、>、<、>=、<=)&&、|| !))只要允许包含值,就可以使用这些运算符。如果逻辑运算结果是 TRUE,则计算为 1.0,如果逻辑运算结果是 FALSE,则计算为 0.0。
基于决策设置对象位置即属于逻辑运算。其算法如下所述:
此算法的输入如下所示:
((fabs (cube:X_Translate - cone:X_Translate) < 3) * (pyramid.X_Translate - 4)) +
((fabs (cube:X_Translate - cone:X_Translate) >= 3) * (cube:X_Translate - 5))