# 程序化散布

{% tabs %}
{% tab title="表面散布" %}
表面散布是一个世界级的散布解决方案，作用于你的网格表面。\
其理念是给它一些几何体（*静态网格、地形、程序网格等...*）作为要散布的表面/地面，以及一些你想要散布的演员对象，它就会发挥其魔法。

这是 Dash 中最全面的工具，包含来自多家大型 AAA 工作室、才华横溢的独立艺术家提出的功能请求，以及我们团队对最先进世界构建的不懈追求。
{% endtab %}

{% tab title="路径散布" %}
与表面散布不同，路径散布仅沿曲线散布。但你可以给它一个网格，如果网格有边界，它会通过将边界在内部处理为曲线来沿其散布。\
\
另一个与路径散布的重要区别是它还支持演员的散布，这意味着你可以散布贴花（Decals）、蓝图和其他演员。只需将散布类型从实例切换为演员，并将你的演员分配为散布对象。但对于贴花，我们还有专用工具：贴花散布 -->&#x20;
{% endtab %}

{% tab title="贴花散布" %}
贴花散布正如其名：给它一些用于散布的表面和一些要散布的贴花，你的表面就会被贴花覆盖。
{% endtab %}

{% tab title="网格散布" %}
网格散布是一个用于更均匀模式的实用工具。你可以完全控制 XYZ 尺寸与划分，并具备基本的接近度遮罩功能。
{% endtab %}

{% tab title="体积散布" %}
体积散布帮助你用另一个网格的实例填充任何网格。与表面散布不同，此工具不是在 *上* 网格，而是在其内部。一个常见用例是创建像小行星带这样的独特形状，或场景中任何你想要的漂浮网格。
{% endtab %}

{% tab title="放射状散布" %}
放射状散布允许你沿某个原点创建环形的实例网格。然后你可以创建多排，调整其同心属性以确保它们在每个环上良好对齐，使用接近度/对象遮罩等功能...
{% endtab %}
{% endtabs %}

{% hint style="info" %}
请务必阅读 [**入门指南**](https://docs.polygonflow.io/dash-documentation-zh/kuai-su-ru-men/quickstart) 页面，以便更轻松地消化本页的信息。有关 [**环境创建**](https://docs.polygonflow.io/dash-documentation-zh/kuai-su-ru-men/quickstart#creating-a-simple-environment-with-dash) 的部分涵盖了使用 Dash 工具的基础，我们在本页中将假定你已经掌握这些。
{% endhint %}

除了为特定用例提供易用的专用散布工具外，人们喜爱我们散布工具的主要原因是其遮罩功能。大部分工具共享一些基本遮罩设置，但表面散布几乎包含所有功能，所以我们逐一讲解！

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

## 遮罩功能

Dash 的散布工具包含各种遮罩功能，尽管大多数功能仅存在于表面散布中，其他工具仍有一些，我们也在积极将遮罩功能扩展到它们。\
让我们来看一下所有主要的遮罩功能，它们的工作原理，以及你可以如何使用它们。

在深入之前，这里的“遮罩”指的是移除已散布的实例。此外，大多数遮罩分组都允许你反转遮罩结果。你会注意到某些属性在右下角有一个小黑圈，这意味着你可以右键点击该属性并选择 **反转遮罩**.

<figure><img src="https://577194271-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>

### 接近度遮罩

此功能允许你通过曲线、网格和实例进行遮罩。

它有一个 **距离** 属性控制接近距离，并依赖于原生 UE 单位。\
另一个属性是 **采样**。该值控制遮罩的质量。更高的值表示更高的质量，较低的值表示较低的质量。

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

在上例中，我们使用网格和曲线进行遮罩，但依赖实例同样简单：在视口中选择它们，然后将它们添加到接近对象中。\
在下面的例子中，我们先散布了一些球体，然后散布一些圆盘，只保留靠近球体的圆盘。

<figure><img src="https://577194271-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 起，表面散布能够添加无限数量的接近度遮罩，这是通过接近度表完成的。这取代了之前的 3 个接近度遮罩。在接近度表中，你可以创建组，每组有其自己的对象、距离和宽度值。例如，你可以使用第一组以特定距离遮罩掉一些对象，然后对其他两组做相同操作。

<figure><img src="https://577194271-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>" %}

### 角度遮罩

角度遮罩相当直接：它依赖于底层表面来确定角度，并移除该区域内的任何散布对象。这在对山体进行散布时，想保持坡面没有树木或其他对象时非常理想。

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

### 高度遮罩

像表面散布这样的工具具有 **最小高度遮罩** 和 **最大高度遮罩** 属性，允许你从上方或下方裁剪散布对象。

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

### 对象遮罩

与仅依赖距离的接近度遮罩不同，对象遮罩使用光线追踪来确定你的实例是在对象内部、外部还是靠近对象。如果你想画一条曲线并将所有实例保持在该曲线内，此功能非常适合。你还可以用它来保留位于网格或体积内部/外部的实例。

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

