可以使用数学表达式来控制下列对象属性:        

  • 对象参数,如长度、宽度和高度

  • 变换和修改器值,如对象的位置坐标

关联参数表达式控制器数值表达式求值器都使用本主题中介绍的表达式。        

表达式是一种能得出数值的数学函数。可以使用表达式来控制下列场景元素:            

 

 

场景元素可计算属性
创建参数任意数字创建参数
变换位置 [X、Y、Z]

X 轴旋转

Y 轴旋转

Z 轴旋转

缩放 [X%、Y%、Z%]

修改器任意数字修改器参数(包括创建参数)
材质颜色 [R、G、B]

任意数字材质参数

注意表达式只处理 Euler 旋转的单个 XYZ 分量。不能将表达式指定给 TCB 旋转或其他类型的旋转控制器。

以下链接会跳跃到本主题内的部分:        

  • 表达式结果类型

  • 操作符

  • 变量

  • 函数

表达式结果类型

表达式得出的值的类型取决于控制器的种类:  

  • 浮点表达式得出浮点标量值(例如,5.617)。标量在数字参数的动画控制器中使用。                  

    如果参数具有整数值,则表达式会将浮点值舍入为最接近的整数。                  


  • 位置、缩放和 Point3 表达式得出三元向量。例如,[5,18,24]。向量可以表示对象的 X,Y,Z 位置、X,Y,Z 百分比缩放或材质中的颜色(RGB 值)。

操作符

在下表中,p 和 q 代表任意标量值或表达式,V 和 W 代表任意向量值或表达式。(字符“x”用作向量交叉乘积运算符。)

标量运算符
以下是用于标量值的算术运算符
操作符使用含义

+

p+q

其他

-

p-q

差集

-

-p

加性逆元

*

p*q

乘法

/

p/q

除法

^

p^q

幂(p 的 q 次幂)

**

p**q

^ 和 ** 的运算方法相同

也可以将逻辑(布尔)运算符用于标量值。如果为真,这些运算符都得出 1,否则得出 0:  

操作符
使用
含义

=

p=q

等于

<

p<q

小于

>

p>q

大于

<=

p<=q

小于或等于

>=

p>=q

大于或等于

|

p|q

逻辑或,如果 p 或 q 不为零,则得出 1;否则得出 0。

&

p&q

逻辑和,如果 p 和 q 都不为零,则得出 1;否则得出 0。

提示逻辑运算符在“条件”函数中很有用。                  

向量运算符              

对于具有变量名称的向量,可以使用特殊的组件操作符 (.) 来引用该向量的三个标量组件:          

使用含义

V.x

第一个分量 (X)

V.y

第二个分量 (Y)

V.z

第三个分量 (Z)

以下是用于向量算术的运算符:                  

操作符使用含义

+

V+W

其他

-

V-W

相减

*

p*V

标量相乘

*

V*p

标量相乘

*

V*W

点积

X

VxW

叉积

/

V/p

标量相除

运算符优先级              

表达式的优先级有八个级别。在列表中位置越高的运算符,越先进行求值。              

操作符

优先级

- +

作为一元运算符,如 -8,+25

.

分量运算符,如 V.x

** ^

                             

X

叉积

* /

                             

+ -

                             

= < > <= >=

                             

| &

                             

圆括号属于特殊情况。它们是分组或次表达式运算符,因此您可以忽略其他运算符的优先级顺序。              

变量

在为表达式控制器编写的表达式中,用符号名称表示变量。可以创建符号名称,以在表达式中包含常量或变量值。同时还提供了若干个预定义的变量。其中一些变量具有常量值,其他变量则可以改变。

在用于参数关联数值表达式求值器的表达式中,您可以将预定义的变量与常数值一起使用。

具有常量值的预定义变量              

以下为具有常量值的预定义变量(变量名称区分大小写):                  

变量名称
常量值
使用

pi

3.14159

圆周长与直径的比。

e

2.71828

自然对数的底。

TPS

4800

每秒刻度。该刻度是 3ds Max 动画的基本时间单位。

具有变量值的预定义变量              

以下为具有可变的、基于时间的值的预定义变量(变量名称区分大小写):              

