Layout Node [Mardini2024]

これはMardini2024のDay4 Layout Node の動画を視聴してまとめたものです。

[動画](https://www.youtube.com/watch?v=El2oL47qRGo&t=168s)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/0ccef507-b93b-16b1-43d4-a0377df16844.png)

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

[Day3 Scatter And Align](https://qiita.com/jyouryuusui/items/623f04aa353260b591d1) | Day4 Layout Node | [Day5 Light Mixer](https://qiita.com/jyouryuusui/items/f6c5d257a2409ae9e267)

Layoutノードを使うと、あらかじめ用意したアセットライブラリからジオメトリをシーンに配置することができます。

# 要約
- LayoutノードはLOP Solarisコンテキスト(Stage)で動作する
- Layoutノードにはアセットライブラリが接続される
- アセットライブラリにはあらかじめ作成したジオメトリとマテリアルが登録されている
- Layoutノードの各ツールを使って、アセットをシーンに配置できる
- アセットはインスタンスとして配置され、パフォーマンスが優れている
- 自作のアセットもコンポーネントビルダーで作成し、ライブラリに登録できる

# LOPについて

- LOPコンテキストのStageで作成しても、LOPネットワークをobj上で作成してもどちらでも可能です
- LOP内に入ると右上にはSolarisと表示されます
- Stageレベルとも呼ばれます
- DesktopをSolarisデスクトップに変更します、これでLOP関連の作業が容易になります
    - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/58783621-6c41-e03f-ee01-8938d2b284d7.png)
    - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/9b1bf94d-56db-cf90-20a9-5e5fbb2d71d6.png)


# サンプルファイル

### SOP

GEOMETRY には３つのジオメトリ、VASE・BOX・SHELL　の３つのモデルです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/5760c821-5a98-7edb-cf19-5fc9a48dedc8.png)

### LOP（Stage）

grid上でレイアウト操作に慣れる用のノード、GEOMETTRYから持ってきた3つのレイアウトが含まれています


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/96949474-8e29-7201-098f-6793d9136b0a.png)


## 操作手順

### レイアウト

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/994be0b7-6543-39cc-65f0-20de824cff45.png)

- 新しいlop networkを作成し、その中にGridノードとLayoutノードを作成します
- Layoutノードの入力にシーンのジオメトリ(Gridなど)を接続します
    - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/0f036abf-6e3d-afb6-4b0f-78e6c3d8524a.png)

- LayoutノードのAsset Galleryをクリックし、デフォルトのアセットライブラリからアセットをドラッグ&ドロップします
    - テディベアのアイコンをクリックします
    - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/cd444236-43f2-5c03-5aa2-b7b7d11732e3.png)
    - 今回はバレルのモデルを選びます
    - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/54979b37-cbcc-a661-0dcf-41976a6bee98.png)
- 「Place」ツールを選択し、シーン上でクリックするとアセットが配置されます
    - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/4098c765-d3c8-968e-14c1-8b87847eb659.png)

    - ドラッグすると、スケールと向きを変更できます。マウスホイールの移動で別のオブジェクトに変更できます
    - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/6802bf57-3d81-6cc2-33d2-9441e0aab68b.png)
- 「Fill」ツールのScatterオプションを使えば、範囲を指定してアセットをランダムに配置できます。設定を調整することで密度やスケールを変更できます
    - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/1f52918f-046b-8aab-49a2-6b7cfe424ed6.png)
    - ここのパラメータは[Scatter and align](https://qiita.com/jyouryuusui/items/623f04aa353260b591d1)のパラメータに似ています
    - ブラシ形状はBrushタブのBrush Modeで選択します
        - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/9350b3c3-cc7f-1b28-88f4-12463a7b4aa6.png)

        - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/f0dd0c2b-2a97-4268-36c2-f9a91c1bbbd8.png)

### 自作のアセットを作成する

- まず、最初にAsset GalleryのギアマークからCreate New Asset Database File..を選択します
    - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/0989917d-ed90-382d-0c19-a1581a07435b.png)
    - 自分の好みのデータベース名をつけます
    - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/6c604950-b141-9563-1409-5788f6c4dfe6.png)
    - 新しい空のデータベースができました
    - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/5d2c89c7-2b24-d7e8-e1e0-3e75d388e89d.png)
    - テディベアアイコンを押すとAdd New Assetウインドウが表示されます
    - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/8de850cf-6ff6-21fd-d3f7-093b22f5d9de.png)

#### Component Builder

- では実際に適切なロードができるアセット生成を、どのように行うのかというと「Component Builder」を使用します
    - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/469f5d7a-1509-ea26-7fa5-c3f356dd3c2f.png)
    - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/74d00546-2f63-1648-7b02-05cf20a65a3f.png)
- ComponentGeometryノードのSourceをExternal SOP Networkに変更します
    - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/5af1eb5d-a954-5297-3909-b8848f4e2e4f.png)
    - GEOMETRY内のBOXを参照します。Component GeometryのDefault/RenderにSOPのパスを指定します
    - /obj/GEOMETRY/BOX
- ComponentMaterialの左側にジオメトリ、右側にマテリアルが指定されているので、次は右側のマテリアルを設定します
    - MaterialLibrary（materiallibrary1）のネットワークの中に入ります
    - Karma Material Builderを作成します（名前はkarmamaterialからBOXにします）
    - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/6a236e97-1a7b-6556-5fe6-a6449a5a36c7.png)
- 作成したままのノード名だと、GeometrySpreadsheet上でこれがなんのオブジェクトなのかがわかりません
    - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/29260060-6549-22a9-96d5-e5bb6341f1e9.png)
    - そこで、ComponentOutputノードの名前をわかりやすい名前に変えます。今回はbox_assetにします
    - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/9043c958-153a-2006-4e37-f0ca44cf4c31.png)
- 最後のノードを目的のアセット名に変更できたら、ComponentOutputノードで「Save to Disk」と「Generate Thumbnail」を実行します。うまく実行できれば、Locationで指定した場所にファイルが出力されています。デフォルトでは
```$HIP/usd/assets/`chs("name")`/`chs("filename")`　```
    - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/fa3e9212-800b-8c44-95fe-d4e43068dccb.png)

- Layoutノードの「Asset Gallery」から「Add Asset」を選び、作成したアセットのUSDファイルとサムネイル画像を指定して登録します
    - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/63a711ba-cdf0-e9d7-bb11-0fde50bd2636.png)
    - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/070af20c-eb57-296a-2c17-505562912e3d.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/1855e2bb-1b66-6f28-4be2-36129080a1d5.png)


## 積み重ね

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/d423e78a-f4cb-6bfc-e902-864818238c9c.png)

- スタックツールを使えば、アセットを積み重ねて配置できます
- 物理ベースドな配置をしたい場合は、LayoutノードのOptionsタブ。MethodをInstanciable Referenceにします
    - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/6603005b-179f-0d11-95d4-0d4da88b2fd5.png)
- 次にEditノードを追加し、Use Physicsを適用。Add Physicsボタンを押します。その状態で、反映させたいオブジェクトを選択した状態でギズモを下に下げます。すると重力落下させることができます
- ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/dbaa1d83-d514-14ad-a14b-74de122d683b.png)



![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/c6a016ef-45c5-8345-e3ff-471233960b34.png)


# まとめ

Layoutノードを使ってあらかじめ用意したアセットをシーンにスムーズに配置できます。自作のアセットも追加登録が可能です。