# プロシージャル散布

{% tabs %}
{% tab title="サーフェス散布（Surface Scatter）" %}
Surface Scatterはメッシュの表面上で動作する世界クラスの散布ソリューションです。\
基本的な考え方は、いくつかのジオメトリ（*スタティックメッシュ、ランドスケープ、プロシージャルメッシュなど...*）を散布する表面/地面として与え、散布したいアクターを与えると、それが魔法のように作用する、というものです。

これはDashで最も包括的なツールであり、複数の大手AAAスタジオ、才能ある個人アーティスト、そして我々のチームによる最先端のワールドビルディング追求から要望された機能を含んでいます。
{% endtab %}

{% tab title="パス散布（Path Scatter）" %}
Surface Scatterとは異なり、Path Scatterは曲線に沿ってのみ散布します。ただしメッシュを与えることもでき、境界がある場合はそれらの境界を内部的に曲線として処理して沿って散布します。\
\
そしてPath Scatterのもう一つの重要な違いは、アクターの散布もサポートすることです。つまりデカール、ブループリント、その他のアクターを散布できます。Scatter TypeをInstancesからActorsに切り替え、散布オブジェクトとしてアクターを割り当ててください。ただしデカールについては専用のツール、Decal Scatterも用意しています -->&#x20;
{% endtab %}

{% tab title="デカール散布（Decal Scatter）" %}
Decal Scatterは文字通りの機能を果たします：散布する表面といくつかのデカールを与えると、表面がデカールで覆われます。
{% endtab %}

{% tab title="グリッド散布（Grid Scatter）" %}
Grid Scatterはより均一なパターンに適した実用的なツールです。XYZの寸法と分割を完全に制御でき、基本的な近接マスキング機能も備えています。
{% endtab %}

{% tab title="ボリューム散布（Volume Scatter）" %}
Volume Scatterは別のメッシュのインスタンスで任意のメッシュを満たすのに役立ちます。Surface Scatterとは異なり、このツールは *上に* メッシュではなく、それらの内部に散布します。一般的な使用例は小惑星帯のようなユニークな形状を作成することで、シーン内で浮遊するメッシュを自由に配置したい場合などに使います。
{% endtab %}

{% tab title="ラジアル散布（Radial Scatter）" %}
Radial Scatterは原点に沿ってリング状のインスタンスメッシュを作成することを可能にします。その後行を作成したり、同心円のプロパティを調整して各リングできれいに合うようにしたり、近接/オブジェクトマスキングを使用したりできます。
{% endtab %}
{% endtabs %}

