float volumecubicsample(<geometry>geometry, int primnum, vector pos)
float volumecubicsample(<geometry>geometry, string volumename, vector pos)
float volumecubicsample(<geometry>geometry, int primnum, vector pos, vector &grad)
float volumecubicsample(<geometry>geometry, string volumename, vector pos, vector &grad)
float volumecubicsample(<geometry>geometry, int primnum, vector pos, vector &grad, matrix3 &hess)
float volumecubicsample(<geometry>geometry, string volumename, vector pos, vector &grad, matrix3 &hess)
<geometry>
ノード(例えばWrangle SOP)のコンテキスト内で実行する時は、この引数にジオメトリの読み込み元の入力番号(0から始まります)を意味する整数を指定することができます。
別の方法として、読み込み元のジオメトリファイル(例えば、.bgeo
)を示した文字列を指定することができます。
Houdini内で実行する時は、この引数にop:/path/to/sop
参照を指定することができます。
Returns
指定した位置でサンプリングされたボリュームプリミティブ値。 ボクセル間の値は、3次補間で評価されます。
grad
引数とhess
引数には、このサンプリング関数がボリュームプリミティブ値と同時に計算可能な勾配ベクトル、ヘッセ行列が返されます。
primnum
やinputnum
が範囲外、ジオメトリが無効、指定したプリミティブがボリュームでもVDBプリミティブでもない場合は0を返します。
volumecubicsample
を使用した1次元データと2次元データの補間の例。
表示されている法線は、grad
パラメータを使用して計算されています。
Examples ¶
P
点におけるボリューム値を使用して、P + u
点におけるボリューム値を近似計算。
vector P = {1.0, 2.0, 3.0}; vector grad; matrix3 hess; float val1 = volumecubicsample(0, "density", P, grad, hess); vector u = {0.1, 0.01, 0.001}; float val2 = volumecubicsample(0, "density", P + u); // テイラー展開してみると: // `val1 + dot(u, grad)`は`val2`とほぼ同じです。 // さらに2次近似: // `val1 + (u, grad) + 0.5 * dot(u, u*hess)`は`val2`とほぼ同じです。
volume |
|