基本表达式示例

本部分提供了常用 XGen 表达式的简单示例。它们旨在帮助您进一步了解如何构建表达式。还可以使用这些表达式作为更复杂表达式的构建块。要在“描述”(Description)中使用这些示例,请单击要控制的属性旁边的图标 ,然后在“XGen 表达式编辑器”(XGen Expression Editor)中添加表达式。

如果初次使用表达式,请参见 XGen 表达式基础知识

贴图表达式

贴图表达式将路径设置为 Ptex 贴图文件。当您使用 “绘制”工具,该贴图在 XGen 表达式是自动创建的。如果要使用在 Maya 外部创建的 Ptex 贴图,则您需要使用贴图表达式,以将其应用于“描述”(Description)。

为“长度”(Length)绘制 PTEX 贴图时,会创建以下贴图表达式:

$a =map('${DESC}/paintmaps/length/'); #3dpaint, 200
$a

表达式说明

  • $a - 使用表达式修改的默认局部变量。
  • map() - 用于描述 Ptex 贴图位置的文件路径的函数。文件路径包括:
    • ${DESC} - 基于“描述”(Description)项目位置的相对文件路径(请参见 XGen 中的 Ptex 贴图文件位置)。
    • paintmaps/length - Ptex 文件的文件路径的延续。
  • #3dpaint, 200 - 用于定义贴图 Texel 分辨率的参数。如果更改此值,则必须重新保存贴图。
  • $a - 调用表达式以应用 Ptex 贴图。
提示: 通过在“XGen 表达式编辑器”(XGen Expression Editor)中选择“采样 > 全局 > UI”(Samples > Global > UI),可以加载预定义的 map_3dpaint 表达式。请参见使用表达式控制基本体

有关更复杂的贴图表达式,请参见贴图表达式示例。另请参见使用 Ptex 贴图和表达式

随机化表达式

此随机化表达式根据最小和最大输入值生成随机输出值。您可以使用它来改变属性值,如“长度”(Length)“宽度”(Width)。它可用作全局表达式来影响大量属性(请参见创建全局表达式)。

$min= 0.4000; #0.10,1.00
$max=3.000; #1.0,5.0
rand($min,$max)

表达式说明

  • $min$max - 为随机化函数的最小和最大输入值声明的局部变量。将为这些变量创建滑块控件。最大值 ($max) 最初设置为 3.000,滑块控件范围为 1.0 到 5.0。最小值 ($min) 最初设置为 0.400,滑块控件范围为 0.10 到 1.00。使用这些滑块控件可更改输入值。
  • rand ($min, $max) - 随机化函数 使用局部变量进行求值,以生成介于由 $min$max 局部变量所设置范围内的随机值。

噪波表达式

噪波表达式包含以向量或浮点值作为输入变量的噪波函数。使用噪波表达式可生成属性值的变化。例如,噪波表达式可以向“成束”(Clumping)修改器或头发长度的效果添加细微变化。

在这个简单的表达式中,噪波是使用单一柏林噪波函数计算得出的。您可以通过包含其他数学函数(例如, contrast()smoothstep())增加表达式的复杂度,从而产生分层噪波效果。多个噪波层可能会打破单一噪波函数的重复性。有关更复杂的噪波表达式,请参见噪波表达式示例

$hi =50.0; #0.00,100.00
$lo =-10.00; #-100.00,0.00
noise($lo, $hi)

表达式说明

  • $hi =50; #0.00, 100.0$lo =-10.00; #-100.00,0.00 - 为噪波函数进行求值所使用的输入值声明的局部变量。高值 ($hi) 最初设置为 50,滑块控件范围为 0 到 100。低值 ($lo) 最初设置为 -10,滑块控件范围为 -100 到 0。使用这些滑块控件可更改噪波函数的输出。
  • noise () 函数根据 $hi$lo 局部变量输出二维噪波图案。您可以向表达式添加其他局部变量,并将其作为函数的第三个输入值包括在内,以创建三维噪波。

条件表达式

使用此类表达式可根据是否满足条件设置属性值或应用修改器。例如,与“成束”(Clumping)修改器配合使用时,可以根据相应长度设置应用于每根头发的成束数量。

此表达式可用于根据最终基本体长度应用属性或修改器值,如“幅值”(Magnitude)

$a =$cLength;
$max =7.00; #0.00,10.0
clamp($a,0,$max)

表达式说明

  • $a =$cLength; - 表示最终计算得出的基本体长度的全局变量。例如,如果要为头发长度生成随机值(请参见上面的随机化表达式示例),则在此表达式中,这些值将由 $a 表示。
  • $max - 为最大输入值声明的局部变量。在此表达式中,它设置最大头发长度。将为此值创建滑块控件。
  • clamp($a,0,$max) - 当在长度属性中使用时,clamp() 函数可得出每个基本体最终计算得出的长度之乘积 ($a),并将长度设置为介于 0 和设置的 $max 值之间。此表达式还可在修改器中用于影响长发,而不仅仅是短发,因为短发的 $cLength 值较低。

使用表达式扩大函数输入值范围

使用表达式可向范围受限的函数输入值添加粒度。例如,smoothstep() 接受输入范围 0 到 1。该示例表达式通过使用两个局部变量和 fit() 函数扩大此函数的范围。您可以轻松修改此表达式来扩大其他函数的输出范围。

$Scalemin=0.3;
$Scalemax=4.0;
smoothstep(x,$Scalemin,$Scalemax)->fit(0,1,-100,100)

表达式说明

  • $Scalemin$Scalemax - 为设置 smoothstep () 函数所使用值范围声明的局部变量。
  • smoothstep(x,$Scalemin,$Scalemax) - smoothstep() 用作输入范围受限的函数示例。它根据介于 0 和 1 之间的输入范围输出二次方值。在此示例中,x 表示要使用的输入值,如声明的局部变量或全局变量。在使用此表达式之前,您需要将 x 替换为适当的变量。$Scalemin$Scalemax 设置函数的输出范围。
  • -> - 将箭头右侧的函数应用于左侧函数的运算符。在这种情况下,fit() 应用于 smoothstep() 的输出。
  • fit(0,1, -100, 100) - 将输入值范围从 0 到 1 扩大至 -100 到 100 的函数。

相关主题