Labs Group Curve Corners / Mesh Slice / PolyDeformノードについて


こちらの記事では、「Labs Group Curve Corners」「Labs Mesh Slice」「Labs PolyDeform」ノードの概要および各ノードのパラメーターについてご紹介します。
SideFXLabsツールのノードは、SideFX社のホームページで紹介されています。併せてご覧ください。


SideFXLabsツールのインストール手順

SideFX Labsツールセットのインストール手順については、以下の記事をご参照ください。

Houdiniの内部システムからの直接インストール

Githubからの手動インストール



Labs Group Curve Cornersノードとは

内側と外側のコーナーポイントのグループを作成します。
カーブ上の角度を検出して、ポリゴンカーブ上のコーナーを分離するためのユーティリティノードです。内側の角度と外側の角度を比較して、別のモデルを配置したい場合など、ワールドビルディングの使用に役立ちます。

各パラメーターについて

①Inside Group Name

内角のコーナーからグループを生成します。

②Outside Group Name

外側のコーナーからグループを生成します。

③Add Direction Normal

2点間の方向を指定したNormalアトリビュートをエクスポートします。


Labs Group Curve Cornersノードの機能

Labs Group Curve Cornersノードの機能についてご紹介します。今回は、Houdini18.0.460を使用しています。最初に、Houdiniを起動してSideFXLabsツールが正常に読み込まれていることを確認します。

ジオメトリネットワーク上にCurveノードを作成して、カーブを描きます。最初に、ビューポート上にカーソルを置きEnterキーを押します。

■補足
ビューポート右上の[Persp] > [Set View] > [Top viewport]に変更することで、カーブが描きやすくなります。

カーブの作成は右回りでポイントを打ちます。左回りでポイントを作成した場合、生成されるポリゴンの表裏が逆になります。作成後、ビューポート上で再度Enterキーを押すことで作成したカーブを決定することができます。

次に、Curveノードの下にLabs Group Curve Cornersノードを接続します。パラメーターを確認すると、[Inside Group Name:inside]、[Outside Group Name:outside]と記載があります。
※こちらのパラメーターは後ほど使用します。

次に、Curveノードで作成した各コーナーにジオメトリを配置するために、Sphereノードを作成します。[Uniform Scale:0.05]に変更します。

Sphereノードの下にColorノードを2つ作成し、それぞれ好みの色を指定します。

Colorノードの下にCopy to Pointノードを2つ作成します。こちらでは、判別しやすいように、[Inside]、[Outside]と名前を変更しています。
また、Insideの第一入力にColor1ノード、第二入力にLabs Group Curve Cornerノードを接続します。Outsideの第一入力にColor2ノード、第二入力は同様にLabs Group Curve Cornerノードを接続します。

ノードを接続した後、各Copy to Curveノードの[Target Points]に、Labs Group Curve Cornerノードの[inside]、[outside]を入力します。

最後に、Copy to Curveノードの下にMergeノードを接続します。ディスプレイフラグを付けると各コーナーにSphereジオメトリが配置されたことが確認できます。

■補足:左周りでラインを作成した場合
前提として、HoudiniのCurveノードを使用してラインを生成する際、右回りのポリゴンが表を向くように計算されます。
Curveツールでラインを作成する際、左周りでポイントを打つとLabs Group Curve Cornerノードでの[inside]、[outside]のグループ指定が逆に反映されます。

これは、Labs Group Curve Cornerノードの内部を確認すると、AttributeWrangeノードでptnum前後のポイントを結ぶベクトルに基づいて、内積を取得して内角または外角を決定するように設定されています。

その際、ポイント番号の順番によって、ptnum-1、ptnum、ptnum1の順番でベクトルを計算しています。つまり、Labs Group Curve Cornerノードは、表向きのポリゴンのポイント番号を基準に角度を計算しています。

よって、Curveノードの下にSortノードを接続して、パラメーターの[Point Sort:Reverse]に変更します。Reverseに変更することで、ポイントの順番がリバースされ、inside / outsideが反対になります。

■ご注意:Sortノードを[Point Sort:Reverse]に変更した場合、ポイント番号は逆になりますが、ポリゴンの向きは反転されません。

■ポリゴンの表裏を変更する場合
Curveノードの下にReverseノードを接続して、ポリゴンを裏面から表面に変更します。

そして、Sortノードを接続して、パラメーターから[Point Sort:By Vartex Order]に変更します。これにより、ポイント番号の順番が逆になります。

