int uvintersect(<geometry>geometry, string uvname, vector orig, vector dir, vector &pos, vector &primuv)
int uvintersect(<geometry>geometry, string primgroup, string uvname, vector orig, vector dir, vector &pos, vector &primuv)
<geometry>
ノード(例えばWrangle SOP)のコンテキスト内で実行する時は、この引数にジオメトリの読み込み元の入力番号(0から始まります)を意味する整数を指定することができます。
別の方法として、読み込み元のジオメトリファイル(例えば、.bgeo
)を示した文字列を指定することができます。
Houdini内で実行する時は、この引数にop:/path/to/sop
参照を指定することができます。
primgroup
プリミティブグループの名前またはプリミティブグループを生成するパターン。
SOPグループと同じ使い方なので、空っぽの文字列はすべてのプリミティブに合致します。
@Cd.x>0
のようにアトリビュートグループを使用することもできますが、Snippet VOP内では、@
にはバックスラッシュを付けてエスケープさせる必要があることに注意してください。
この関数は、指定した光線とUV空間におけるジオメトリとの交差を計算します。 これは、プリミティブ番号を返し、エラーもしくは交差が見つからなかった場合には-1を返します。
交差した位置のUV空間における位置は、posに格納されます。 その交差した位置の該当するパラメトリック位置は、primuvに格納されます。 複数交差した場合は、光線原点から一番近い交差が使用されます。
この関数では、正規化した方向ベクトルを必要としません。 その代わりに、そのベクトルを最大距離として使用します。 整数の戻り値は、当たったプリミティブ番号です。
Note
3D UV空間において、光線の3D交差を可視化するのが難しい時があります。
そのテクニックとして、SOPでジオメトリを展開することで、その空間をうまく可視化することができます。
このテクニックは、Split Vertex SOPの後にAttribute Copy SOPを使用することで可能です。
これは、UV境界でフェースを切り離し、そのUVW値をP
アトリビュートにコピーします。
Note
メタボールジオメトリに対して交差を実行した時、光線が当たったメタボールのプリミティブ番号を判断することはできません。 この場合、交差したジオメトリのプリミティブの数が返されます。
intersect | |
ray |