この記事ではHScriptエクスプレッションを利用する上で、利用頻度の高いであろう、基本的な関数について簡単な紹介を行います。
全てのHScriptエクスプレッションの関数のリファレンスは、SideFX社サイトのこちらのページをご参照ください。
・数値操作関連
元の数字に対して操作をするような関数です。
主に、小数点の処理や、距離を求めるような関数があります。
clamp(number, min_val, max_val)
入力したnumberの数値がmin_valより小さい場合min_valを、max_valより大きい場合max_valを返します。
fit(number, old_min_old, new_max_val, new_min_val, new_max_val)
old_min_valからold_max_valの範囲を、new_min_valからnew_max_valに拡張します。
その際に入力した数値numberの値を相対的に変化させた結果を返します。
numberの値の取りうる範囲が事前にわかっているときに利用できます。
numberの値がoldの範囲を超える際はclamp()関数と同様に、min/maxの値として処理されます。
primdist(surface_node1, prim1_num, surface_node2, prim2_num, return_type)
指定したノードsurface_node1のプリミティブprim_num1と、
surface_node2のプリミティブprim_num2との距離を返します。
また、return_typeの数値によって挙動が下記のように変わります。
・return_type = 0 最小距離を返します。
・return_type = 1 prim1の最小距離でのポイントのUパラメトリック値を返します。
・return_type = 2 prim1の最小距離でのポイントのVパラメトリック値を返します。
・return_type = 3 prim2の最小距離でのポイントのUパラメトリック値を返します。
・return_type = 4 prim2の最小距離でのポイントのVパラメトリック値を返します。
この関数はポリゴン、カーブ、NURBS/Bezierサーフェスでのみ動作します。
他のタイプのプリミティブに使用した場合は常に0が返されます。
xyzdist(x, y, z, surface_node, prim_num, return_type)
座標(x,y,z)と指定したノードsurface_nodeのプリミティブprim_numとの距離を返します。
prim_numが-1の場合は、surface_node内の一番近いプリミティブとの距離を返します。
また、return_typeの数値によって挙動が下記のように変わります。
・return_type = 0 最小距離を返します。
・return_type = 1 最小距離でのポイントのUパラメトリック値を返します。
・return_type = 2 最小距離でのポイントのVパラメトリック値を返します。
・return_type = 3 最小距離のプリミティブ番号を返します。
・数値生成関連
新しく数値を作り出したり、別の個所から数値をコピーする際などに利用する関数です。
ch(path)
入力したパスのパラメータの数値を返します。
Copy Parameter + Paste Relative Referenceを使うと自動的にこの関数がパラメータ項目に記述されます。
chs(path)
入力したパスのパラメータの文字列を返します。
Copy Parameter + Paste Relative Referenceを使うと自動的にこの関数がパラメータ項目に記述されます。
上記のch()と同じように利用できます。数値の場合はch()、文字列の場合はchs()を使います。
主にファイルパスなどのコピーの使われます。
また、Houdiniのパラメータに文字列をエクスプレッションで入力する際は、
バッククオート( ` : Shift+@)で囲う必要があります。
chf(path, frame)
特定のフレームの入力したパスのパラメータの値を返します。
frameの数値に$F-3などを入力することによって数フレーム前の値の参照などが可能です。
stamp(stamp_op_path, val_name, default)
stamp_op_pathノードに入力したスタンプ変数val_nameの値を返します。
Copy Stamp SOPノードのスタンプ機能を使う際に必須の関数となります。
stamp(“../copy1”, “val”, 0)
※スタンプ変数val値が存在する時はvalの値が、
そうでない場合は最後の引数default(この場合は0)が返されます。
bbox(surface_node, type)
入力したsurface_nodeのバウンディングボックス情報を返します。typeにどの情報を返すかを指定します。
D_XMIN: X軸の最小値
D_YMIN: Y軸の最小値
D_ZMIN: Z軸の最小値
D_XMAX: Z軸の最大値
D_YMAX: Y軸の最大値
D_ZMAX: Z軸の最大値
D_XSIZE: X軸のサイズ
D_YSIZE: Y軸のサイズ
D_ZSIZE: Z軸のサイズ
centroid(surface_node, type)
入力したsurface_nodeの重心の座標を返します。
この場合の重心とは、surface_nodeバウンディングボックスの中心の座標となります。
typeにはx,y,z度の座標を取得するかを設定します。
D_X: x座標
D_Y: y座標
D_Z: z座標
rand(seed)
入力した数値seedに基づいて0から1の間のランダムな値(乱数)を作成し、返します。
※seedの値は整数以外の値が推奨されます。
rand(0.5)
wrap(number, min, max)
入力した数値numberがminからmaxの間の場合はclamp()関数と同様の挙動になります。
そうでない場合はminからmaxの変化を繰り返すようになります。
numberに$Fを入力することで、ノコギリ状の波形を作成することが可能です。
アトリビュート関連
アトリビュートをパラメータ上で利用するのに利用される関数です。
opinputpath(node_name, index)
入力したノード名node_nameのindex番目の入力となるノードのフルパスの文字列を返します。
indexは0番からで、一番左側の入力が0番になります。
opinputpath(“/obj/geo1/merge1”,0)
因みに、opinputpath(“.”,0)と入力することで、自身の0番目の入力ノードのフルパスを取得できます。
point(surface_node, point_number, attribute_name, index)
入力したノード名surface_nodeのPoint アトリビュートを返します。
point_numberでポイント番号を指定し、attribute_nameでアトリビュート名を指定します。
indexの項目はvectorなどのようにアトリビュートが複数のコンポーネントを持つ場合、
そのコンポーネントの番号を指定できます。
また、Houdiniではアトリビュートは自身のノードのものは参照できません。
よってsurface_nodeに直接”.”を指定するとエラーが出力されます。
直前のアトリビュートの値を利用する際は、opinputpath(“.”,0)を利用すると便利です。
文字列のアトリビュートを読み込む際は、points()関数を、
文字列リストのアトリビュートを読み込む際は、pointsmap()関数を利用します。
point(“/obj/geo1/attribcreate1/”,0,”Attrib”,0)
point(opinputpath(“.”,0),0,”Attrib”,1)
prim(surface_node, prim_num, attrib_name, index)
入力したノード名surface_nodeのPrimitiveアトリビュートを返します。
prim_numberでポイント番号を指定し、attribute_nameでアトリビュート名を指定します。
indexの項目はアトリビュートがvectorなどの複数のコンポーネントを持つ場合、そのコンポーネントの番号を指定できます。
また、Houdiniではアトリビュートは自身のノードのものは参照できません。
よってsurface_nodeに直接”.”を指定するとエラーが出力されます。
直前のアトリビュートの値を利用する際は、opinputpath(“.”,0)を利用すると便利です。
文字列のアトリビュートを読み込む際は、prims()関数を、
文字列リストのアトリビュートを読み込む際は、primsmap()関数を利用します。
prim(“/obj/geo1/attribcreate1/”,0,”PrAttrib”,0)
prim(opinputpath(“.”,0),0,”PrAttrib”,1)
・数学演算関連
数学で使われる演算に関係する関数です。三角関数については、別途記載しております。
・その他演算関連
関係演算/論理演算/条件演算などの演算を利用した関数です。
if(expression, true_val, false_val)
入力したexpressionの結果が正しければtrue_valを、正しくなければfalse_valを返します。
・三角関数関連
三角関数及び逆三角関数です。円運動や単振動などを作成する際によく利用されます。
HScriptでは、三角関数、逆三角関数の単位は度[°]になります。
三角関数の使用例につきましては、こちらのページもご参照下さい。