Labs Group Curve Cornersノードについては以上です。次に、Labs Mesh Sliceノードについてご紹介します。



Labs Mesh Sliceノードとは

3Dグリッドパターンに基づいて、ジオメトリを複数のサブメッシュにクリップします。

このノードは、バウンディングボックスで定義された3Dグリッドに基づいて、メッシュを複数のサブコンポーネントにスライスします。
これは、Multi Bounding BoxノードとBox Clipノードを組み合わせたもので、1つの大きなメッシュからサブメッシュを生成することができます。
最も一般的な使用例は、ストリーミングや描画/処理の最適化のために、大きなメッシュに分割する必要がある大規模なフォトグラメトリアセットまたはポイントクラウドでの使用です。

各パラメーターについて

①Divisions

3DグリッドのXYZの分割数を設定します。

②Fill Holes

クリッピングされた面に対して蓋をするかしないかを切り替えます。

③Isolate Index

単一のサブコンポーネントを分離します。 (このノードを操作するためにROPを使用したい場合や$Fエクスプレッションでメッシュを分割したい場合に役立ちます)

④Visualize Pieces

メッシュの分割を素早く視覚化するために、各ピースにランダムな色を適用します。


Labs Mesh Sliceノードの機能

Labs Mesh Sliceノードの機能についてご紹介します。こちらも同様に、Houdini18.0.460を使用しています。

ジオメトリネットワーク上でTestgeometry Pigheadを作成します。

Testgeometry Pigheadの下にLabs Mesh Sliceノードを接続します。

※この状態でディスプレイフラグを付けても、分割されたジオメトリを確認することはできません。
Exploded Viewノードを接続します。ディスプレイフラグをつけることで、ジオメトリが分割されたことが確認できます。

ここからは、Labs Mesh Sliceノードのパラメーターについてご紹介します。
Divisionsパラメーターを調整することで、ジオメトリの分割を設定することができます。

Fill Holesパラメーターのチェックを入れることで、クリッピングされた面に対して蓋をすることができます。

また、Visualize Piecesパラメーターにチェックを入れることで、各ピースに色を割り当てることができます。

下画像は、Testgeometry Rubbertoy、Testgeometry Squabに対して、Labs Mesh Sliceノードを適用した結果です。このノードを使用することで、様々なジオメトリをクリッピングすることができます。

Labs Mesh Sliceノードについては以上です。次に、Labs PolyDeformノードについてご紹介します。



Labs PolyDeformノードとは

ソースメッシュをワープしてターゲットの形状に一致させます。
このノードは、ソースメッシュをターゲットの形状に向かって変形させます。

下の画像では、豚の頭を球体、立方体、チューブに変形させています。これは、あるアセットから別のアセットへのバリエーションを生成する際に非常に役立ちます。このノードは、ラップデフォームに似ていますが、デフォームケージを必要としていません。

各パラメーターについて

Base Settings

①Retain Features

メッシュに低周波の変更を加えながら、高周波のディテールを維持します。0は、ターゲットを完全に一致させ、1はすべてのディテールを保持することを意味します。

②Shape Blend

0-1からのスカラーで移行を制御し、変形が強すぎる場合には緩和します。

③Low Res Preview

高解像度の入力の場合、このトグルは操作の有効なプレビューを生成するために、入力メッシュを低解像度にリメッシュします。

④Equalize Input Scale

ソースメッシュとターゲットメッシュの両方を同じサイズにします。

Smoothing

⑤Smoothing Method

位置とNormal Smoothingオプションによって、隣接するコントリビューション(寄与)の重要度の評価を設定します。

[Uniform]
互いの距離に関係なく、均等に滑らかにします。

[Edge Length]
一部のポイントが他のポイントよりも近いという事実をスムーズに解析します。このオプションは、ポイント間の相対距離を保持します。これは、入力のポイントが不均一に分布している場合に非常に役立ちます。

⑥Global Iterations

入力ジオメトリがスムージングされる回数を設定します。これは、ディテールメッシュと同様に動作し、ディスプレイスメントのみがスムージングされ、スキンメッシュの初期のディテールが保持されます。

⑦Falloff Iterations

スキンがディスプレイスメントのピークから離れて垂れ下がる部分を滑らかにします。Global Iterationsとは異なり、このタイプのスムージングではディスプレイスメント量は減少しません。

⑧Normal Iterations

