优化表达式

 
 
 

Maya 以厘米、弧度和秒为单位进行内部计算。弧度是数学中常用的角度单位。它等于 180 度除以派(π),或大约为 57.3 度。

将某个数字指定给其值为度量单位的属性时,默认情况下,该表达式会将数字解释为您在“首选项”(Preferences)窗口的“设置”(Settings)类别中选定的适当单位。默认情况下,单位类型的选择为厘米、弧度和每秒 24 帧。

如果已选择的度量单位与对应的内部单位不同,则 Maya 会将该数字转化为适当的内部单位,以执行指定。

示例

假设已从“首选项”(Preferences)窗口的“设置”(Settings)区域中的“角度”(Angular)菜单选择度。然后为名为“球”的对象编写以下表达式:

Ball.rotateZ = 10;

Maya 会将 10 读取为 10 度,然后将该值转化为适当的弧度数,以便对球的“rotateZ”属性进行指定。转化将自动进行。从您的角度来说,Maya 仅会使球旋转 10 度。

在非粒子表达式中,这些自动转化会影响 Maya 性能。由于该表达式执行速度较慢,因此当您播放、回放或以其他方式更改动画时间时,Maya 的运行速度会比较慢。此外,在包含表达式的场景上执行保存、打开和其他文件操作也比较慢。

若要提高 Maya 性能,则可禁用转化为内部单位的功能。如果执行该操作,则必须以表达式语句转化单位。

若要加快表达式执行的速度,请执行下列操作:

  1. 显示“表达式编辑器”(Expression Editor)
  2. 选择以下“转化单位”(Convert Units)选项之一:
    无(None)

    不转化单位。必须使用厘米、弧度或秒为属性指定值(如果适当)使用该选项的执行速度最快。

    仅角度(Angular Only)

    转化角度单位,但不转化其他。必须使用厘米、秒或弧度为属性指定值(如果适当)。(以上描述假设正在使用“首选项”(Preferences)中的默认度设置。如果已选定弧度,则必须输入弧度)。

    如果不知如何将度转化为弧度,请选择该选项。除非表达式具有许多角度值,否则使用该选项的执行速度很快。

若要返回默认转化,请执行下列操作:

  1. 显示“表达式编辑器”(Expression Editor)
  2. 对于“转化单位”(Convert Units)选项,请选择“全部”(All)

    这将允许您使用“工作单位”(Working Units)首选项设置中指定的相同单位输入所有度量数值。使用该选择的执行速度最慢,但表达式编写过程最简单。

    可以为每个表达式设定不同的转化选项。

示例

假设在“首选项”(Preferences)窗口中,已将“线性”(Linear)单位设定为“毫米”(millimeter),且将“角度”(Angular)单位设定为“度”(degrees)。然后,可以编写下列表达式:

Ball.translateX = 5;
Ball.rotateZ = 10;

“全部”(All)可导致 Maya 将 5 读取为 5 毫米,将 10 读取为 10 度。

“无”(None)可导致 Maya 将 5 读取为 5 厘米,将 10 读取为 10 弧度。

“仅角度”(Angular Only)会导致 Maya 将 5 读取为 5 厘米,将 10 读取为 10 度。

使用表达式语句转化单位

  1. 必须以语句采用数学方式转化单位。

示例

假设在“首选项”(Preferences)窗口中,已将“线性”(Linear)单位设定为“毫米”(millimeter),且将“角度”(Angular)单位设定为“度”(degrees)

“表达式编辑器”(Expression Editor)中,将“转化单位”(Convert Units)选项设定为“无”(None)并输入以下表达式:

Ball.translateX = 5;
Ball.rotateZ = 10;

“无”会导致 Maya 将 5 读取为 5 厘米,将 10 读取为 10 弧度,但这并非是您所需的结果。

若要将 5 毫米指定给球的“translateX”属性,则必须将 5 转化为适当的厘米数。若要将 10 度指定给球的“rotateZ”属性,则必须将 10 转化为适当的弧度数。

下列语句可执行该操作:

Ball.translateX = 5.0 / 10.0;
Ball.rotateZ = 10.0 / 57.3;

每厘米有 10 毫米。换句话说,1 毫米等于 1 厘米除以 10。因此,5 毫米等于 5 厘米除以 10。这样,可以使用运算 5.0/10.0。

重要信息

当除以浮点属性或变量时,请输入浮点值。例如,为罗马数字 5 输入 5.0。这样可以确保 Maya 不会尝试将结果转化为整型

每弧度等于 57.3 度。换句话说,1 度等于 1 弧度除以 57.3。因此,10 度等于 10 弧度除以 57.3。这样,可以使用值 10.0/57.3。

如果需要更精确地转化为弧度,请将 1 度除以 57.29578,而不是除以 57.3。可以改为使用如下所示的 deg_to_rad 函数:

Ball.rotateZ = deg_to_rad(10.0);

deg_to_rad 函数会将 10.0 度转化为精确的等价弧度。有关详细信息,请参见 deg_to_rad

禁用单位转化仅影响表达式。它不会影响其他 Maya 命令、选项或显示。例如,上述示例表达式将厘米指定给“translateX”,将弧度指定给“rotateZ”。但是,“通道盒”(Channel Box)仍会以毫米和弧度为单位显示这些属性的值。它将以您在“首选项”(Preferences)窗口的“设置”(Settings)部分中选择的任何单位为单位显示值。

您不能禁用粒子形状节点表达式的单位转化。对于这类表达式,Maya 以不同方式处理单位转化时,几乎不会对性能产生影响。