osd_limit は、サブディビジョンサーフェスとして指定されたジオメトリ上のPointアトリビュートを、すべての1階偏微分および2階偏微分と共に評価します。
int osd_limit(<geometry>geometry, string attrib_name, int patch_id, float u, float v, <type>&result, <type>&result_du, <type>&result_dv, <type>&result_duu, <type>&result_duv, <type>&result_dvv)
int osd_limit(<geometry>geometry, string attrib_name, int patch_id, float u, float v, float &result[], float &result_du[], float &result_dv[], float &result_duu[], float &result_duv[], float &result_dvv[])
<geometry>
ノード(例えばWrangle SOP)のコンテキスト内で実行する時は、この引数にジオメトリの読み込み元の入力番号(0から始まります)を意味する整数を指定することができます。
別の方法として、読み込み元のジオメトリファイル(例えば、.bgeo)を示した文字列を指定することができます。
Houdini内で実行する時は、この引数にop:/path/to/sop参照を指定することができます。
&result
計算されたアトリビュート値は、この引数に渡された変数に格納されます。 すべての出力変数の型は、読み込むアトリビュートの型と合わせてください。
&result_du
計算されたアトリビュート値のUパラメトリック方向における1階偏微分。
&result_dv
計算されたアトリビュート値のVパラメトリック方向における1階偏微分。
&result_duu
計算されたアトリビュート値のUパラメトリック方向における2階偏微分。
&result_duv
計算されたアトリビュート値の2階混合偏微分。
&result_dvv
計算されたアトリビュート値のVパラメトリック方向における2階偏微分。
Returns
アトリビュートの計算が成功した場合は1、失敗した場合は0を返します。
失敗で考えられる理由は以下の通りです:
-
ジオメトリにポリゴンが含まれていないか、Open Subdivを使用してトポロジを変換できない場合
-
入力ジオメトリにそのアトリビュートが存在しない場合
-
アトリビュートのサイズ/型が
result引数のVEX型と一致しない場合
Examples ¶
サブディビジョンメッシュのLimit Surface(極限曲面)上にポイントクラウドを生成して、すべての偏微分に対してベクトルアトリビュートを設定します。
int npatches = osd_patchcount(file); for (int patch = 0; patch < npatches; patch++) { for (int v = 0; v < 100; v++) { vector P, du, dv, duu, duv, dvv; if (osd_limit(file, "P", patch, nrandom(), nrandom(), P, du, dv, duu, duv, dvv)) { int ptid = addpoint(geohandle, P); setpointattrib(0, "du", ptid, du); setpointattrib(0, "dv", ptid, dv); setpointattrib(0, "duu", ptid, duu); setpointattrib(0, "duv", ptid, duv); setpointattrib(0, "dvv", ptid, dvv); } } }
| See also | |
| subd |