可以使用数学表达式来控制下列对象属性:
对象参数,如长度、宽度和高度
变换和修改器值,如对象的位置坐标
关联参数、表达式控制器和数值表达式求值器都使用本主题中介绍的表达式。
表达式是一种能得出数值的数学函数。可以使用表达式来控制下列场景元素:
| ||||||||||
|
注意表达式只处理 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() 得出相同的值。
,