記事の目次

    今回は、前回紹介したForによるくり返しを利用して、複数の質感をもつ彫刻のようなモデルのつくり方を解説します。

    TEXT_秋元純一 / Jyunichi Akimoto(トランジスタ・スタジオ/ディレクター)
    日本でも指折りのHoudini アーティスト。
    手がけてきた作品は数々の賞を受賞している。
    代表作に、HIDETAKETAKAYAMA『Express feat. Silla(mum)』など。
    www.transistorstudio.co.jp
    blog.junichiakimoto.com


    EDIT_小村仁美 / Hitomi Komura(CGWORLD)

    Clip SOPでジオメトリをカットする

    今回のモチーフは現代アート的な彫刻です。前回の記事で紹介したForを使ったくり返しの作業はHoudiniの得意分野でもあり、今回のプロシージャルモデリングもForを主軸として組み立てていくワークフローになっています。また今回はVDBも活用しています。VDBは彫刻のようなモチーフにはもってこいです。今回はすでにスキャンされて整理されたデータを使用していますが、それをHoudiniの中でさらに整理したり、今回のフローを応用した作業にもVDBを使用しています。

    SOPの中には、通常の目的とは異なる使い方でも力を発揮するものが多々あります。今回のテーマのメインとなるClipやVDBも、元々の目的からは若干ずれた使い方かもしれません。しかし、Houdiniは応用にこそ意味があるソフトです。普通の使い方で良いならば、その他のCGソフトでも事足りてしまいます。実際の機能を理解しつつ、常に応用の可能性を検証することにHoudiniを使う意義が出てくるのだと確信しています。Clipは非常にシンプルな機能しかもち合わせていません。しかし、使用する環境を変えてあげることで非常に強力な武器となります。それこそがSOPの最大の魅力といえます。

    今回のHoudiniプロジェクトデータはこちら

    ※今回は外部サイトのスキャンデータをジオメトリとして使用しているため、プロジェクトデータにはジオメトリが含まれておりません。ご使用の際にはご自身で下記サイトよりスキャンデータをダウンロードして設定してください。 Three D Scans

    01 All Flow

    全体のワークフローを紹介します。



    • ノードの全体像(左から右に続きます)


    まず、ベースとなるジオメトリを用意します。今回はThree D Scansというサイトからダウンロードしたジオメトリでテストしています。外部ファイル【A】は軸がちがっていたりサイズが大きすぎたりする場合があるため、作業しやすいように調整します【B】。調整したジオメトリをVDB from Polygons SOP【C】からVDBに変換します。Distanceへ設定して、SDFとします。今回は土台部分はいらないので、土台部分のマスクをジオメトリで作成し、こちらもVDBに変換します【D】【1】。そして、VDB Combine SOP【E】を使ってVDB同士をコンバインします。このとき、SDFとして演算することで減算できます【2】


    これをConvert VDB SOP【F】でPolygon化します。Adaptiveに数値を入れ込むことで、平面に近い部分はPolygonを削減できます。次に、Clipでカットするための角度をTransform SOPを使って設定します【G】。Clipは一定の軸に対してストレートにカットするため、出来上がりを想像して調整しましょう【3】。次にForを使ってくり返しの設定をします。ForのEnd【H】設定は、Iteration MethodがBy Count、Gather MethodがMerge Each Iterationになります。Begin【I】の設定は、MethodがFetch Inputで、インプットをそのまま読み込む設定で、Iterationの結果を読み込まないようにします。次に、Clip SOP【J】のDistanceは、Metadata【K】から読み込んだIterationの値から、それぞれ順にカットする距離を変えていきます。カットしたジオメトリにDivide SOP【L】を使って、Remove Shared Edgesをチェックし、カットの切り口をPolygon化します【4】


    それをResample SOP【M】で一定のPointを配置し、PolyExtrude SOP【N】でInsetします。Poly Fill SOPなどを使って、多角形ポリゴンを三角化しても良いでしょう【O】。同じくPolyExtrude SOP【P】で厚みを付け、Group Create SOP【Q】を使い、角度からEdgeをグループ化します。Bevel SOP【R】でも角度で選べますが、今回は精度を求めるため、いったんGroup Create SOPを使用しています【5】。最後に、Attribute Create SOP【S】で、IterationからグループになりうるAttributeを作成して完成です【6】。出来上がったジオメトリは、最初にTransform SOPで移動した分、Invertで元に戻します【T】

    次ページ:
    02 VDB Clip Flow

    [[SplitPage]]

    02 VDB Clip Flow

    ここでは、前項で解説したClipからの応用編を解説します。前項では、ただストレートでClipしたものに厚みを付けただけですが、ここではVDBを使ってさらに複雑なジオメトリの作成方法にチャレンジしたいと思います。



    • 応用編ノードの全体像(左から右に続きます)

    ベースとなるジオメトリの準備は前項と同じです【A】。まず、Bounding Box SOP【B】で全体の大枠を取り、それをVDBに変換します。VDBに変換する際にFill Interiorで内側まで埋めます【C】。次にVDB Visualize Tree SOP【D】でPoint with Valueを使ってPointに変換します。さらにAttribute Rename SOP【E】でvdb_floatをsurfaceに変換します。そしてこのPointに対してRest Position SOP【F】を使ってrestを追加します。その後好みでDeformして準備は完了です【G】【1】。DeformしたPointをForの中でカットします。今度はClipを2つ使って【H】一定の間隔を取りカットします【2】


    カット後、restのAttributeからPへ変換します【I】【3】。同時に、Bounding Boxから作成したVDBをVolumeに変換します【J】。Volume from Attribute SOP【K】を使い、Volumeに対してsurfaceのAttributeを移行します。VolumeをVDBに変換して【L】VDB Resample SOP【M】で整理します。VDB Smooth SDF SOP【N】で滑らかにします【4】


    またVDB Reshape SDF SOP【O】を使ってカットするVDBにパディングを作成します。元のジオメトリのVDBとカットして作成したVDBを、VDB Combine SOP【P】を使いSDF Intersectionで演算します【5】。このとき、インプットされたVDBのDivisionがちがっていても、どちらかに合わせて演算することが可能です。その他、VDB Smooth SDF SOPをエッジの部分にかかるようにするなど、VDBの調整を行います【Q】。それらをForでGatherすれば完成です。最後に、VDB Smooth SDF SOPやConvert VDB SOPでPolygonに変換して完了します【R】【6】

    次ページ:
    03 Operators

    [[SplitPage]]

    03 Operators

    主要ノードを解説します。

    Clip SOP

    Clip SOPはKeepがAll Primitiveではない場合、入力されたプリミティブを指定されたDirectionの上下どちらかへクリップします。クリップとは、単純にどちらかを残して片側を完全削除することです。Distanceは指定されたOriginからクリップするための距離を示します。

    あとがき

    今回のフローでは、単純に平面的にクリップする方法と、Restを用いた、Deformした場合のクリップをご紹介しました。Clip SOPは非常に軽くシンプルな機能ですが、それゆえ使い方次第では非常に複雑な処理をすることができます。例えば下の画像では、いったん変形された状態でクリップしてその後元に戻しています。こうすることで切り口を複雑にすることができます。Booleanなどでは難しい表現も、Clipを使えば簡単に行えます。Attributeの値を使って並べたジオメトリをクリップすれば、値によって伸びたり縮んだりするエフェクトを作成することもできます。Clipは使い方しだいで、非常に強力な武器となります。