Rebuild Factoryzの礒です。
今回は建築の屋根を題材に、ジオメトリのノーマルを扱うテクニックについて書いていきたいと思います。
やりたいこと

BoxのPoint Normalの向きを直線上に整えます。

Normalの向きを整えることで、Rayを使って屋根の形に密着させるといったモデリングが可能となります。
1.Box

Boxは何もいじらずそのままです。
2.Normal

NormalノードでPrimitiveにNormalをもたせます。
3.Blast

BlastノードでZ軸方向のNormalが0のプリミティブを削除します。
4.Normal

NormalノードでPointにNormalをもたせます。
これで一直線上にNormalが設定されます。
5.Attribute Transfer

AttributesでPointsにNと入力します。
これでBlastとNormalで作ったノーマルアトリビュートをBoxに持たせることができます。
公式では、
2つのモデル間で頂点/ポイント/プリミティブ/Detailのアトリビュートを転送します。
https://www.sidefx.com/ja/docs/houdini/nodes/sop/attribtransfer.html
と書かれています。
6.ここまでのまとめ
ここまでで、特定方向のNormalを持っていなかったBoxに、Z軸方向のNormalを持たせることができました。

ここからは上の画像のように、屋根を模したGeometryにBoxをぴったりとくっつけます。
7.Box作成しGroup化


Boxを作成し、GroupノードでKeep by NormalsをEnableにチェックを入れて利用します。
DirectionはY軸に1と入力、それ以外は0。
Spread Angleを調整して、上側のPointだけを選択できるようにします。
8.VEXで点を合致させる

@P.z = 0;
Wrangleで上のコードを書きます。
9.Fuseで点を結合

VEXでは点を移動させただけなので、結合する必要があります。
なのでFuseノードで密着した点を結合します。
10.Transformで少し移動

Transformで少し移動させます。
11.RayでBoxを密着させる

RayのInput1には「5.Attribute Transfer」の出力を入れて、Input2にはRayの照射対象となるGeometryを入力します。
今回の例では三角形にしたBoxをつなぎます。
12.Merge

Mergeで2つの結果をつなげます。
13.最後にNormal

最後にNormalで面情報を整えておきます。
こんな感じで屋根の自動生成などを行う際に、メインの屋根の形状に合わせてサブ屋根の形状を変化させることができます。
終わり
では今回はこれで終わります。