运行时表达式控制在播放动画时、动力学计算之前或之后的属性。每当执行运行时表达式时,Maya 都会更新在该表达式中被赋予值的任何属性。根据选择,可在动力学求值之前或之后对此进行更新。通常针对每帧更新一次。
如果运行时表达式未设定某一属性,该属性会将创建表达式的值用于动画的后续帧。
假定您已创建一个粒子栅格,然后为其速度属性创建该运行时表达式:
particleShape1.velocity = <<0,1,0>>;
为了在本章和其他章节中更便于查看粒子插图,我们将其显示为已着色的小球体而不是点。
使用默认的帧速率 24 帧/秒时,粒子每帧移动 1/24 个栅格单位。使用默认的过采样级别 1 时,运行时表达式每帧执行一次。Maya 为对象的每个粒子计算一次运行时表达式。
由于表达式将速度在每一帧设定为 <<0,1,0>>,因此表达式以冗余方式执行。因此,该表达式更适用于创建表达式。但是,在该示例中,这两种表达式类型的效果相同。
假定您已创建一个粒子栅格,并且动画的开始帧编号为 0。为其速度属性创建该运行时表达式:
particleShape1.velocity = <<0,time,0>>;
在播放动画时,该表达式将随着时间值的增加来增大速度的 Y 分量。这使得栅格中的所有粒子都随着时间的增加以更快的速度上升。增大的速度与加速度相同。
上一示例为所有粒子的速度属性给出了相同的值。也可以为每个粒子给定不同的属性值。
particleShape1.acceleration = sphrand(2);
每次执行运行时表达式时,该表达式对于 121 个粒子中的每个粒子执行一次。
sphrand(2) 函数提供了一个向量,其随机选择的分量位于以原点为中心且半径为 2 的假想球体中。每个粒子接收不同的向量值。有关 sphrand 函数的详细信息,请参见 sphrand。
由于每个粒子在每一帧中会接收表示加速度的不同随机向量,因此在播放场景时,粒子会分别以不断变化的方向和速率加速。这会使加速度突然改变方向。
假设您将动画的开始帧设定为 0,并使用“粒子工具”(Particle Tool)在原点处放置单个粒子:
particleShape1.position = <<3,time,0>>;
在播放动画时,由运行时表达式来控制该属性。在播放的第一帧中,粒子会跳到 <<3, time, 0>>。在默认帧速率为 24 帧/秒时,位置为 <<3,0.0417, 0>>,因为此时的时间值是 0.0417。
如果停止并回放动画,粒子将移回原点,即使用“粒子工具”(Particle Tool)创建粒子时的原始位置。创建粒子时,Maya 会在内部保留的初始状态属性 position0 中存储其原始位置。有关详细信息,请参见了解初始状态属性。
由于该属性没有用于控制其值的创建表达式,因此 Maya 将该属性设定为其初始状态 position0 值 <<0,0,0>>。
若要防止粒子在回放后跳回到原点,可以编写一个与运行时表达式相同的创建表达式:
particleShape1.position = <<3,time,0>>;
当回放动画时,粒子会移动到位置 <<3,time,0>>。由于在 0 帧处时间为 0,因此回放动画时粒子的开始位置为 <<3,0,0>>。在第二帧和后面的帧中,粒子将与时间增加值同步向上移动。
尽管该示例演示了如何使用创建表达式初始化位置属性,但您通过保存对象的当前属性值以用于初始状态可以获得几乎相同的结果: