Houdini Copernicus ジオメトリから情報を取得する
前回の記事で、Copernicus の Tile Patternノードには回転やスケールを画像などで明確に定義する手段がないと書きました。
おそらくそのような設計になっているのは、Tile Patternはあくまでも簡易的にランダムにするものであり、そもそもHoudiniであればSOPの機能を使って自由に配置を行えるから、なのだと思います。
(Substance Designerのように画像を使って向きを制御するほうがよっぽど特殊だというのとも忘れてはいけません…)
今回はCopernicusでSOPから情報を取得する方法について書いてみます。
SOP Import + Rasterrize Geometry
COPでSOPの情報を扱うには、COP内にSOP Importを作成し、rasterize Geometryで必要な情報を取得するのが簡単です。
rasterize GeometryにはプリセットでAlphaやPositionが入っていますが、SOPの持つアトリビュートであればある程度、何でも持ってこれます。
ラスタライズした時点で、float、2~4Vecter、Integerなどのoutput Typeの指定が必要なので、(UVが2vecter、IDがIntegerです)アトリビュートと、このOutputTypeが一致している必要があります。
SOPのネットワーク
SOP importの中身を見てみましょう。
配置パターンに癖が欲しかったので、中心付近が小さくなるようにVEXでpscaleを制御しています。
またenumerateでIntegerのIDというアトリビュートを作成しています。これはCOPでIDとして使用します。
本題には関係ないですが、シームレスパターンになるように配置するために、LabsのMesh Tilerを使用しています。また、石の形を作るためにLabsのMesh Sharpenも使用しています。どちらも非常に便利ですね…!
ちなみにSOPのネットワークはpackしたままではベイクできないので、unpackしておきましょう。
ラスタライズした結果は様々な使い道があります。Pは奥行きも持っているので、Channel Splitでblueチャンネルだけ取り出してUV空間の深度だけにすることもできます。
IDも非常に便利です。
IDからランダムな色を作成したり、IDがそれぞれ収まるようなUVを作成する事もできます。
マスク画像からSDFを作成
IDやモノクロのマスクからSDFを作成することもできます。
ちなみにラスタライズする際は、デフォルトではZフロントの2*2に収まっている必要がありますが、rasterize Setupノードを使うことで、ベイクの大きさや向きを自由に設定できます。