这种遮罩方法还有一个 **保持内部** 布尔属性，你可以切换它以确保遮罩要么保留实例在输入对象的内部，要么保留在外部。你也可以使用 **距离** 属性来保留附近的实例。

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

### 噪声遮罩

噪声遮罩允许你快速打破已散布对象的均匀性。\
你将获得一系列参数，从缩放到频率、轴向拉伸、噪声平滑、扭曲等...

如果你在散布草地、树木甚至垃圾，我们强烈建议使用此功能以使结果看起来更自然。&#x20;

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

### 簇状遮罩

簇状遮罩通过随机选取实例并将它们用作簇的中心点来工作。\
你可以调整采样实例密度的数值，以及控制簇半径的另一个数值。\
结合噪声和其他遮罩，这可以成为构建逼真散布设置的强大工具。

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

### 边界遮罩

边界遮罩检测你的表面几何的边界边缘，并遮罩掉所有靠近这些边界的对象。

该功能对于像花园这类人工散布设置非常有用，你可以制作一些底层几何形状，在其上散布植物，然后隐藏该几何体。\
几何体上的每个边循环边界都被单独处理， **边界最小/最大** 属性允许你为每个边界循环的遮罩增加一些随机性。\
噪声是一个简单的噪声效果，用于打破边界的均匀性。

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

### 投影遮罩

投影遮罩的工作方式是让每个实例的点向上发射一条射线，任何被它击中的且你已添加到遮罩中的网格都将确保被射线击中的实例被保留。你也可以反转该效果。\
使用场景包括保留位于对象下方的实例，例如车辆下的植物或垃圾，或移除场景中低于任意一组对象的所有实例。

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

### 地形图层遮罩

此遮罩功能允许你将画笔图层的名称输入到表面散布，工具随后将该图层用作遮罩。你最多可以输入三层。

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

### 纹理遮罩

纹理遮罩相当直接：在 UE 的内容浏览器中选择一个纹理，将其传入纹理遮罩组中的 **纹理路径** 属性，然后就可以了。\
你可以选择哪一通道用作遮罩，调整颜色阈值以帮助渐变像素，并为纹理遮罩平铺。\
你要做的只是确保你的纹理包含黑底上的白色像素，白色像素将被用作遮罩。\
如果你想创建具有非常特定形状的小型装饰花园等结构，我们推荐这种方法：你可以在一个平面上进行散布，隐藏平面，然后给它代表花园形状的纹理。

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

### 顶点色遮罩

顶点色可以应用在静态网格上，然后所有 RGB 通道都可在此遮罩组中使用。此外，你有一些像素阈值控制来调整遮罩在渐变像素上的行为，还有一个 **混合模式** 下拉菜单，你可以从中选择顶点色如何影响你的遮罩逻辑。

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

### 方向遮罩

与角度遮罩不同，方向遮罩允许你使用阳光（或任何对象）演员根据太阳的旋转来遮罩对象。这可用于移除对阳光敏感的对象，苔藓是最常见的用例。

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

### 添加 / 移除遮罩

这是一个简单的遮罩技巧，允许我们随机添加或移除实例。\
例如你可以使用接近度遮罩清理路径上的植物，但随后以较低的值使用添加遮罩以在某些地方保留少量植物。

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

## 属性引用

在创建复杂设置时，例如一个森林：一个用于树木的表面散布、另一个用于灌木、另一个用于草地，等等……然后还有用于林中木桩和道路的路径散布等……这种复杂性很快会变得难以管理，我们使用引用来理清这些关系。\
你的道路会有一个宽度，你会希望木桩遵循该宽度，即使它们有一点偏移。植被也同样希望不在道路上生成，等等。<br>

实现方法是创建引用属性。我们在 [**入门指南**](https://docs.polygonflow.io/dash-documentation-zh/kuai-su-ru-men/quickstart#references) 页面中进行了介绍，但工作流程相当简单：你会创建某个表示道路宽度的距离或宽度属性，所有那些工具都会使用它。当某属性使用引用时，我们会给它一个权重，这允许你将该属性的值扩展到超出引用本身提供的范围。例如，如果你的宽度是 320，木桩可以有 0.1 的权重，这会使它们比宽度稍大，因为权重像一个百分比乘数一样作用于该值。

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

## 散布表

在后期版本（自 Dash 1.8.5 起），我们开始向某些工具添加数据表。主要的是表面散布中的散布表。你可以不用在散布属性上通过 + 图标简单地分配多个散布对象，而是通过点击编辑表按钮来打开散布表。&#x20;

在这里，你可以创建多个属性行，为每行分配一个或多个散布对象，然后你将能够控制每个属性行的 **密度偏移** 和一个 **缩放偏移** 。这意味着你可以用一个表面散布对散布对象进行非常具体的控制，而不必创建多个表面散布。&#x20;

此数据表逻辑正在逐步扩展到其他工具和设置，以便在需要时为你提供细粒度控制。&#x20;

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

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