こちらの記事では、「Labs Axis Align」「Labs Box Clip」「Labs Multi Bounding Box」ノードの概要および各ノードのパラメーターについてご紹介します。
SideFXLabsツールのノードは、SideFX社のホームページで紹介されています。併せてご覧ください。
SideFXLabsツールのインストール手順
SideFX Labsツールセットのインストール手順については、以下の記事をご参照ください。
●Houdiniの内部システムからの直接インストール
●Githubからの手動インストール
Labs Axis Alignとは
バウンディングボックスによってオブジェクトを配置します。このノードは、一般的なタスクや、メッシュの再配置または再調整に役立ちます。ワードプロセッサがテキストの配置を設定する方法と同様に、Justification Styleパラメーターを使用して、中央揃えまたは右/左揃えを行います。
センタリングと位置合わせは非常に一般的な操作であるため、Transform SOPで$ CEXまたは$ MINXを入力する代わりに設計されました。
各パラメーターについて
①X Axis
X軸の扱い方を設定します。No Change、Min、Max、Centerから選択します。
②Y Axis
Y軸の扱い方を設定します。No Change、Min、Max、Centerから選択します。
③Z Axis
Z軸の扱い方を設定します。No Change、Min、Max、Centerから選択します。
④Make Unit Size
入力ジオメトリを0〜1のスペースに収めるように切り替えます。
Labs Axis Alignノードの機能
Labs Axis Alignノードの機能についてご紹介します。今回は、Houdini18.0.460を使用しています。最初に、Houdiniを起動してSideFXLabsツールが正常に読み込まれていることを確認します。
ジオメトリネットワーク上でTestgeometry Pigheadノードを作成します。
次に、Labs Axis Alignノードを接続します。Testgeometry Pigheadノードをテンプレート表示にして、Labs Axis Alignノードにディスプレイフラグを付けると、ジオメトリの座標が変更されたことが確認できます。
Labs Axis Alignノードはとてもシンプルなノードです。ノードにジオメトリを入力することで、ジオメトリの再配置を行います。
Make Unit Sizeパラメーターをオンにした場合、ジオメトリを0~1の範囲に収めるように配置することができます。
下画像は、X Axis、Y Axis、Z Axisパラメーターをそれぞれ、[Center]、[Min]、[Max]に変更した結果です。各軸にあわせてジオメトリが再配置されたことが確認できます。
Labs Axis Alignノードについては以上です。次に、Labs Box Clipノードについてご紹介します。
Labs Box Clipとは
リサイズ可能なボックスでジオメトリをクリップします。このツールは、ジオメトリからボックス領域をクリップするプロセスを簡略化し、オプションでクリップされた側面に対して蓋をすることや、クリップされる側面を選択してクリップを有効または無効にすることができます。
各パラメーターについて
①Size
クリッピングボックスのX、Y、Zのサイズを設定します。
②Center
クリッピングボックスの中心を設定します。
③Uniform Scale
クリッピングボックスの全体的なスケールを設定します。これは、軸ごとのスケールに乗算したものです。
④Bounding Axis
クリッピングボックスの6面でクリッピングを有効にするように切り替えます。
⑤Fill Holes
有効にすると、クリッピングされた面に対して蓋をします。
Labs Box Clipノードの機能
Labs Box Clipノードの機能についてご紹介します。こちらも同様に、Houdini 18.0.460を使用しています。
最初に、ジオメトリネットワーク上でTestgeometry Squabを作成します。
Testgeometry Squabノードの下にLabs Box Clipノードを接続します。接続すると、ビューポート上にバウンディングボックスが表示されます。
表示されない場合は、ビューポート上にカーソルを置き、Enterキーを押すことでバウンディングボックスが表示されます。
Labs Box Clipノードにディスプレイフラグを付けると、ジオメトリがクリップされたことが確認できます。
このノードは、とてもシンプルです。Labs Box ClipノードのSize、Centerパラメーターを操作することでバウンディングボックスのサイズを調整して、クリップされる領域を設定することが可能です。
下画像は、Fill Holesパラメーターをオン/オフにした結果です。パラメーターをオンにすることで、クリップされた面を覆うことができます。
下の動画は、Labs Box ClipノードのSize、Center、Fill Holesパラメーターを調整しています。
Labs Box Clipノードについては、以上です。次に、Labs Multi Bounding Boxノードについて、ご紹介します。
Labs Multi Bounding Boxとは
入力メッシュに対し、バウンディングボックスを複数生成します。このノードは、入力メッシュのバウンディングボックス内に含まれる複数の小さなボックスを生成します。バウンディングボックスに基づくグリッドをベースとしてメッシュまたはポイントクラウドをスライスする際に役立ちます。
各パラメーターについて
①Divisions
各軸のサブコンポーネントの数を設定します。
②Isolate Index
単一のバウンディングボックスを分離します。
③Index
どのバウンディングボックスを分離するか設定します。ここに$Fをエクスプレッションとして入力し、ROPでフレームに基づいてモデルを複数のサブモデルにスライスすることができます。
Labs Multi Bounding Boxノードの機能
Labs Multi Bounding Boxノードの機能をご紹介します。こちらでは、作成したバウンディングボックスにFor Eachノードでループ処理を行い、各ボックスにランダムなカラーを割り当てるシーンを作成します。こちらも同様に、Houdini18.0.460を使用しています。
最初に、ジオメトリネットワーク上でTestgeometry Squabを作成します。
次に、バウンディングボックスを作成するため、Testgeometry Squabの下にLabs Multi Bounding Boxノードを接続します。
Divisionsパラメーターを[4,4,5]にします。X:4、Y:4、Z:5にすることでビューポート上に80個のバウンディングボックスが作成されます。
そして、各ボックスにアトリビュートを割り当てるために、Labs Multi Bounding Boxノード下にConnectivityノードを接続します。Connectivity Typeを[Primitive]に変更することで、プリミティブに対してclassアトリビュートが作成されます。
ループ処理を行うために、For Each Primitiveノードを作成します。For Eachノードは、Connectivityノードで作成したclassアトリビュートを基にループ処理を行うように設定されています。
■補足:For Each Pointノードを選択した場合、For Each Endノードの[Piece Elements:Primitives]に変更することで、For Each Primitiveノードと同じように使用することができます。
次に、先ほど紹介したLabs Box Clipノードを作成して、第一入力にTestgeometry Squabノードを接続します。
Labs Box Clipノードの第二入力に、For Each Beginノードを接続します。Labs Box Clipノードを使用することで、Labs Multi Bounding Boxノードのバウンディングボックスのサイズを利用してジオメトリをクリップします。
For Each Beginノードを選択して、パラメーターから[Create Meta Import Node]ボタンをクリックします。クリックすることで、For Each Begin Metadataノードが作成されます。
次に、AttributeWrangleノードを作成します。VEXpressionパラメーターで
i@id = detail(1, “iteration”, 0);
を入力します。
detail関数は、ジオメトリからアトリビュートを読み込むための関数です。iterationは、For Eachのループ処理をカウントするアトリビュートで、metaノードを選択して、Geometry Spreadsheetを見ると、Detailアトリビュートとして格納されていることが確認できます。
AttributeWrangleノードの第一入力に、Labs Box Clipノードを接続して、第二入力にFor Each Metadataノードを接続し、AttributeWrangleノードの出力にFor Each Endノードを接続します。
For Each Endノードを選択して、パラメーターの[Piece Attribute:class]と入力します。
For Each Endノードの下に、Colorノードを接続します。パラメーターの[Color Type:Random from Attribute]に変更して、[Attribute:id]と入力します。
Colorノードでidを基にランダムに色を割り当てることで、バウンディングボックスで80個に分割されたTestgeometry Squabに色が割り当てられたことが確認できます。
また、Labs Multi Bounding BoxノードのDivisionsを調整すると、生成されたバウンディングボックスの数も変わり、それに応じてバウンディングボックス毎に色が割り当てられます。
■各ノードのまとめ
■補足:AttributeWrangleノードで直接バウンディングボックスを参照する場合
VEXでiterationを使用せずに、AttributeWrangleノードから直接バウンディングボックスのclassを参照することもできます。
AttributeWrangleノードで、i@id = prim(1, “class”, 0); と、入力します。
For Each Beginノードで、Metadataノードを作成せずに、Box ClipノードとAttributeWrangleノードに接続します。
For Each Endノードを選択して、パラメーターの[Piece Attribute:class]と指定します。
Colorノードにディスプレイフラグを付けると、バウンディングボックスに色が割り当てられたことが確認できます。
「Labs Axis Align」「Labs Multi Bounding Box」「Labs Box Clip」ノードについては以上です。
これらのノードを使用することで、オブジェクトの再配置やバウンディングボックスを使用したジオメトリのクリップおよびバウンディングボックスの複数生成など、Labsツールを使用することで容易に作業を行うことが出来ます。