Scatter And Align [Mardini2024]

これはMardini2024のDay3 Scatter And Align の動画を視聴してまとめたものです。

[動画](https://www.youtube.com/watch?v=uxUhP04DUFs)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/7140bc88-54db-6e4e-6d5d-3d627c850ba7.png)


[公式のサンプルファイル](https://media.sidefx.com/uploads/contests/mardini2024/moeen_videos/mardini_examples_day3_scatter_align.zip)

 [Day2 Topo build Node](https://qiita.com/jyouryuusui/items/595734aa9b5026cf1d08) | Day3 Scatter And Align | [Day4 Layout Node](https://qiita.com/jyouryuusui/items/e53917aa241dab8fb720)

# 要約
- Scatter and Alignノードはジオメトリをポイント上にコピーし、各ポイントでジオメトリのスケールと向きを調整することができる
- Scatter and Alignノードを作成し（Scatterノードと混同しないでください）、Copy to Pointsノードを接続する
- Copy to Pointsノードの入力にジオメトリを指定する
- Scatter and Alignノードの設定で、ポイントの配置密度、スケール範囲、向きのランダム化を調整できる
- Attribute Paintを使えば、ポイントを配置する領域を制限できる
- より効率的にインスタンスを配置するには、LOPのInstancerノードを使う


# サンプルファイル

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/22b78925-01f5-d9b1-323b-225bb36910ce.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/ff46d970-9dc5-c994-ae45-c5f7b3cc179b.png)


## 操作手順:

-  ベースとなるGridやSphereを作成。続けて**Scatter and Align**ノードを作成します
-  **Copy to Points**ノードを作成し、Scatter and Alignノードの2番目の入力に接続します
-  Copy to Pointsノードの1番目の入力に、コピーしたいジオメトリ(例えばBoxやSphere)を接続します
    -  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/c307c2bb-faf8-2fb2-de04-63b37d120dc8.png)

-  Scatter and AlignノードのPoint Count Methodを設定します。By Sizeを選ぶと、指定したサイズに合わせてポイント数が調整されます
    -  Coverageを調整して、ポイントの配置密度を変更できます。値を大きくするとポイント間の間隔が狭くなります
    -  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/4dd93ec9-ed33-54b5-b75e-b825c7a8c088.png)

-  Scaleで、コピーするジオメトリのスケール範囲を設定できます。Minimum RadiusとMaximum Radiusを調整します
-  Alignmentタブを開き、コピーするジオメトリの向きを設定します。Normal Directionで、ジオメトリのどの軸が地面の法線に合わせられるかを指定できます
    -  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/af5209aa-e9b2-ad52-604d-5270ff5f75f3.png)
-  Max Random Cone Angleを調整すると、法線からの最大ランダム角度を設定でき、コピーされるジオメトリの向きがランダムになります
-  Rotation Around Normalで、法線を軸とした回転角度の範囲を設定できます

### コピー領域をペイントして制限する場合

-  Attribute Paintノードを使えば、Attributeに基づいてポイントを配置する領域を制限できます
-  Attribute Createノードで、f@coverage_attribを作成
-  Attribute PaintノードのAttributeタブ内にcoverage_attribをセットしてペイントします
-  Scatter And AlignノードのCoverage Attribute にcoverage_attribをセットします

### より多くのジオメトリをコピーする場合

-  ラバートイをコピーの素材としてそのまま接続し、大量にコピーすると動作が重くなります
    -  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/a2b04acb-70b6-ef6a-26dc-813100301b72.png)
-  View上で「D」を押し、パーティクルをPointからLirtSphereにすることでスケールを確認できます
    -  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/d0d536f7-d77a-2165-8369-0523c3cc9c1e.png)

-  Scatter and Alignノードの出力をNullノードに接続し、SOPではなくLOP（Stage）上でInstancerノードを使ってインスタンス化するとよりパフォーマンスが向上します
    -  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/470e0d48-a1e7-933e-11ef-e2ce6415bbf0.png)
    -  InstancerのTarget PointのLocation SourceをInternal SOPからExternal SOPに変更することで、外部のSOP Pathを指定できます
    -  SOP ImportのINSTANCE_GEO にはSOP PathでNull（/obj/SCATTER_AND_ALIGN/INSTANCING_GEO）を指定します。同じくInstancerのTarget Pointには、先ほどScatter And Alignで作成した出力先のNullのSOP Pathである(/obj/SCATTER_AND_ALIGN/INSTANCING_POINTS)を指定します
    -  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/4e1c6993-0fdf-446c-0e9e-08ead319f6a9.png)


## まとめ

Scatter and Alignノードを使ってジオメトリをランダムにScatterし、スケールと向きを調整することができます。