# SetDetailLayer

> Sets the detail layer density map.

## Definition

* **Type:** Method
* **Namespace:** [UnityEngine](/engine/6000.3/script-reference/unityengine.md)
* **Assembly:** UnityEngine.TerrainModule

## SetDetailLayer(int, int, int, Int32\[0:,0:])

Sets the detail layer density map.

```csharp
public void SetDetailLayer(int xBase, int yBase, int layer, int[,] details)
```

### Parameters

**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): **** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): **** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): **** (\[int\[,]]\(https\://learn.microsoft.com/dotnet/api/system.int32)):&#x20;

### Remarks

The Terrain system uses detail layer density maps. Each map is essentially a grayscale image where each pixel value specifies the number of detail objects to procedurally place in the terrain area that corresponds to the pixel. These values depend on which [DetailScatterMode](/engine/6000.3/script-reference/unityengine/detailscattermode.md) is set. Because several different detail types may be used, the map is arranged into "layers" - the array indices of the layers are determined by the order of the detail types defined in the Terrain inspector (ie, when the Paint Details tool is selected).

### Examples

```csharp
using UnityEngine;

public class ExampleClass : MonoBehaviour
{
    // Set all pixels in a detail map below a certain threshold to zero.
    void DetailMapCutoff(Terrain t, float threshold)
    {
        // Get all of layer zero.
        var map = t.terrainData.GetDetailLayer(0, 0, t.terrainData.detailWidth, t.terrainData.detailHeight, 0);

        // For each pixel in the detail map...
        for (int y = 0; y < t.terrainData.detailHeight; y++)
        {
            for (int x = 0; x < t.terrainData.detailWidth; x++)
            {
                // If the pixel value is below the threshold then
                // set it to zero.
                if (map[x, y] < threshold)
                {
                    map[x, y] = 0;
                }
            }
        }

        // Assign the modified map back.
        t.terrainData.SetDetailLayer(0, 0, 0, map);
    }
}
```

## SetDetailLayer(Vector2Int, int, Int32\[0:,0:])

Sets the detail layer density map.

```csharp
public void SetDetailLayer(Vector2Int basePosition, int layer, int[,] details)
```

### Parameters

**** (\[Vector2Int]\(/engine/6000.3/script-reference/unityengine/vector2int)): **** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): **** (\[int\[,]]\(https\://learn.microsoft.com/dotnet/api/system.int32)):&#x20;

### Remarks

The Terrain system uses detail layer density maps. Each map is essentially a grayscale image where each pixel value specifies the number of detail objects to procedurally place in the terrain area that corresponds to the pixel. These values depend on which [DetailScatterMode](/engine/6000.3/script-reference/unityengine/detailscattermode.md) is set. Because several different detail types may be used, the map is arranged into "layers" - the array indices of the layers are determined by the order of the detail types defined in the Terrain inspector (ie, when the Paint Details tool is selected).

### Examples

```csharp
using UnityEngine;

public class ExampleClass : MonoBehaviour
{
    // Set all pixels in a detail map below a certain threshold to zero.
    void DetailMapCutoff(Terrain t, float threshold)
    {
        // Get all of layer zero.
        var map = t.terrainData.GetDetailLayer(0, 0, t.terrainData.detailWidth, t.terrainData.detailHeight, 0);

        // For each pixel in the detail map...
        for (int y = 0; y < t.terrainData.detailHeight; y++)
        {
            for (int x = 0; x < t.terrainData.detailWidth; x++)
            {
                // If the pixel value is below the threshold then
                // set it to zero.
                if (map[x, y] < threshold)
                {
                    map[x, y] = 0;
                }
            }
        }

        // Assign the modified map back.
        t.terrainData.SetDetailLayer(0, 0, 0, map);
    }
}
```