{% hint style="info" %}
必ず [**はじめに（Getting Started）**](https://docs.polygonflow.io/dash-documentation-ja/hajimeni/quickstart) このページの情報を容易に理解するために該当ページを読んでください。このページでは私たちが知っていることを前提に進めます。 [**環境作成（environment creation）**](https://docs.polygonflow.io/dash-documentation-ja/hajimeni/quickstart#creating-a-simple-environment-with-dash) セクションではDashツールを使う基本が説明されており、ここではそれを理解していることを前提とします。
{% endhint %}

特定のユースケース向けの使いやすい専用散布ツールを用意していることに加え、人々が我々の散布ツールを好む主な理由はそのマスキング機能です。多くのツールは基本的なマスキング設定を共有しますが、Surface Scatterはほぼすべての機能を備えているため、それらを一つずつ見ていきましょう！

{% embed url="<https://youtu.be/KsgW-19y4ts?si=aFbZ0CkTWE3lAwxX>" %}

## マスキング機能

Dashの散布ツールにはさまざまなマスキング機能があり、その多くはSurface Scatterにのみありますが、他のツールにもいくつかあり、我々はそれらへマスキング機能を積極的に拡張しています。\
主要なマスキング機能のすべて、それらの動作方法、できることを見ていきましょう。

掘り下げる前に、ここで「マスキング」は散布されたインスタンスを除去することを意味します。さらに、ほとんどのマスキンググループはマスク結果を反転する機能を持ちます。いくつかのプロパティの右下に小さな暗い円があるのに気づくでしょう。これはそのプロパティを右クリックして選択できることを示します： **マスクを反転（Invert Mask）**.

<figure><img src="https://1281618638-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FYp9tAkqjcwFDufAaviIa%2Fuploads%2FH0G3A1UOfQvot5NzmdI8%2Fimage.png?alt=media&#x26;token=dc214cd7-b09b-44c2-996b-d68df3e60774" alt=""><figcaption></figcaption></figure>

### 近接マスキング（Proximity Masking）

この機能では曲線、メッシュ、インスタンスによるマスクが可能です。

に **距離（Distance）** というプロパティがあり、近接距離を制御し、UEのネイティブ単位に依存します。\
もう一つのプロパティは **サンプリング（Sampling）**&#x3067;す。この値はマスキングの品質を制御します。値が高いほど品質は高く、低いほど品質は低くなります。

{% embed url="<https://streamable.com/hyeuuk>" %}

上の例ではメッシュと曲線をマスキングに使っていますが、インスタンスに依存するのも同様に簡単です：ビューポートでそれらを選択し、近接オブジェクトに追加してください。\
下の例では球を散布し、その近くの円盤だけを残すように円盤を散布しています。

<figure><img src="https://1281618638-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FYp9tAkqjcwFDufAaviIa%2Fuploads%2F2pW9UhURbEvdcZz0zD5E%2Fimage.png?alt=media&#x26;token=9d84b4d5-c8c3-4d38-ae77-13d85b65b2b9" alt=""><figcaption></figcaption></figure>

近接マスキングを利用して現実的な森林を構築できます。まず木を散布し、その下にシダや葉を残し、必要なら曲線を経路の近接マスクとして使い、その経路の端に岩を散布するといったことができます。

Dash 1.8.5以降、Surface Scatterは無限数の近接マスクを追加する機能を持ち、これはProximity Tableを通じて行われます。これは以前の3つの近接マスクに代わるものです。Proximity Tableではグループを作成でき、各グループは独自のオブジェクト、距離、幅の値を持ちます。例えば最初のグループで特定の距離のオブジェクトをマスクし、他のグループでも同様のことを行うことができます。

<figure><img src="https://1281618638-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FYp9tAkqjcwFDufAaviIa%2Fuploads%2FO9o9c3WpTHxeq10j5Xii%2Fimage.png?alt=media&#x26;token=ce18e7be-ff64-45a4-8db1-d9da5847c99c" alt=""><figcaption></figcaption></figure>

最後に、近接マスキングはマスク反転にも非常に適しています。

{% embed url="<https://streamable.com/ma50kn>" %}

### 角度マスキング（Angle Masking）

角度マスキングは非常に直感的です：基になる表面に依存して角度を決定し、その領域内の散布オブジェクトを除去します。これは山地で散布する際に斜面を木や他のオブジェクトからクリアに保つのに理想的です。

{% embed url="<https://streamable.com/2z46qu>" %}

### 高さマスキング（Height Masking）

Surface Scatterのようなツールには **最小高さマスク（Min Height Mask）** と **最大高さマスク（Max Height Mask）** というプロパティがあり、散布オブジェクトを上または下からクリップすることができます。

{% embed url="<https://streamable.com/5n8sr5>" %}

### オブジェクトマスキング（Object Masking）

単に距離に依存する近接マスキングとは異なり、オブジェクトマスキングはレイトレースを使用してインスタンスがオブジェクトの内側、外側、あるいは近くにあるかを判定します。曲線を描いてその曲線の内側に全てのインスタンスを残したい場合など、この機能は完璧です。メッシュやボリュームの内側/外側にあるインスタンスを維持するためにも使用できます。

{% embed url="<https://streamable.com/opwfsd>" %}

このマスキング方法にはまた **内側を保持（Keep Inside）** というブールプロパティがあり、切り替えてマスクが入力オブジェクトの内側のインスタンスを保持するか、外側のインスタンスを保持するかを決められます。さらに **距離（Distance）** というプロパティを使って近くのインスタンスを保持することもできます。

{% embed url="<https://streamable.com/tj2ede>" %}

### ノイズマスキング（Noise Masking）

ノイズマスキングは散布オブジェクトの均一性を素早く崩すことを可能にします。\
スケーリングから周波数、軸別ストレッチ、ノイズの平滑化、ワーピングなど、幅広いパラメータが提供されます。

草、木、あるいはゴミを散布する場合は、この機能を使って結果をより自然に見せることを強くお勧めします。&#x20;

{% embed url="<https://streamable.com/u84gd0>" %}

### クラスタマスキング（Clump Masking）

クラスタマスキングはランダムに選んだインスタンスを中心点としてクラスタを形成することで機能します。\
サンプリングするインスタンスの密度を調整する値と、クラスタの半径を制御する別の値が提供されます。\
ノイズや他のマスクと組み合わせると、現実的な散布設定に非常に強力なツールになります。

{% embed url="<https://streamable.com/nvo6vo>" %}

### 境界マスキング（Border Masking）

境界マスキングは表面ジオメトリの境界エッジを検出し、それらの境界近くのオブジェクトをマスクします。

この機能は庭のような人工的な散布設定で非常に有用です。基になるジオメトリの形状を作り、そこに植物を散布してからそのジオメトリを隠すといった使い方ができます。\
ジオメトリの各エッジループ境界は別々に扱われ、 **境界最小/最大（Border Min/Max）** プロパティにより各境界ループのマスキングにランダム性を追加できます。\
Noiseは境界の均一性を崩すための単純なノイズ効果です。

{% embed url="<https://streamable.com/g1ac8a>" %}

### 投影マスキング（Projection Masking）

投影マスキングは各インスタンスの点から上向きにレイを飛ばし、追加したメッシュに当たった場合はそのレイが当たったインスタンスを保持することで機能します。効果を反転することもできます。\
使用例は車の下の植物やゴミのようにオブジェクトの下にあるインスタンスを保持する、またはシーン内の任意のオブジェクトの下にあるすべてのインスタンスを削除する、などです。

{% embed url="<https://streamable.com/n422b1>" %}

### ランドスケープレイヤーマスキング（Landscape Layer Masking）

このマスキング機能ではペイントレイヤーの名前をSurface Scatterに渡し、そのレイヤーをマスクとして使用します。最大で3つのレイヤーを渡せます。

{% embed url="<https://streamable.com/32fyhc>" %}

### テクスチャマスキング（Texture Masking）

テクスチャマスキングは比較的直感的です：UEのコンテンツブラウザでテクスチャを選択し、それを **テクスチャパス（Texture Path）** のプロパティに渡せば完了です。\
どのチャンネルをマスクとして使うかを選び、グラデーションピクセルのためにカラースレッショルドを調整し、テクスチャマスクをタイルできます。\
テクスチャが黒地に白のピクセルを含んでいることを確認すれば、白いピクセルがマスクとして使用されます。\
非常に特定の形状で装飾された小さな庭のような構造を作成したい場合、この方法を使って平面上に散布して平面を隠し、その平面に花壇の形状を表すテクスチャを与えることをお勧めします。

{% embed url="<https://streamable.com/7qb44v>" %}

### 頂点カラーによるマスキング（Vertex Color Masking）

頂点カラーはスタティックメッシュに適用でき、このマスキンググループではRGBのすべてのチャンネルが使用可能です。加えて、グラデーションピクセルでのマスキングの挙動を調整するためのピクセルしきい値コントロールがあり、さらに **ブレンドモード（Blend Modes）** のドロップダウンから頂点カラーがマスキングロジックにどのように影響するかを選べます。

{% embed url="<https://streamable.com/a2o6ti>" %}

### 方向性マスキング（Directional Masking）

角度マスキングとは異なり、方向性マスキングでは太陽光（または任意のオブジェクト）アクターを使用して太陽の回転に基づいてオブジェクトをマスクできます。コケのように日光に敏感なオブジェクトを除去するのに使えます。

{% embed url="<https://streamable.com/7augeb>" %}

### 追加 / 除去マスキング（Add / Remove Masking）

これはインスタンスをランダムに追加または除去するシンプルなマスキングトリックです。\
例えば近接マスキングで植物の経路をクリアにした後、低い値の追加マスクを使ってところどころにいくつかの植物を残す、という使い方ができます。

{% embed url="<https://streamable.com/io3l21>" %}

## プロパティ参照（Property References）

森の木用にSurface Scatterを使い、別のものを低木用、別のものを草用に使い...その後に森沿いの木製の杭用にPath Scatterを使い、道路を作るなど複雑なセットアップを作成すると、その複雑さはすぐに圧倒的になります。こうした状況を整理するために参照を使います。\
道路には幅があり、木製の杭はわずかなオフセットがあってもその幅を尊重してほしいでしょう。同様に森林の植生は道路上に出現してほしくありません、といった具合です。<br>

これを行う方法は参照プロパティを作成することです。我々はそれを [**はじめに（Getting Started）**](https://docs.polygonflow.io/dash-documentation-ja/hajimeni/quickstart#references) ページで説明していますが、ワークフローはかなりシンプルです：道路の幅を決定するDistanceやWidthといったプロパティを作成し、すべてのツールがそれを使用するようにします。プロパティが参照を使用する場合、ウェイトを与えることができ、参照が提供する値を超えてプロパティの値を拡張できます。例えばWidthが320で、木製の杭に0.1のウェイトを与えると、ウェイトが割合の乗数として作用して杭が幅よりわずかに大きくなります。

{% embed url="<https://streamable.com/f4mfrj>" %}

## 散布テーブル（Scatter Table）

後のバージョン（Dash 1.8.5以降）では、特定のツールにデータテーブルを追加し始めました。主なものはSurface Scatterの散布テーブルです。散布プロパティの+アイコンで複数の散布オブジェクトを単に割り当てる代わりに、Edit Tableボタンを押して散布テーブルを開くことができます。&#x20;

ここでは複数のプロパティ行を作成し、各行に1つまたは複数の散布オブジェクトを割り当てることができ、さらに各プロパティ行ごとに制御できる **密度オフセット（density offset）** と **スケールオフセット（scale offset）** が用意されています。つまり、複数のSurface Scatterを作成する代わりに、1つのSurface Scatterで散布オブジェクトを非常に細かく制御できるということです。&#x20;

このデータテーブルロジックは、必要に応じて粒度の高い制御を提供するため、他のツールや設定にも徐々に拡張されています。&#x20;

{% embed url="<https://streamable.com/z9a3oh>" %}

{% embed url="<https://streamable.com/2zp5s6>" %}