变量名称
含义

F

帧编号。对于每一帧,F 等于当前帧编号,从 0 开始计算。根据活动时间段中帧编号的不同,帧的范围会有所变化。

NT

规格化时间。根据定义,规格化时间 (NT) 在活动时间段中的范围为从 0 到 1,无论该段中有多少帧。如果表达式基于 NT,则其效果在范围内只产生一次。也可以将 NT 乘以一个因子,以便表达式的效果可以产生一定次数(例如,2*NT 会使表达式的效果产生两次)。如果更改时间段的长度,则基于                           NT 的表达式会加速或减速运行。

S

秒数(以秒为单位的已用时间)。已用时间从第一帧开始到当前帧结束来计量。根据活动时间段总时间的不同,秒数范围会有所变化。

T

刻度(以刻度为单位的已用时间)。每秒有 4800 个刻度。已用时间从第一帧开始到当前帧结束来计量。根据活动时间段总时间的不同,刻度范围会有所变化。

变量命名规则                

  • 变量名称可以包含任意多的字母数字字符。其长度不受限制。

  • 变量名称不能包含空格。

  • 变量名称必须以字母开头。数字在变量名称中有效(如“Pos1”或“M23”)。

  • 变量名称区分大小写。例如,“pos”、“Pos”和“POS”指定三个不同的变量。

  • 不能创建与另一个变量同名(包括预定义的变量名称)的变量。

函数

以下列出的函数可用于表达式。在该列表中,p、q 和 r 代表标量值或标量表达式。V 和 W 代表向量值或向量表达式。

要在表达式中使用函数,请输入函数名称和适当的参数。

三角函数              

正弦、余弦和正切函数采取以度为单位的角度,并得出浮点值。反三角函数采取浮点值,并得出以度为单位的值。                

功能含义

sin(p)

正弦

cos(p)

余弦

tan(p)

正切

asin(p)

反正弦

acos(p)

反余弦

atan(p)

反正切

双曲线函数              

双曲线函数采取浮点值,并得出浮点值。                

功能

含义

sinh(p)

双曲正弦

cosh(p)

双曲余弦

tanh(p)

双曲正切

在弧度值与度数值之间转化                  

功能含义

radToDeg(p)

采取以弧度为单位的 p,并得出以度为单位的相同角度

degToRad(p)

采取以度为单位的 p,并得出以弧度为单位的相同角度

舍入函数
功能含义

ceil(p)

大于或等于 p 的最小整数

floor(p)

小于或等于 p 的最大整数

标准计算                  

功能含义

ln(p)

以 e 为底的自然对数

log(p)

以 10 为底的常用对数

exp(p)

指数函数 exp(p)=e^p

pow(p,q)

p 的 q 次幂 (p^q)

sqrt(p)

平方根

abs(p)

绝对值

min(p,q)

最小值得出 p 或 q,这取决于哪一个更小

max(p,q)

最大值得出 p 或 q,这取决于哪一个更大

mod(p,q)

p 除以 q 后的余数

条件函数
功能含义

if(p then q else if r then s)

使用标准的“if/then/else if”结果。例如:

if (X_Position<0) then 0 else if (X_Position>=0 and X_Position<=10) then X_Position*3 else 100

如果 X 位置小于 0,则会返回 0,或者如果 X 位置介于 0 和 10之间(含这两个值),则为 X 位置乘以 3,或者如果 X 位置大于 10,则为 100。

“else if”部分是可选的,可以在必要时重复,以指定若干不同的条件。

vif(c,V1,V2)

“Vector If”(如果 c 为真,则值为 V1,否则为 V2。)

向量处理函数  
功能含义

length(V)

V 的长度

comp(V,i)

第 I 个组成部分 (I=0,1,2):comp([5,6,7],1)=6

unit(V)

得出与 V 方向相同的单位向量

注意分量函数是 V.x、V.y 和 V.z 表示法的另一种选择。                  

特殊动画函数
功能含义

noise(p,q,r)

3D 噪波:返回随机生成的位置

任意值 p、q 和 r 用作随机生成种子。您可以重新使用这些值,以确保 noise() 得出相同的值。              

,