XGen 中的许多属性都是表达式。表达式是一种非常灵活的方式,用来指定如何根据函数调用和算术运算的组合来计算属性。最简单的表达式是恒定浮点值。稍微复杂些的表达式是计算结果为浮点值的数学表达式。
运算符
表达式能够识别的算术运算符包括:
+、-、*、/、% (fmod)和 ^(幂)[x,y,z] 向量构造函数 V[n] 向量分量访问 x ?y : z 条件运算符 (if x then y else z) x && y AND 比较 x || y OR 比较 x == y 等式测试 x != y 不等式测试 x > y 比较 x < y 比较 x >= y 比较 x <= y 比较 !x 逻辑否
任何级别的圆括号都可用于确定计算顺序。
注意
在表达式后面可附加井号(例如“#”)以指示其末尾。因此,可以将注释或表达式的替代版本放在井号后面。
变量
有一组变量用于描述可在表达式中使用的基础面片信息。可使用向量形式的向量,也可引用各个分量。例如, $N 指曲面法线向量,而 $N[0] 指法线向量的 x 分量。
浮点数
- $u、$v - 基本曲面的 U 和 V 参数。
- $cLength - 当前基本体最终计算得出的长度。
- $cWidth - 当前基本体最终计算得出的宽度。
- $cDepth - 当前基本体最终计算得出的深度,没有置换。
- $frame - 要计算的当前帧。此值应谨慎使用,建议不要跨帧对某些属性进行更改(例如,长度和密度),因为这会使运动模糊计算无法实现。
- $id - 当前基本体的 ID(用于 FX 模块)。
向量
- $P - 要在其位置计算基本体的曲面点。
- $Pg - 没有置换的曲面点。
- $Pref - 要在其位置计算基本体的引用曲面点。
- $Prefg - 没有置换的引用曲面点。
- $Pw - 要在其位置计算基本体的曲面点。世界空间。
- $Pgw - 没有置换的曲面点。世界空间。
- $Prefw - 要在其位置计算基本体的引用曲面点。世界空间。
- $Prefgw - 没有置换的引用曲面点。世界空间。
- $N - 要在其位置计算基本体的曲面法线。
- $Ng - 没有置换的曲面法线。
- $Nref - 要在其位置计算基本体的引用曲面法线。
- $Nrefg - 没有置换的引用曲面法线。
- $dPdu - 要在其位置计算基本体的曲面 dPdu。
- $dPdug - 没有置换的曲面 dPdu。
- $dPduref - 要在其位置计算基本体的引用曲面 dPdu。
- $dPdurefg - 没有置换的引用曲面 dPdu。
- $dPdv - 要在其位置计算基本体的曲面 dPdv。
- $dPdvg - 没有置换的引用曲面 dPdv。
- $dPdvref - 要在其位置计算基本体的引用曲面 dPdv。
- $dPdvrefg - 引用曲面 dPdv。
注意
由于置换变量的值(例如 P 和 N)取决于置换、偏移和凹凸表达式的值,因此不能在这些表达式中使用这些变量。如果要使用基于点的噪波或需要使用基础曲面中的值的任何其他表达式,则应使用 g 变量,如 Prefg 和 Nrefg。
函数
有一组函数调用可在表达式中使用。所有参数都可作为子表达式。如果表达式需要向量参数,请以大写形式提供输入值。如果将标量传递到需要向量的函数,则使用在所有三个通道具有相等值的向量(例如,length(2) == length([2,2,2]))。
将向量传递到标量运算时,会以分量形式执行运算(例如, cos(X) = [cos(X[0]),cos(X[1]),cos(X[2])])。这包括算术运算(例如, X*Y = [X[0]*Y[0],X[1]*Y[1],X[2]*Y[2]])。比较和条件仅使用 [0] 分量。相等测试(==、!=)会比较所有三个分量。函数中的任何标量结果都将为 [0] 分量。
下面定义中的方括号指明了可选参数:
- abs(x)
-
- acos(x)
-
- acosd(x)
-
- acosh(x)
-
- alignU([X]) alignV([X]) alignN([X])
-
将基本体与给定的向量对齐。这三个表达式应放置在 offU、offV 和 offN 中。如果没有传递参数,则使用默认值 [0,1,0],所得结果会“增长”。当传递参数时,会将同一参数传递给所有三个表达式。参数可以是表达式,无需进行规格化。
- angle(X, Y)
-
- asin(x)
-
x 的反正弦,范围在 -pi/2 到 pi/2 弧度之间。
- asind(x)
-
- asinh(x)
-
- atan(x)
-
x 的反正切,范围在 -pi/2 到 pi/2 弧度之间。
- atand(x)
-
- atan2(x, y)
-
x/y 的反正切,范围在 -pi/2 到 pi/2 之间。
- atanh(x)
-
- bias(x, b)
-
- boxstep(x, val)
-
表达式计算小于 val 的值时生成 0,否则生成 1。从 boxstep 减去 boxstep 生成框函数,小于第一个 boxstep 的 val 时值为 0,介于两个 val 之间时值为 1,大于第二个 boxstep 的 val 时值为 0。确保从前一
boxstep 中减去后一 boxstep,否则会生成反转的框函数。
- cbrt(x)
-
- ceil(x)
-
不小于 x 的最小整数(向上舍入)。请参见 floor、round 和 trunc。
- clamp(x, min, max)
-
- component(x, y, z)
-
- contrast(x, c)
-
x 的对比度函数。c < 0.5 会减小对比度,c > 0.5 会增加对比度。
- cos(x)
-
- cosd(x)
-
- cosh(x)
-
- cross(V, W)
-
- deg(r)
-
- dot(V, W)
-
- dist(x1, y1, z1, x2, y2, z2)
-
- exp(x)
-
- fit(x, a1, b1, a2, b2)
-
将 [a1..x..b1] 线性传递到 [a2..result..b2]。
- floor(x)
-
不大于 x 的最大整数(向下舍入)。请参见 ceil、round 和 trunc。
- fmod(x, y)
-
- gamma(x, g)
-
x 的 Gamma 校正。与 pow( x, 1/g) 相同。
- gaussstep(x, a, b)
-
生成从 0 到 1 的高斯过渡。x 等于 a 时结果为 0,x 等于 b 时结果为 1。如果超出该范围,结果是连续的:超过 a 会生成连续的 0,超过 b 会生成连续的 1。如果 a 小于 b,则该函数为增函数,否则为减函数。
- hypot(x, y)
-
- length(V)
-
- linearstep(x, a, b)
-
生成从 0 到 1 的线性过渡。x 等于 a 时结果为 0,x 等于 b 时结果为 1。如果超出该范围,结果是连续的:超过 a 会生成连续的 0,超过 b 会生成连续的 1。如果 a 小于 b,则该函数为增函数,否则为减函数。
- log(x)
-
- log10(x)
-
- map("mapname" [, s, t] [, channel])
-
在当前 (u,v) 或提供的 (s,t) 处计算 mapname。mapname 只能是 ptex 文件的路径。如果您打算使用正则表达式修改要使用的默认 $g.ptx,只需指定文件模式。可以指定可选通道以指示应读取图像的哪一通道。可以将变量 ${DESC} 用于描述名称。还可以使用内置 $PAL 宏来引用贴图。例如,map( “baseCoat_${PAL,myPick}” ),其中将计算名为 myPick 的选项板表达式,并以 %04d 格式插入其结果。
- max(x, y)
-
- min(x, y)
-
- noise([x] [, y] [, z])
-
计算柏林噪波函数。未指定参数时,在当前 (u,v) 处计算该函数。可将一个、两个或三个参数用于具有一个、两个或三个维度的噪波。返回值始终为介于 -1 和 1 之间的浮点数。
- norm(V)
-
- ortho(X, Y)
-
正交向量(等同于 norm(cross(X,Y)))。
- pow(x, y)
-
- rad(d)
-
- rand([min, max] [, seed])
-
生成一个随机数字。未指定参数时,生成介于 0 和 1 之间的数字。(可选)可以传递两个参数以指定随机数字的范围。在任一情况下,都可指定 seed 值,确保返回的数字是随机的,并且可以预测(超过 y 时始终为 x)。
- remap(x, source, range, falloff, interpolation)
-
在 0 和 1 之间重映射 x,当 x 在源的范围距离内时,结果等于 1。一旦超出该范围,结果将在衰减距离内衰减到 0。可以按名称或整数键指定插值方案:线性=0,平滑=1,高斯=2,boxstep=3。当使用 boxstep 插值时,使用衰减值
0.0。
- round(x)
-
对 x 进行舍入生成的整数值,当小数部分时小于 0.5 时向零舍入,否则朝远离零的方向舍入。请参见 floor、ceil 和 trunc。
- shadow(x)
-
仅在渲染的阴影过程中计算传入的表达式。用于更改渲染的颜色和阴影过程中的长度、宽度、密度等属性。如果不在阴影过程中,则该函数的计算结果为 1.0,因此其应用作乘数。
- sin(x)
-
- sind(x)
-
- sinh(x)
-
- smoothstep(x, a, b)
-
生成从零到一的平滑过渡(二次)。x 等于 a 时结果为 0,x 等于 b 时结果为 1。如果超出该范围,结果是连续的:超过 a 会生成连续的 0,超过 b 会生成连续的 1。如果 a 小于 b,则该函数为增函数,否则为减函数。
- sqrt(x)
-
- tan(x)
-
- tanh(x)
-
- trunc(x)
-
简单地去除 x 的小数部分(向零舍入)。请参见 ceil、floor 和 round。
- other()
-
选项板表达式以函数形式调用。如果您有一个名为 myPick 的选项板表达式,则可通过以下语法在另一表达式中调用它: myPick()。用于连接属性,例如指定长度和宽度之间的关联。还用于在单独描述中驱动属性,如设置选项板范围的宽度值。为选项板表达式指定的名称不能与任何预定义 XGen 函数重叠;否则,选项板表达式将无法访问。
以下常量有效:
- PI
-
圆的周长与其直径的比率 (3.14159265358979323846)。
- E
-
自然对数的底 (2.7182818284590452354)。
注意
如果表达式无效,将显示错误消息,并将其计算为 0.001。