在一个体积内,运行一个修改体素值的代码段。
Overview
此是非常强大的,底层的节点,可以让熟悉VEX的专家使用代码调节体素值。
此节点和Volume VOP SOP相对应,但是是使用文字型的VEX代码段,而非VOP网络。
Warning
此节点需要你理解VEX语言。使用此节点会非常容易的些vex代码。
一些小技巧:
中间点击节点,查看代码段的错误输出。
你可以使用ch这个vex函数来计算参数。路径是相对于此节点的, (ch(“parm”) 会计算此节点上的parm参数。会在当前时间执行该计算。
不像Volume Mix SOP节点,此不会使用局部变量。另外,所有backtick表达式和$F变量会在第一帧被计算,而非当前时间。可以使用Frame,Time, or TimeInc 。
Syntax
VEX snippet 参数可以让你输入一个VEX代码的片段,在输入的几何体上运行。查看VEX代码段获取更多代码参数中的特殊语法。查看VEX章节获取VEX语言的信息。
Reading and modifying the voxel value
体积中当前体素值可以用@volume_name来获取。你可以读取此变量获取当前值,并指定它来改变数值。如,要浮点体积foo中的每个体素上添加0.1值:
@foo += 0.1
If a volume does not have a name, it will automatically be bound to @density.
如果你在输入端有多个体积,你可以用不同的方式写单个代码段来修改输入的体积:
@foo += 0.1
@bar += 0.2
@baz += 0.3
Alternatively, you can turn on Bind each volume to density. This acts as if every input volume was named density, so you can use the same snippet to modify every voxel in every volume:
// Modify @foo, @bar, and @baz in the same way
// (when Bind each volume to density is on)
@density += sin(@P.x)
Note
不像 Point Wrangle 和 Attribute Wrangle节点的工作方式,输出一个未知的@name变量不会创建体积。
VEX variables
你可以创建一个临时的变量。如,下面的代码会读取一个从一点处的偏移值。
vector temp = @P;
temp += {0.1, 0.2, 0.3};
@density = volumesample(@OpInput1, 0, temp);
Bound Variables
一系列的变量是绑定到 Volume VOP 环境下的。使用@前缀语法可以获取它们:
ix, iy,iz | 当前体素的整型索引号。对于VDB,此可以是负的。 |
resx,resy,resz | 当前体积元的分辨率。对于VDB,此是激活的体素区域的尺寸 |
dPdx,dPdy,dPdz | 正交体素的XYZ边的长度和方向 |
center | SOP空间中体积的中心 |
Time | 当前时间,以秒为单位 |
Frame | 当前时间,以帧为单位 |
TimeInc | 两帧间时间递增值 |
OpInput1,OpInput2,OpInput3,OpInput4 | 用于引用此SOP相应输入端的字符串。 |
Parameters
Code
Group | 只在输入几何体的这些体积上运行程序。使此处空白,会修改所有输入对象中的体积 |
Bind Each to Density | 改变节点如何运用代码段。当此关闭时,你可以通过名称引用特定的体积。当此项关闭,每个输入的体积都会被作为@density来对待,因此你可以输入一个代码段来影响每个输入的体积(不管其名称是什么)。 |
VEXpression | 用于操作点属性的VEX代码段。你可以使用@变量名语法来获取几何体属性。 |
Volumes To Write To | 只修改其名称匹配该样式的体积。默认样式允许所有体积都会被修改。你可以列出一些真正被代码所修改的体积,以便加速节点运行。 |
Bindings
Evaluation Node Path | 像ch()这样的VEX函数,通常会对该节点进行计算。此处提供的路径可以覆盖搜索的路径。此可以用于内嵌的数字资产文件,让顶层的数字资产文件作为搜索根目录。 |
Export Parameters | 此样式可以用来覆盖VEX材质中导出的选项,避免输出特定的体积。 |