在 3ds Max 中,您可以使用数学表达式(而不是常数)来表达参数值。例如,您可以使用表达式 24*6 来表示数字 144。
可以使用数学表达式来控制下列对象属性:
关联参数、表达式控制器和数值表达式求值器都使用本主题中介绍的表达式。
表达式是一种能得出数值的数学函数。可以使用表达式来控制下列场景元素:
场景元素 | 可计算属性 |
---|---|
创建参数 | 任意数字创建参数 |
变换 | 位置 [X、Y、Z] X 轴旋转 Y 轴旋转 Z 轴旋转 缩放 [X%、Y%、Z%] |
修改器 | 任意数字修改器参数(包括创建参数) |
材质 | 颜色 [R、G、B] 任意数字材质参数 |
以下链接会跳跃到本主题内的部分:
表达式得出的值的类型取决于控制器的种类:
如果参数具有整数值,则表达式会将浮点值舍入为最接近的整数。
在下表中,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 个刻度。已用时间从第一帧开始到当前帧结束来计量。根据活动时间段总时间的不同,刻度范围会有所变化。 |
以下列出的函数可用于表达式。在该列表中,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 方向相同的单位向量 |
功能 | 含义 |
---|---|
noise(p,q,r) | 3D 噪波:返回随机生成的位置 |
任意值 p、q 和 r 用作随机生成种子。您可以重新使用这些值,以确保 noise() 得出相同的值。