跳转到内容

volumesmoothsamplev

vector  volumesmoothsamplev(<geometry>geometry, int primnum, vector pos)

vector  volumesmoothsamplev(<geometry>geometry, string volumename, vector pos)

vector  volumesmoothsamplev(<geometry>geometry, int primnum, vector pos, matrix3 &grad)

vector  volumesmoothsamplev(<geometry>geometry, string volumename, vector pos, matrix3 &grad)

vector  volumesmoothsamplev(<geometry>geometry, int primnum, vector pos, matrix3 &grad, matrix3 &hessX, matrix3 &hessY, matrix3 &hessZ)

vector  volumesmoothsamplev(<geometry>geometry, string volumename, vector pos, matrix3 &grad, matrix3 &hessX, matrix3 &hessY, matrix3 &hessZ)

<geometry>

在节点上下文(如 wrangle SOP)中运行时,此参数可以是表示输入编号(从0开始)的整数,用于读取几何体。

或者,该参数可以是指定要读取的几何文件(例如 .bgeo)的字符串。在 Houdini 内部运行时,可以是 op:/path/to/sop 引用。

返回值

在给定位置处体积图元的采样值。体素之间的值通过平滑插值计算。

grad 是一个矩阵,其第 i 列是体积第 i 个分量的梯度。

矩阵 hessXhessYhessZ 分别是 x、y 和 z 分量的二阶导数。

如果 primnuminputnum 超出范围、几何体无效,或给定图元不是体积或 VDB 图元,则返回 0。

示例

使用点 P 处的体积值来近似计算点 P + u 处的体积值。

vector P = {1.0, 2.0, 3.0};
matrix3 grad, hessX, hessY, hessZ;
vector val1 = volumesmoothsamplev(0, "vel", P, grad, hessX, hessY, hessZ);
vector u = {0.1, 0.01, 0.001};
vector val2 = volumesmoothsamplev(0, "vel", P + u);
// 根据泰勒展开式,我们有:
// `val1 + u * grad` 约等于 `val2`
// 二阶近似:
// `val1 + u * grad + 0.5 * set(dot(u, u*hessX), dot(u, u*hessY), dot(u, u*hessZ))`
// 约等于 `val2`