减少冗余表达式执行

 
 
 

如果表达式包含冗余的语句计算,可以禁用“求值:始终”(Always Evaluate)以加快动画的拖动和播放速度。若要了解此功能适用的情况,必须了解表达式执行的细微细节。

表达式通常在每次动画时间改变时执行。每当表达式读取的属性值更改,并且发生以下两个操作之一时,也会执行表达式:

在此上下文中,预定义的变量时间和帧也被视为表达式读取的属性。

假设您创建的表达式用于沿 Y 轴移动 NURBS 球体,移动距离为其在 X 轴当前平移值的两倍:

nurbsSphere1.translateY = 2 * nurbsSphere1.translateX;

如果在工作区中使用“移动工具”(Move tool)沿 X 轴方向拖动球体,Maya 会为拖动时“translateX”属性的每次增量改变执行该表达式。

沿 X 方向拖动球体会更改表达式中“translateX”属性的值。当您拖动球体而使 Maya 更新工作区的显示时,表达式中“translateY”属性的值会发生改变。这种改变会使表达式执行。

如果禁用“求值:始终”(Always Evaluate),并且表达式只包含打印函数语句、变量指定或不读取属性值的指定,则该表达式不会执行。

样例

global float $BallHeight = 5;
print($BallHeight+"\n");
nurbsSphere1.tx = rand(1);
print(nurbsSphere1.tx+"\n");

第一条语句声明值并将其指定给变量 $BallHeight(不是属性)。下一条语句打印 $BallHeight,但不指定任何属性值。

下一条语句为属性指定值,但该值是由随机数函数 rand 生成的。该函数不读取属性值。有关 rand 函数的详细信息,请参见 rand

最后一条语句读取并打印属性值,但不指定任何属性值。

禁用了“求值:始终”(Always Evaluate)时,这些操作都不会使表达式执行。

“求值:始终”(Always Evaluate)仅影响您要创建或编辑的表达式。可以为一个表达式启用该设置,而为另一个表达式禁用该设置。

对于大多数动画,无论是否启用“求值:始终”(Always Evaluate),表达式都会执行。如果有疑问,请保持启用状态。