# CollectNormals(Terrain, Rect, int, bool)

> Helper function to set up a PaintContext that collects mesh normal data from one or more Terrain tiles.

## Definition

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

```csharp
public static PaintContext CollectNormals(Terrain terrain, Rect boundsInTerrainSpace, int extraBorderPixels = 0, bool fillOutsideTerrain = true)
```

### Parameters

**** (\[Terrain]\(/engine/6000.6/script-reference/unityengine/terrain)): Reference Terrain tile.**** (\[Rect]\(/engine/6000.6/script-reference/unityengine/rect)): The region in terrain space from which to collect normals.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): Number of extra border pixels required.**** (\[bool]\(https\://learn.microsoft.com/dotnet/api/system.boolean)): Whether to fill empty space outside of Terrain tiles with data from the nearest tile.

### Returns

| Type                                                                                     | Description                                                                   |
| ---------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------- |
| [PaintContext](/engine/6000.6/script-reference/unityengine/terraintools/paintcontext.md) | PaintContext containing the combined normalmap data for the specified region. |

### Remarks

CollectNormals identifies all of the normalmap pixels that are within `extraBorderPixels` of the bounds rectangle. The search is performed across adjacent connected Terrain tiles. The pixels are collected into a temporary render texture and stored in [PaintContext.sourceRenderTexture](/engine/6000.6/script-reference/unityengine/terraintools/paintcontext/sourcerendertexture.md).

Important: there is no corresponding function to write modified normalmap data back to the Terrain tiles, because the normalmap is not stored; it is calculated from the heightmap.

Once you are done using the sourceRenderTexture, you must call [TerrainPaintUtility.ReleaseContextResources](/engine/6000.6/script-reference/unityengine/terraintools/terrainpaintutility/releasecontextresources.md) to release the RenderTexture resources.

Additional Resources: [PaintContext.GatherNormals](/engine/6000.6/script-reference/unityengine/terraintools/paintcontext/gathernormals.md) and [PaintContext](/engine/6000.6/script-reference/unityengine/terraintools/paintcontext.md).
