Houdini 16ではこれまでのGroupノードが使用用途別に複数のノードに分割されました。
そこではじめに、Groupノードを使用してみましょう。
Groupは必要に応じてコンポーネントをまとめてくれるものであり、非常に強力です。多くのフィルターノードと連携して動作することができます。
概要
グループは、ポイントやフェースの名前をもった集合体です。
グループサーフェスノードを使用すると、入力ジオメトリ内のポイントまたはフェースをさまざまな基準に基づいてグループにソートできます。 他のオペレーターは、副作用としてグループを作成することもできます。
ポイントまたはプリミティブで動作するほとんどのノードは、ポイント/プリミティブ全体ではなく、入力ストリーム内の特定のグループに対してのみ実行することができます。
従って、特定のプロパティに基づいてポイントやプリミティブをグループ化することができます。グループの作成後、ノードを追加し、そのグループを指定することができます。
ポイントが削除された場合、HoudiniはHoudiniはそのポイントが属するすべてのポイントグループからそのポイントを自動的に削除します。
グループを作成するために次のパターンを使用することが可能です。
Group syntax
パターン |
意味 |
---|---|
* |
Group SOP: すべてのポイント/プリミティブ |
n |
コンポーネントの番号 n |
group_name |
Group SOP以外のSOPでは、Group SOPで作成されたポイント/プリミティブの名前付きグループを指定できます。 グループ名にはパターンマッチング(*、?、[])を使用できます。 たとえば、arm *には、armで始まるすべてのポイント/プリミティブグループが含まれます。 ^はパターンを{}で囲むことでパターン内で使用できます。 たとえば、{arm * ^ arm3 *}にはarmで始まる名前のグループはすべて含まれますが、arm3は含まれません。 |
n-m |
nからmまでの番号をもつコンポーネント。(n,mを含む) 例:0-10と指定した場合 |
n-m:step |
各stepをスキップして、nからmまでの番号をつけたコンポーネント。 たとえば、1〜100:2は、1〜100の間のすべての番号を意味します。 例:0-10:2とした場合 |
n-m:keep,step |
nからmまでの番号をつけたコンポーネント。 最初のkeep番号を使用し、その後、すべてのstepをスキップします。 例:0-1000:2,5 |
!pattern |
パターンに一致するもの以外のすべてのコンポーネント。 たとえば、!1-10は、1〜10の数字以外のすべてのポイント/プリミティブを意味します。 patternは、数値パターン、属性パターン、またはグループ名パターンです。 例:!0-10 |
^pattern |
前のパターンの結果からパターンに一致するコンポーネントを削除します。 たとえば、0-100:2 ^10-20は、10〜20の数字を除いて1から100の間のすべての数字を意味します。 patternは、数値パターン、属性パターン、またはグループ名パターンです。 例:0-100:2 ^10-20 |
@attributevalue |
=、==(=と同じ)、!=、>、<、> =、または<=のいずれかのオペレーターに基づいて、アトリビュートが値と一致するコンポーネント。 たとえば、@ v> 0は、vアトリビュートが0より大きいポイントのグループを作成します。 アトリビュート名の後に[index]を使用してコンポーネントを指定できます。@Cd [2]はディフューズカラー(Cd)アトリビュートの青色のチャンネルを取得します。便宜上、位置(P)アトリビュートのX軸成分を得るために、[0]、[1]、[2]の代わりに.x、.y、および.zを使用することもできます。(マルチコンポーネントのアトリビュートタイプにコンポーネントを指定しない場合、比較では最初のコンポーネントが使用されます)。 たとえば、@ P.y> 0は、Yが0より大きいすべてポイントを含むグループを作成します。 文字列アトリビュートの場合、@ myattr = "foo bar"のようにスペースが含まれている場合は値の前後に引用符を付ける必要があります。 文字列アトリビュートに=、==、および!=を使用するときは、値にワイルドカード(*および?)を使用できます。 アトリビュート構文と範囲構文を組み合わせることができます。 @id=5-10 スペースで区切られた整数値のリストとともにアトリビュート構文を使用することもできますが、リストを引用符で囲む必要があります。 @id="5 8 10 15" |
@attributevalue,val,... |
リストされた値の1つ以上を含む、指定されたアトリビュートを持つコンポーネント 例えば: @id=1,2,90,120 文字列アトリビュートの場合は、スペースを含む値を二重引用符で囲む必要があります例: @path=/foo/*,/bar,"some string" |
実際に使ってみよう
GridにGroupノードをつなげ、GroupノードをさらにColorに接続します。
Colorノードを表示して、Colorアトリビュートに任意のカラーを設定します。
GroupノードのGroup Nameに任意の名前を入力し、Group Typeでどのコンポーネントをグループ化するのか設定します。
Base Groupがデフォルトで有効化されていますので、Base Groupに下記のような構文を入力します。
次にColorノードのGroupに先ほど決めたGroup Nameを入力します。
これでPrimitivesタイプのabcというグループが作成され、0-1000のプリミティブを4ずつスキップしてグループ化し、そのグループに色を付けた形となります。
Group Promoteは、入力されたコンポーネントを他のタイプに変換することができます。
例えば、Gridに頂点カラーを設定して
Groupでカラーを元にポイントをグループ化
ただし、PolyExtrudeはPrimitivesに対して行う必要があるので、Grop PromoteでPointsをPritimitivesに変換します。
polyExtrudeをグループに対して実行します。