投影に使用されるポイントノーマルを滑らかにします。ディスプレイスメントが純粋にMuscle Centerから計算されている場合(Normal Projection Mixingが0に設定されている場合)、これは効果がないことに注意してください。
※Normal Projection Mixingパラメーターについては、記事の下部で詳細を記載しています。併せて、ご覧下さい。

⑨Step Size

これは、全てのタイプのスムージングイテレーションの各スムージングステップのサイズを制御します。


Labs PolyDeformノードの機能

Labs PolyDeformノードの機能についてご紹介します。こちらも同様に、Houdini18.0.460を使用しています。

こちらでは、テストジオメトリをSphere、Box、Tubeなどのジオメトリに変形させます。 最初に、ジオメトリネットワーク上でTestgeometry Pigheadを作成します。

次に、変形するジオメトリとして、Sphere、Box、Tubeノードを作成します。

作成したジオメトリのパラメーターを調整します。Sphereノードを選択して、[Uniform Scale:0.9]に変更します。

Boxノードを選択して、[Uniform Scale:1.6]に変更します。

Tubeノードを選択して、[Primitive Type:Polygon]に変更し、[End Caps]にチェックを入れます。また、[Height:1.5]に設定します。

次に、PolyDeformノードを3つ作成します。

各ノードを下画像のように接続します。
PolyDeformノードの第一入力にTestgeometry Pigheadを接続して、第二入力にSphere/Box/Tubeノードを接続します。

PolyDeformノードにディスプレイフラグを付けると、Sphereの形状にテストジオメトリが変形されたことが確認できます。

■補足:ジオメトリを全て表示する場合
Mergeノードを作成して、ジオメトリを結合します。3つのPolyDeformノードをMergeノードに接続します。

次に、Labs Align and Distributeノードを接続します。ディスプレイフラグを付けると、各ジオメトリ全てが表示されます。

また、Testgeometry Pigheadの下にNormalノードを接続して、出力をMergeノードに接続することで元のジオメトリも併せて表示することができます。

ここからは、PolyDeformノードのパラメーターについてご紹介します。
Ratain Featuresパラメーターの数値を小さくすることで、第一入力のジオメトリを第二入力のジオメトリに沿って変形することができます。

Low Res Previewにチェックを入れることで、低解像度のジオメトリに変換することができます。ノード情報を確認すると、ポイント数等が削減されたことが分かります。

※ジオメトリの解像度を比較するために、こちらではテストジオメトリのシェーダーをオフにしています。

また、記事で記載したPolyDeformノードの動作については、動画でまとめてご紹介しています(字幕付き)。併せてご覧下さい。

■補足:8番目で説明したNormal IterationsパラメーターのNormal Projection Mixingパラメーターの値を1に設定した場合
Normal Projection Mixingパラメーターを調整する場合は、Labs PolyDeformノードの内部に入り、Muscle Deformノードを選択します。
Muscle Deformノードとは、スキンを表すためにサーフェスメッシュを変形させて、筋肉を表現したジオメトリを伸縮させることができます。

Normal Projection Mixingパラメーターとは、ノーマル方向(1)とMuscle Centerからの方向(0)で投影方向をミックスさせます。
つまり、変形するポイントの移動方向をノーマル方向か、MusleGeometryの中心から放射状に移動させるかをミックスします。

例えば、Normal Projection Mixingパラメーターに数値を入れると、複雑なモデルをノーマル方向に変形させるためジオメトリの形状が破綻してしまいます。これは、Testgeometry Rubbertoy(頭/手足など)が各ポイントノーマル方向へポイントが移動するために形状が破綻します。

下画像は、この状態でNormal Iterationsパラメーターを調整した結果です。Normal Iterationsパラメーターは、ノーマルにブラーをかけてスムージングし、ぼかす処理の回数を設定します。その為、数値を大きくした場合、ノーマルが滑らかになり、変形先を滑らかにすることができます。

Normal Iterationsパラメーターによって、変形先を滑らかにすることはできますが、上画像のように形状が破綻している箇所もあります。
本来、Normal Projection MixingパラメーターはHDA内部にあり、PolyDeformノードには反映されていません。よって、Normal Projection Mixingパラメーターの数値は極力調整せずに、値0にすることをお勧めします。

「Labs Group Curve Corners」「Labs Mesh Slice」「Labs PolyDeform」ノードについては以上です。

これらのノードを使用することで、コーナーポイントの内側/外側のグループ化、ジオメトリをサブメッシュにクリッピングすることやジオメトリの形状を調整することなど、Labsツールを使用することで容易に作業を行うことが出来ます。