# Blit

> Adds a command to use a shader to copy the pixel data from a texture into a render texture.

## Definition

* **Type:** Method
* **Namespace:** [UnityEngine.Rendering](/engine/6000.6/script-reference/unityengine/rendering.md)
* **Assembly:** UnityEngine.CoreModule

## Blit(Texture, RenderTargetIdentifier)

Adds a command to use a shader to copy the pixel data from a texture into a render texture.

```csharp
public void Blit(Texture source, RenderTargetIdentifier dest)
```

### Parameters

**** (\[Texture]\(/engine/6000.6/script-reference/unityengine/texture)): The source texture or [RenderTargetIdentifier](/engine/6000.6/script-reference/unityengine/rendering/rendertargetidentifier.md).**** (\[RenderTargetIdentifier]\(/engine/6000.6/script-reference/unityengine/rendering/rendertargetidentifier)): The destination [RenderTargetIdentifier](/engine/6000.6/script-reference/unityengine/rendering/rendertargetidentifier.md).

### Remarks

This method adds a command to copy pixel data from a texture on the GPU to a render texture on the GPU. This is one of the fastest ways to copy a texture.

When you use `Graphics.Blit`, Unity does the following:

1. Sets the [active render texture](/engine/6000.6/script-reference/unityengine/rendertexture/active.md) to the `dest` texture.
2. Passes `source` to the `mat` material as the `_MainTex` property.
3. Uses the material's shader to draw a full-screen surface from the `source` texture to the `dest` texture.

If you provide a `mat` material that doesn't have a `_MainTex` property, `Blit` doesn't use `source`.

You can use `Graphics.Blit` to create [post-processing effects](/engine/6000.6/manual/post-processing-and-full-screen-effects/overview.md), by setting `mat` to a material with a custom shader.

`Blit` changes [RenderTexture.active](/engine/6000.6/script-reference/unityengine/rendertexture/active.md). Store the active render texture before you use `Blit` if you need to use it afterwards.

Avoid setting `source` and `dest` to the same render texture, as this may cause undefined behaviour. Use [Custom Render Textures](/engine/6000.6/manual/materials-and-shaders/textures/textures-reference/class-custom-render-texture.md) with double buffering instead, or use two render textures and alternate between them to implement double buffering manually.

In linear color space, set [GL.sRGBWrite](/engine/6000.6/script-reference/unityengine/gl/srgbwrite.md) before using `Blit`, to make sure the sRGB-to-linear color conversion is what you expect.

To blit to the screen in the Built-in Render Pipeline, follow these steps:

1. Set `dest` to `null`. Unity now uses `Camera.main.targetTexture` as the destination texture.
2. Set the [Camera.targetTexture](/engine/6000.6/script-reference/unityengine/camera/targettexture.md) property of [Camera.main](/engine/6000.6/script-reference/unityengine/camera/main.md) to `null`.

To blit to the screen in the Universal Render Pipeline (URP) or the High Definition Render Pipeline (HDRP), you must call [Graphics.Blit](/engine/6000.6/script-reference/unityengine/graphics/blit.md) or [CommandBuffer.Blit](/engine/6000.6/script-reference/unityengine/rendering/commandbuffer/blit.md) inside a method that you call from the [RenderPipelineManager.endContextRendering](/engine/6000.6/script-reference/unityengine/rendering/renderpipelinemanager/endcontextrendering.md) callback.

If you want to use a depth or stencil buffer that is part of the `source` (Render)texture, or blit to a subregion of a texture, you have to manually write an equivalent of the [Graphics.Blit](/engine/6000.6/script-reference/unityengine/graphics/blit.md) function - i.e. [Graphics.SetRenderTarget](/engine/6000.6/script-reference/unityengine/graphics/setrendertarget.md) with destination color buffer and source depth buffer, setup orthographic projection ([GL.LoadOrtho](/engine/6000.6/script-reference/unityengine/gl/loadortho.md)), setup material pass ([Material.SetPass](/engine/6000.6/script-reference/unityengine/material/setpass.md)) and draw a quad ([GL.Begin](/engine/6000.6/script-reference/unityengine/gl/begin.md)).

Often the previous content of the Blit `dest` does not need to be preserved. In this case, it is recommended to activate the `dest` render target explicitly with the appropriate load and store actions using [CommandBuffer.SetRenderTarget](/engine/6000.6/script-reference/unityengine/rendering/commandbuffer/setrendertarget.md). The Blit dest should then be set to [BuiltinRenderTextureType.CurrentActive](/engine/6000.6/script-reference/unityengine/rendering/builtinrendertexturetype/currentactive.md).

Additional Resources: [Graphics.BlitMultiTap](/engine/6000.6/script-reference/unityengine/graphics/blitmultitap.md), [Post-processing effects](/engine/6000.6/manual/post-processing-and-full-screen-effects/overview.md).

## Blit(Texture, RenderTargetIdentifier, Vector2, Vector2)

Adds a command to use a shader to copy the pixel data from a texture into a render texture.

```csharp
public void Blit(Texture source, RenderTargetIdentifier dest, Vector2 scale, Vector2 offset)
```

### Parameters

**** (\[Texture]\(/engine/6000.6/script-reference/unityengine/texture)): The source texture or [RenderTargetIdentifier](/engine/6000.6/script-reference/unityengine/rendering/rendertargetidentifier.md).**** (\[RenderTargetIdentifier]\(/engine/6000.6/script-reference/unityengine/rendering/rendertargetidentifier)): The destination [RenderTargetIdentifier](/engine/6000.6/script-reference/unityengine/rendering/rendertargetidentifier.md).**** (\[Vector2]\(/engine/6000.6/script-reference/unityengine/vector2)): The scale to apply.**** (\[Vector2]\(/engine/6000.6/script-reference/unityengine/vector2)): The offset to apply.

### Remarks

This method adds a command to copy pixel data from a texture on the GPU to a render texture on the GPU. This is one of the fastest ways to copy a texture.

When you use `Graphics.Blit`, Unity does the following:

1. Sets the [active render texture](/engine/6000.6/script-reference/unityengine/rendertexture/active.md) to the `dest` texture.
2. Passes `source` to the `mat` material as the `_MainTex` property.
3. Uses the material's shader to draw a full-screen surface from the `source` texture to the `dest` texture.

If you provide a `mat` material that doesn't have a `_MainTex` property, `Blit` doesn't use `source`.

You can use `Graphics.Blit` to create [post-processing effects](/engine/6000.6/manual/post-processing-and-full-screen-effects/overview.md), by setting `mat` to a material with a custom shader.

`Blit` changes [RenderTexture.active](/engine/6000.6/script-reference/unityengine/rendertexture/active.md). Store the active render texture before you use `Blit` if you need to use it afterwards.

Avoid setting `source` and `dest` to the same render texture, as this may cause undefined behaviour. Use [Custom Render Textures](/engine/6000.6/manual/materials-and-shaders/textures/textures-reference/class-custom-render-texture.md) with double buffering instead, or use two render textures and alternate between them to implement double buffering manually.

In linear color space, set [GL.sRGBWrite](/engine/6000.6/script-reference/unityengine/gl/srgbwrite.md) before using `Blit`, to make sure the sRGB-to-linear color conversion is what you expect.

To blit to the screen in the Built-in Render Pipeline, follow these steps:

1. Set `dest` to `null`. Unity now uses `Camera.main.targetTexture` as the destination texture.
2. Set the [Camera.targetTexture](/engine/6000.6/script-reference/unityengine/camera/targettexture.md) property of [Camera.main](/engine/6000.6/script-reference/unityengine/camera/main.md) to `null`.

To blit to the screen in the Universal Render Pipeline (URP) or the High Definition Render Pipeline (HDRP), you must call [Graphics.Blit](/engine/6000.6/script-reference/unityengine/graphics/blit.md) or [CommandBuffer.Blit](/engine/6000.6/script-reference/unityengine/rendering/commandbuffer/blit.md) inside a method that you call from the [RenderPipelineManager.endContextRendering](/engine/6000.6/script-reference/unityengine/rendering/renderpipelinemanager/endcontextrendering.md) callback.

If you want to use a depth or stencil buffer that is part of the `source` (Render)texture, or blit to a subregion of a texture, you have to manually write an equivalent of the [Graphics.Blit](/engine/6000.6/script-reference/unityengine/graphics/blit.md) function - i.e. [Graphics.SetRenderTarget](/engine/6000.6/script-reference/unityengine/graphics/setrendertarget.md) with destination color buffer and source depth buffer, setup orthographic projection ([GL.LoadOrtho](/engine/6000.6/script-reference/unityengine/gl/loadortho.md)), setup material pass ([Material.SetPass](/engine/6000.6/script-reference/unityengine/material/setpass.md)) and draw a quad ([GL.Begin](/engine/6000.6/script-reference/unityengine/gl/begin.md)).

Often the previous content of the Blit `dest` does not need to be preserved. In this case, it is recommended to activate the `dest` render target explicitly with the appropriate load and store actions using [CommandBuffer.SetRenderTarget](/engine/6000.6/script-reference/unityengine/rendering/commandbuffer/setrendertarget.md). The Blit dest should then be set to [BuiltinRenderTextureType.CurrentActive](/engine/6000.6/script-reference/unityengine/rendering/builtinrendertexturetype/currentactive.md).

Additional Resources: [Graphics.BlitMultiTap](/engine/6000.6/script-reference/unityengine/graphics/blitmultitap.md), [Post-processing effects](/engine/6000.6/manual/post-processing-and-full-screen-effects/overview.md).

## Blit(Texture, RenderTargetIdentifier, Material)

Adds a command to use a shader to copy the pixel data from a texture into a render texture.

```csharp
public void Blit(Texture source, RenderTargetIdentifier dest, Material mat)
```

### Parameters

**** (\[Texture]\(/engine/6000.6/script-reference/unityengine/texture)): The source texture or [RenderTargetIdentifier](/engine/6000.6/script-reference/unityengine/rendering/rendertargetidentifier.md).**** (\[RenderTargetIdentifier]\(/engine/6000.6/script-reference/unityengine/rendering/rendertargetidentifier)): The destination [RenderTargetIdentifier](/engine/6000.6/script-reference/unityengine/rendering/rendertargetidentifier.md).**** (\[Material]\(/engine/6000.6/script-reference/unityengine/material)): The material to use. If you don't provide `mat`, Unity uses a default material.

### Remarks

This method adds a command to copy pixel data from a texture on the GPU to a render texture on the GPU. This is one of the fastest ways to copy a texture.

When you use `Graphics.Blit`, Unity does the following:

1. Sets the [active render texture](/engine/6000.6/script-reference/unityengine/rendertexture/active.md) to the `dest` texture.
2. Passes `source` to the `mat` material as the `_MainTex` property.
3. Uses the material's shader to draw a full-screen surface from the `source` texture to the `dest` texture.

If you provide a `mat` material that doesn't have a `_MainTex` property, `Blit` doesn't use `source`.

You can use `Graphics.Blit` to create [post-processing effects](/engine/6000.6/manual/post-processing-and-full-screen-effects/overview.md), by setting `mat` to a material with a custom shader.

`Blit` changes [RenderTexture.active](/engine/6000.6/script-reference/unityengine/rendertexture/active.md). Store the active render texture before you use `Blit` if you need to use it afterwards.

Avoid setting `source` and `dest` to the same render texture, as this may cause undefined behaviour. Use [Custom Render Textures](/engine/6000.6/manual/materials-and-shaders/textures/textures-reference/class-custom-render-texture.md) with double buffering instead, or use two render textures and alternate between them to implement double buffering manually.

In linear color space, set [GL.sRGBWrite](/engine/6000.6/script-reference/unityengine/gl/srgbwrite.md) before using `Blit`, to make sure the sRGB-to-linear color conversion is what you expect.

To blit to the screen in the Built-in Render Pipeline, follow these steps:

1. Set `dest` to `null`. Unity now uses `Camera.main.targetTexture` as the destination texture.
2. Set the [Camera.targetTexture](/engine/6000.6/script-reference/unityengine/camera/targettexture.md) property of [Camera.main](/engine/6000.6/script-reference/unityengine/camera/main.md) to `null`.

To blit to the screen in the Universal Render Pipeline (URP) or the High Definition Render Pipeline (HDRP), you must call [Graphics.Blit](/engine/6000.6/script-reference/unityengine/graphics/blit.md) or [CommandBuffer.Blit](/engine/6000.6/script-reference/unityengine/rendering/commandbuffer/blit.md) inside a method that you call from the [RenderPipelineManager.endContextRendering](/engine/6000.6/script-reference/unityengine/rendering/renderpipelinemanager/endcontextrendering.md) callback.

If you want to use a depth or stencil buffer that is part of the `source` (Render)texture, or blit to a subregion of a texture, you have to manually write an equivalent of the [Graphics.Blit](/engine/6000.6/script-reference/unityengine/graphics/blit.md) function - i.e. [Graphics.SetRenderTarget](/engine/6000.6/script-reference/unityengine/graphics/setrendertarget.md) with destination color buffer and source depth buffer, setup orthographic projection ([GL.LoadOrtho](/engine/6000.6/script-reference/unityengine/gl/loadortho.md)), setup material pass ([Material.SetPass](/engine/6000.6/script-reference/unityengine/material/setpass.md)) and draw a quad ([GL.Begin](/engine/6000.6/script-reference/unityengine/gl/begin.md)).

Often the previous content of the Blit `dest` does not need to be preserved. In this case, it is recommended to activate the `dest` render target explicitly with the appropriate load and store actions using [CommandBuffer.SetRenderTarget](/engine/6000.6/script-reference/unityengine/rendering/commandbuffer/setrendertarget.md). The Blit dest should then be set to [BuiltinRenderTextureType.CurrentActive](/engine/6000.6/script-reference/unityengine/rendering/builtinrendertexturetype/currentactive.md).

Additional Resources: [Graphics.BlitMultiTap](/engine/6000.6/script-reference/unityengine/graphics/blitmultitap.md), [Post-processing effects](/engine/6000.6/manual/post-processing-and-full-screen-effects/overview.md).

## Blit(Texture, RenderTargetIdentifier, Material, int)

Adds a command to use a shader to copy the pixel data from a texture into a render texture.

```csharp
public void Blit(Texture source, RenderTargetIdentifier dest, Material mat, int pass)
```

### Parameters

**** (\[Texture]\(/engine/6000.6/script-reference/unityengine/texture)): The source texture or [RenderTargetIdentifier](/engine/6000.6/script-reference/unityengine/rendering/rendertargetidentifier.md).**** (\[RenderTargetIdentifier]\(/engine/6000.6/script-reference/unityengine/rendering/rendertargetidentifier)): The destination [RenderTargetIdentifier](/engine/6000.6/script-reference/unityengine/rendering/rendertargetidentifier.md).**** (\[Material]\(/engine/6000.6/script-reference/unityengine/material)): The material to use. If you don't provide `mat`, Unity uses a default material.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): If the value is `-1`, Unity draws all the passes in `mat`. Otherwise, Unity draws only the pass you set `pass` to. The default value is `-1`.

### Remarks

This method adds a command to copy pixel data from a texture on the GPU to a render texture on the GPU. This is one of the fastest ways to copy a texture.

When you use `Graphics.Blit`, Unity does the following:

1. Sets the [active render texture](/engine/6000.6/script-reference/unityengine/rendertexture/active.md) to the `dest` texture.
2. Passes `source` to the `mat` material as the `_MainTex` property.
3. Uses the material's shader to draw a full-screen surface from the `source` texture to the `dest` texture.

If you provide a `mat` material that doesn't have a `_MainTex` property, `Blit` doesn't use `source`.

You can use `Graphics.Blit` to create [post-processing effects](/engine/6000.6/manual/post-processing-and-full-screen-effects/overview.md), by setting `mat` to a material with a custom shader.

`Blit` changes [RenderTexture.active](/engine/6000.6/script-reference/unityengine/rendertexture/active.md). Store the active render texture before you use `Blit` if you need to use it afterwards.

Avoid setting `source` and `dest` to the same render texture, as this may cause undefined behaviour. Use [Custom Render Textures](/engine/6000.6/manual/materials-and-shaders/textures/textures-reference/class-custom-render-texture.md) with double buffering instead, or use two render textures and alternate between them to implement double buffering manually.

In linear color space, set [GL.sRGBWrite](/engine/6000.6/script-reference/unityengine/gl/srgbwrite.md) before using `Blit`, to make sure the sRGB-to-linear color conversion is what you expect.

To blit to the screen in the Built-in Render Pipeline, follow these steps:

1. Set `dest` to `null`. Unity now uses `Camera.main.targetTexture` as the destination texture.
2. Set the [Camera.targetTexture](/engine/6000.6/script-reference/unityengine/camera/targettexture.md) property of [Camera.main](/engine/6000.6/script-reference/unityengine/camera/main.md) to `null`.

To blit to the screen in the Universal Render Pipeline (URP) or the High Definition Render Pipeline (HDRP), you must call [Graphics.Blit](/engine/6000.6/script-reference/unityengine/graphics/blit.md) or [CommandBuffer.Blit](/engine/6000.6/script-reference/unityengine/rendering/commandbuffer/blit.md) inside a method that you call from the [RenderPipelineManager.endContextRendering](/engine/6000.6/script-reference/unityengine/rendering/renderpipelinemanager/endcontextrendering.md) callback.

If you want to use a depth or stencil buffer that is part of the `source` (Render)texture, or blit to a subregion of a texture, you have to manually write an equivalent of the [Graphics.Blit](/engine/6000.6/script-reference/unityengine/graphics/blit.md) function - i.e. [Graphics.SetRenderTarget](/engine/6000.6/script-reference/unityengine/graphics/setrendertarget.md) with destination color buffer and source depth buffer, setup orthographic projection ([GL.LoadOrtho](/engine/6000.6/script-reference/unityengine/gl/loadortho.md)), setup material pass ([Material.SetPass](/engine/6000.6/script-reference/unityengine/material/setpass.md)) and draw a quad ([GL.Begin](/engine/6000.6/script-reference/unityengine/gl/begin.md)).

Often the previous content of the Blit `dest` does not need to be preserved. In this case, it is recommended to activate the `dest` render target explicitly with the appropriate load and store actions using [CommandBuffer.SetRenderTarget](/engine/6000.6/script-reference/unityengine/rendering/commandbuffer/setrendertarget.md). The Blit dest should then be set to [BuiltinRenderTextureType.CurrentActive](/engine/6000.6/script-reference/unityengine/rendering/builtinrendertexturetype/currentactive.md).

Additional Resources: [Graphics.BlitMultiTap](/engine/6000.6/script-reference/unityengine/graphics/blitmultitap.md), [Post-processing effects](/engine/6000.6/manual/post-processing-and-full-screen-effects/overview.md).

## Blit(RenderTargetIdentifier, RenderTargetIdentifier)

Adds a command to use a shader to copy the pixel data from a texture into a render texture.

```csharp
public void Blit(RenderTargetIdentifier source, RenderTargetIdentifier dest)
```

### Parameters

**** (\[RenderTargetIdentifier]\(/engine/6000.6/script-reference/unityengine/rendering/rendertargetidentifier)): The source texture or [RenderTargetIdentifier](/engine/6000.6/script-reference/unityengine/rendering/rendertargetidentifier.md).**** (\[RenderTargetIdentifier]\(/engine/6000.6/script-reference/unityengine/rendering/rendertargetidentifier)): The destination [RenderTargetIdentifier](/engine/6000.6/script-reference/unityengine/rendering/rendertargetidentifier.md).

### Remarks

This method adds a command to copy pixel data from a texture on the GPU to a render texture on the GPU. This is one of the fastest ways to copy a texture.

When you use `Graphics.Blit`, Unity does the following:

1. Sets the [active render texture](/engine/6000.6/script-reference/unityengine/rendertexture/active.md) to the `dest` texture.
2. Passes `source` to the `mat` material as the `_MainTex` property.
3. Uses the material's shader to draw a full-screen surface from the `source` texture to the `dest` texture.

If you provide a `mat` material that doesn't have a `_MainTex` property, `Blit` doesn't use `source`.

You can use `Graphics.Blit` to create [post-processing effects](/engine/6000.6/manual/post-processing-and-full-screen-effects/overview.md), by setting `mat` to a material with a custom shader.

`Blit` changes [RenderTexture.active](/engine/6000.6/script-reference/unityengine/rendertexture/active.md). Store the active render texture before you use `Blit` if you need to use it afterwards.

Avoid setting `source` and `dest` to the same render texture, as this may cause undefined behaviour. Use [Custom Render Textures](/engine/6000.6/manual/materials-and-shaders/textures/textures-reference/class-custom-render-texture.md) with double buffering instead, or use two render textures and alternate between them to implement double buffering manually.

In linear color space, set [GL.sRGBWrite](/engine/6000.6/script-reference/unityengine/gl/srgbwrite.md) before using `Blit`, to make sure the sRGB-to-linear color conversion is what you expect.

To blit to the screen in the Built-in Render Pipeline, follow these steps:

1. Set `dest` to `null`. Unity now uses `Camera.main.targetTexture` as the destination texture.
2. Set the [Camera.targetTexture](/engine/6000.6/script-reference/unityengine/camera/targettexture.md) property of [Camera.main](/engine/6000.6/script-reference/unityengine/camera/main.md) to `null`.

To blit to the screen in the Universal Render Pipeline (URP) or the High Definition Render Pipeline (HDRP), you must call [Graphics.Blit](/engine/6000.6/script-reference/unityengine/graphics/blit.md) or [CommandBuffer.Blit](/engine/6000.6/script-reference/unityengine/rendering/commandbuffer/blit.md) inside a method that you call from the [RenderPipelineManager.endContextRendering](/engine/6000.6/script-reference/unityengine/rendering/renderpipelinemanager/endcontextrendering.md) callback.

If you want to use a depth or stencil buffer that is part of the `source` (Render)texture, or blit to a subregion of a texture, you have to manually write an equivalent of the [Graphics.Blit](/engine/6000.6/script-reference/unityengine/graphics/blit.md) function - i.e. [Graphics.SetRenderTarget](/engine/6000.6/script-reference/unityengine/graphics/setrendertarget.md) with destination color buffer and source depth buffer, setup orthographic projection ([GL.LoadOrtho](/engine/6000.6/script-reference/unityengine/gl/loadortho.md)), setup material pass ([Material.SetPass](/engine/6000.6/script-reference/unityengine/material/setpass.md)) and draw a quad ([GL.Begin](/engine/6000.6/script-reference/unityengine/gl/begin.md)).

Often the previous content of the Blit `dest` does not need to be preserved. In this case, it is recommended to activate the `dest` render target explicitly with the appropriate load and store actions using [CommandBuffer.SetRenderTarget](/engine/6000.6/script-reference/unityengine/rendering/commandbuffer/setrendertarget.md). The Blit dest should then be set to [BuiltinRenderTextureType.CurrentActive](/engine/6000.6/script-reference/unityengine/rendering/builtinrendertexturetype/currentactive.md).

Additional Resources: [Graphics.BlitMultiTap](/engine/6000.6/script-reference/unityengine/graphics/blitmultitap.md), [Post-processing effects](/engine/6000.6/manual/post-processing-and-full-screen-effects/overview.md).

## Blit(RenderTargetIdentifier, RenderTargetIdentifier, Vector2, Vector2)

Adds a command to use a shader to copy the pixel data from a texture into a render texture.

```csharp
public void Blit(RenderTargetIdentifier source, RenderTargetIdentifier dest, Vector2 scale, Vector2 offset)
```

### Parameters

**** (\[RenderTargetIdentifier]\(/engine/6000.6/script-reference/unityengine/rendering/rendertargetidentifier)): The source texture or [RenderTargetIdentifier](/engine/6000.6/script-reference/unityengine/rendering/rendertargetidentifier.md).**** (\[RenderTargetIdentifier]\(/engine/6000.6/script-reference/unityengine/rendering/rendertargetidentifier)): The destination [RenderTargetIdentifier](/engine/6000.6/script-reference/unityengine/rendering/rendertargetidentifier.md).**** (\[Vector2]\(/engine/6000.6/script-reference/unityengine/vector2)): The scale to apply.**** (\[Vector2]\(/engine/6000.6/script-reference/unityengine/vector2)): The offset to apply.

### Remarks

This method adds a command to copy pixel data from a texture on the GPU to a render texture on the GPU. This is one of the fastest ways to copy a texture.

When you use `Graphics.Blit`, Unity does the following:

1. Sets the [active render texture](/engine/6000.6/script-reference/unityengine/rendertexture/active.md) to the `dest` texture.
2. Passes `source` to the `mat` material as the `_MainTex` property.
3. Uses the material's shader to draw a full-screen surface from the `source` texture to the `dest` texture.

If you provide a `mat` material that doesn't have a `_MainTex` property, `Blit` doesn't use `source`.

You can use `Graphics.Blit` to create [post-processing effects](/engine/6000.6/manual/post-processing-and-full-screen-effects/overview.md), by setting `mat` to a material with a custom shader.

`Blit` changes [RenderTexture.active](/engine/6000.6/script-reference/unityengine/rendertexture/active.md). Store the active render texture before you use `Blit` if you need to use it afterwards.

Avoid setting `source` and `dest` to the same render texture, as this may cause undefined behaviour. Use [Custom Render Textures](/engine/6000.6/manual/materials-and-shaders/textures/textures-reference/class-custom-render-texture.md) with double buffering instead, or use two render textures and alternate between them to implement double buffering manually.

In linear color space, set [GL.sRGBWrite](/engine/6000.6/script-reference/unityengine/gl/srgbwrite.md) before using `Blit`, to make sure the sRGB-to-linear color conversion is what you expect.

To blit to the screen in the Built-in Render Pipeline, follow these steps:

1. Set `dest` to `null`. Unity now uses `Camera.main.targetTexture` as the destination texture.
2. Set the [Camera.targetTexture](/engine/6000.6/script-reference/unityengine/camera/targettexture.md) property of [Camera.main](/engine/6000.6/script-reference/unityengine/camera/main.md) to `null`.

To blit to the screen in the Universal Render Pipeline (URP) or the High Definition Render Pipeline (HDRP), you must call [Graphics.Blit](/engine/6000.6/script-reference/unityengine/graphics/blit.md) or [CommandBuffer.Blit](/engine/6000.6/script-reference/unityengine/rendering/commandbuffer/blit.md) inside a method that you call from the [RenderPipelineManager.endContextRendering](/engine/6000.6/script-reference/unityengine/rendering/renderpipelinemanager/endcontextrendering.md) callback.

If you want to use a depth or stencil buffer that is part of the `source` (Render)texture, or blit to a subregion of a texture, you have to manually write an equivalent of the [Graphics.Blit](/engine/6000.6/script-reference/unityengine/graphics/blit.md) function - i.e. [Graphics.SetRenderTarget](/engine/6000.6/script-reference/unityengine/graphics/setrendertarget.md) with destination color buffer and source depth buffer, setup orthographic projection ([GL.LoadOrtho](/engine/6000.6/script-reference/unityengine/gl/loadortho.md)), setup material pass ([Material.SetPass](/engine/6000.6/script-reference/unityengine/material/setpass.md)) and draw a quad ([GL.Begin](/engine/6000.6/script-reference/unityengine/gl/begin.md)).

Often the previous content of the Blit `dest` does not need to be preserved. In this case, it is recommended to activate the `dest` render target explicitly with the appropriate load and store actions using [CommandBuffer.SetRenderTarget](/engine/6000.6/script-reference/unityengine/rendering/commandbuffer/setrendertarget.md). The Blit dest should then be set to [BuiltinRenderTextureType.CurrentActive](/engine/6000.6/script-reference/unityengine/rendering/builtinrendertexturetype/currentactive.md).

Additional Resources: [Graphics.BlitMultiTap](/engine/6000.6/script-reference/unityengine/graphics/blitmultitap.md), [Post-processing effects](/engine/6000.6/manual/post-processing-and-full-screen-effects/overview.md).

## Blit(RenderTargetIdentifier, RenderTargetIdentifier, Material)

Adds a command to use a shader to copy the pixel data from a texture into a render texture.

```csharp
public void Blit(RenderTargetIdentifier source, RenderTargetIdentifier dest, Material mat)
```

### Parameters

**** (\[RenderTargetIdentifier]\(/engine/6000.6/script-reference/unityengine/rendering/rendertargetidentifier)): The source texture or [RenderTargetIdentifier](/engine/6000.6/script-reference/unityengine/rendering/rendertargetidentifier.md).**** (\[RenderTargetIdentifier]\(/engine/6000.6/script-reference/unityengine/rendering/rendertargetidentifier)): The destination [RenderTargetIdentifier](/engine/6000.6/script-reference/unityengine/rendering/rendertargetidentifier.md).**** (\[Material]\(/engine/6000.6/script-reference/unityengine/material)): The material to use. If you don't provide `mat`, Unity uses a default material.

### Remarks

This method adds a command to copy pixel data from a texture on the GPU to a render texture on the GPU. This is one of the fastest ways to copy a texture.

When you use `Graphics.Blit`, Unity does the following:

1. Sets the [active render texture](/engine/6000.6/script-reference/unityengine/rendertexture/active.md) to the `dest` texture.
2. Passes `source` to the `mat` material as the `_MainTex` property.
3. Uses the material's shader to draw a full-screen surface from the `source` texture to the `dest` texture.

If you provide a `mat` material that doesn't have a `_MainTex` property, `Blit` doesn't use `source`.

You can use `Graphics.Blit` to create [post-processing effects](/engine/6000.6/manual/post-processing-and-full-screen-effects/overview.md), by setting `mat` to a material with a custom shader.

`Blit` changes [RenderTexture.active](/engine/6000.6/script-reference/unityengine/rendertexture/active.md). Store the active render texture before you use `Blit` if you need to use it afterwards.

Avoid setting `source` and `dest` to the same render texture, as this may cause undefined behaviour. Use [Custom Render Textures](/engine/6000.6/manual/materials-and-shaders/textures/textures-reference/class-custom-render-texture.md) with double buffering instead, or use two render textures and alternate between them to implement double buffering manually.

In linear color space, set [GL.sRGBWrite](/engine/6000.6/script-reference/unityengine/gl/srgbwrite.md) before using `Blit`, to make sure the sRGB-to-linear color conversion is what you expect.

To blit to the screen in the Built-in Render Pipeline, follow these steps:

1. Set `dest` to `null`. Unity now uses `Camera.main.targetTexture` as the destination texture.
2. Set the [Camera.targetTexture](/engine/6000.6/script-reference/unityengine/camera/targettexture.md) property of [Camera.main](/engine/6000.6/script-reference/unityengine/camera/main.md) to `null`.

To blit to the screen in the Universal Render Pipeline (URP) or the High Definition Render Pipeline (HDRP), you must call [Graphics.Blit](/engine/6000.6/script-reference/unityengine/graphics/blit.md) or [CommandBuffer.Blit](/engine/6000.6/script-reference/unityengine/rendering/commandbuffer/blit.md) inside a method that you call from the [RenderPipelineManager.endContextRendering](/engine/6000.6/script-reference/unityengine/rendering/renderpipelinemanager/endcontextrendering.md) callback.

If you want to use a depth or stencil buffer that is part of the `source` (Render)texture, or blit to a subregion of a texture, you have to manually write an equivalent of the [Graphics.Blit](/engine/6000.6/script-reference/unityengine/graphics/blit.md) function - i.e. [Graphics.SetRenderTarget](/engine/6000.6/script-reference/unityengine/graphics/setrendertarget.md) with destination color buffer and source depth buffer, setup orthographic projection ([GL.LoadOrtho](/engine/6000.6/script-reference/unityengine/gl/loadortho.md)), setup material pass ([Material.SetPass](/engine/6000.6/script-reference/unityengine/material/setpass.md)) and draw a quad ([GL.Begin](/engine/6000.6/script-reference/unityengine/gl/begin.md)).

Often the previous content of the Blit `dest` does not need to be preserved. In this case, it is recommended to activate the `dest` render target explicitly with the appropriate load and store actions using [CommandBuffer.SetRenderTarget](/engine/6000.6/script-reference/unityengine/rendering/commandbuffer/setrendertarget.md). The Blit dest should then be set to [BuiltinRenderTextureType.CurrentActive](/engine/6000.6/script-reference/unityengine/rendering/builtinrendertexturetype/currentactive.md).

Additional Resources: [Graphics.BlitMultiTap](/engine/6000.6/script-reference/unityengine/graphics/blitmultitap.md), [Post-processing effects](/engine/6000.6/manual/post-processing-and-full-screen-effects/overview.md).

## Blit(RenderTargetIdentifier, RenderTargetIdentifier, Material, int)

Adds a command to use a shader to copy the pixel data from a texture into a render texture.

```csharp
public void Blit(RenderTargetIdentifier source, RenderTargetIdentifier dest, Material mat, int pass)
```

### Parameters

**** (\[RenderTargetIdentifier]\(/engine/6000.6/script-reference/unityengine/rendering/rendertargetidentifier)): The source texture or [RenderTargetIdentifier](/engine/6000.6/script-reference/unityengine/rendering/rendertargetidentifier.md).**** (\[RenderTargetIdentifier]\(/engine/6000.6/script-reference/unityengine/rendering/rendertargetidentifier)): The destination [RenderTargetIdentifier](/engine/6000.6/script-reference/unityengine/rendering/rendertargetidentifier.md).**** (\[Material]\(/engine/6000.6/script-reference/unityengine/material)): The material to use. If you don't provide `mat`, Unity uses a default material.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): If the value is `-1`, Unity draws all the passes in `mat`. Otherwise, Unity draws only the pass you set `pass` to. The default value is `-1`.

### Remarks

This method adds a command to copy pixel data from a texture on the GPU to a render texture on the GPU. This is one of the fastest ways to copy a texture.

When you use `Graphics.Blit`, Unity does the following:

1. Sets the [active render texture](/engine/6000.6/script-reference/unityengine/rendertexture/active.md) to the `dest` texture.
2. Passes `source` to the `mat` material as the `_MainTex` property.
3. Uses the material's shader to draw a full-screen surface from the `source` texture to the `dest` texture.

If you provide a `mat` material that doesn't have a `_MainTex` property, `Blit` doesn't use `source`.

You can use `Graphics.Blit` to create [post-processing effects](/engine/6000.6/manual/post-processing-and-full-screen-effects/overview.md), by setting `mat` to a material with a custom shader.

`Blit` changes [RenderTexture.active](/engine/6000.6/script-reference/unityengine/rendertexture/active.md). Store the active render texture before you use `Blit` if you need to use it afterwards.

Avoid setting `source` and `dest` to the same render texture, as this may cause undefined behaviour. Use [Custom Render Textures](/engine/6000.6/manual/materials-and-shaders/textures/textures-reference/class-custom-render-texture.md) with double buffering instead, or use two render textures and alternate between them to implement double buffering manually.

In linear color space, set [GL.sRGBWrite](/engine/6000.6/script-reference/unityengine/gl/srgbwrite.md) before using `Blit`, to make sure the sRGB-to-linear color conversion is what you expect.

To blit to the screen in the Built-in Render Pipeline, follow these steps:

1. Set `dest` to `null`. Unity now uses `Camera.main.targetTexture` as the destination texture.
2. Set the [Camera.targetTexture](/engine/6000.6/script-reference/unityengine/camera/targettexture.md) property of [Camera.main](/engine/6000.6/script-reference/unityengine/camera/main.md) to `null`.

To blit to the screen in the Universal Render Pipeline (URP) or the High Definition Render Pipeline (HDRP), you must call [Graphics.Blit](/engine/6000.6/script-reference/unityengine/graphics/blit.md) or [CommandBuffer.Blit](/engine/6000.6/script-reference/unityengine/rendering/commandbuffer/blit.md) inside a method that you call from the [RenderPipelineManager.endContextRendering](/engine/6000.6/script-reference/unityengine/rendering/renderpipelinemanager/endcontextrendering.md) callback.

If you want to use a depth or stencil buffer that is part of the `source` (Render)texture, or blit to a subregion of a texture, you have to manually write an equivalent of the [Graphics.Blit](/engine/6000.6/script-reference/unityengine/graphics/blit.md) function - i.e. [Graphics.SetRenderTarget](/engine/6000.6/script-reference/unityengine/graphics/setrendertarget.md) with destination color buffer and source depth buffer, setup orthographic projection ([GL.LoadOrtho](/engine/6000.6/script-reference/unityengine/gl/loadortho.md)), setup material pass ([Material.SetPass](/engine/6000.6/script-reference/unityengine/material/setpass.md)) and draw a quad ([GL.Begin](/engine/6000.6/script-reference/unityengine/gl/begin.md)).

Often the previous content of the Blit `dest` does not need to be preserved. In this case, it is recommended to activate the `dest` render target explicitly with the appropriate load and store actions using [CommandBuffer.SetRenderTarget](/engine/6000.6/script-reference/unityengine/rendering/commandbuffer/setrendertarget.md). The Blit dest should then be set to [BuiltinRenderTextureType.CurrentActive](/engine/6000.6/script-reference/unityengine/rendering/builtinrendertexturetype/currentactive.md).

Additional Resources: [Graphics.BlitMultiTap](/engine/6000.6/script-reference/unityengine/graphics/blitmultitap.md), [Post-processing effects](/engine/6000.6/manual/post-processing-and-full-screen-effects/overview.md).

## Blit(RenderTargetIdentifier, RenderTargetIdentifier, int, int)

Adds a command to use a shader to copy the pixel data from a texture into a render texture.

```csharp
public void Blit(RenderTargetIdentifier source, RenderTargetIdentifier dest, int sourceDepthSlice, int destDepthSlice)
```

### Parameters

**** (\[RenderTargetIdentifier]\(/engine/6000.6/script-reference/unityengine/rendering/rendertargetidentifier)): The source texture or [RenderTargetIdentifier](/engine/6000.6/script-reference/unityengine/rendering/rendertargetidentifier.md).**** (\[RenderTargetIdentifier]\(/engine/6000.6/script-reference/unityengine/rendering/rendertargetidentifier)): The destination [RenderTargetIdentifier](/engine/6000.6/script-reference/unityengine/rendering/rendertargetidentifier.md).**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): The element in the source texture to copy from, for example the texture in a texture array. You can't use `sourceDepthSlice` to specify a face in a Cubemap.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): The element in the destination texture to copy from, for example the texture in a texture array. You can't use `destDepthSlice` to specify a face in a Cubemap.

### Remarks

This method adds a command to copy pixel data from a texture on the GPU to a render texture on the GPU. This is one of the fastest ways to copy a texture.

When you use `Graphics.Blit`, Unity does the following:

1. Sets the [active render texture](/engine/6000.6/script-reference/unityengine/rendertexture/active.md) to the `dest` texture.
2. Passes `source` to the `mat` material as the `_MainTex` property.
3. Uses the material's shader to draw a full-screen surface from the `source` texture to the `dest` texture.

If you provide a `mat` material that doesn't have a `_MainTex` property, `Blit` doesn't use `source`.

You can use `Graphics.Blit` to create [post-processing effects](/engine/6000.6/manual/post-processing-and-full-screen-effects/overview.md), by setting `mat` to a material with a custom shader.

`Blit` changes [RenderTexture.active](/engine/6000.6/script-reference/unityengine/rendertexture/active.md). Store the active render texture before you use `Blit` if you need to use it afterwards.

Avoid setting `source` and `dest` to the same render texture, as this may cause undefined behaviour. Use [Custom Render Textures](/engine/6000.6/manual/materials-and-shaders/textures/textures-reference/class-custom-render-texture.md) with double buffering instead, or use two render textures and alternate between them to implement double buffering manually.

In linear color space, set [GL.sRGBWrite](/engine/6000.6/script-reference/unityengine/gl/srgbwrite.md) before using `Blit`, to make sure the sRGB-to-linear color conversion is what you expect.

To blit to the screen in the Built-in Render Pipeline, follow these steps:

1. Set `dest` to `null`. Unity now uses `Camera.main.targetTexture` as the destination texture.
2. Set the [Camera.targetTexture](/engine/6000.6/script-reference/unityengine/camera/targettexture.md) property of [Camera.main](/engine/6000.6/script-reference/unityengine/camera/main.md) to `null`.

To blit to the screen in the Universal Render Pipeline (URP) or the High Definition Render Pipeline (HDRP), you must call [Graphics.Blit](/engine/6000.6/script-reference/unityengine/graphics/blit.md) or [CommandBuffer.Blit](/engine/6000.6/script-reference/unityengine/rendering/commandbuffer/blit.md) inside a method that you call from the [RenderPipelineManager.endContextRendering](/engine/6000.6/script-reference/unityengine/rendering/renderpipelinemanager/endcontextrendering.md) callback.

If you want to use a depth or stencil buffer that is part of the `source` (Render)texture, or blit to a subregion of a texture, you have to manually write an equivalent of the [Graphics.Blit](/engine/6000.6/script-reference/unityengine/graphics/blit.md) function - i.e. [Graphics.SetRenderTarget](/engine/6000.6/script-reference/unityengine/graphics/setrendertarget.md) with destination color buffer and source depth buffer, setup orthographic projection ([GL.LoadOrtho](/engine/6000.6/script-reference/unityengine/gl/loadortho.md)), setup material pass ([Material.SetPass](/engine/6000.6/script-reference/unityengine/material/setpass.md)) and draw a quad ([GL.Begin](/engine/6000.6/script-reference/unityengine/gl/begin.md)).

Often the previous content of the Blit `dest` does not need to be preserved. In this case, it is recommended to activate the `dest` render target explicitly with the appropriate load and store actions using [CommandBuffer.SetRenderTarget](/engine/6000.6/script-reference/unityengine/rendering/commandbuffer/setrendertarget.md). The Blit dest should then be set to [BuiltinRenderTextureType.CurrentActive](/engine/6000.6/script-reference/unityengine/rendering/builtinrendertexturetype/currentactive.md).

Additional Resources: [Graphics.BlitMultiTap](/engine/6000.6/script-reference/unityengine/graphics/blitmultitap.md), [Post-processing effects](/engine/6000.6/manual/post-processing-and-full-screen-effects/overview.md).

## Blit(RenderTargetIdentifier, RenderTargetIdentifier, Vector2, Vector2, int, int)

Adds a command to use a shader to copy the pixel data from a texture into a render texture.

```csharp
public void Blit(RenderTargetIdentifier source, RenderTargetIdentifier dest, Vector2 scale, Vector2 offset, int sourceDepthSlice, int destDepthSlice)
```

### Parameters

**** (\[RenderTargetIdentifier]\(/engine/6000.6/script-reference/unityengine/rendering/rendertargetidentifier)): The source texture or [RenderTargetIdentifier](/engine/6000.6/script-reference/unityengine/rendering/rendertargetidentifier.md).**** (\[RenderTargetIdentifier]\(/engine/6000.6/script-reference/unityengine/rendering/rendertargetidentifier)): The destination [RenderTargetIdentifier](/engine/6000.6/script-reference/unityengine/rendering/rendertargetidentifier.md).**** (\[Vector2]\(/engine/6000.6/script-reference/unityengine/vector2)): The scale to apply.**** (\[Vector2]\(/engine/6000.6/script-reference/unityengine/vector2)): The offset to apply.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): The element in the source texture to copy from, for example the texture in a texture array. You can't use `sourceDepthSlice` to specify a face in a Cubemap.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): The element in the destination texture to copy from, for example the texture in a texture array. You can't use `destDepthSlice` to specify a face in a Cubemap.

### Remarks

This method adds a command to copy pixel data from a texture on the GPU to a render texture on the GPU. This is one of the fastest ways to copy a texture.

When you use `Graphics.Blit`, Unity does the following:

1. Sets the [active render texture](/engine/6000.6/script-reference/unityengine/rendertexture/active.md) to the `dest` texture.
2. Passes `source` to the `mat` material as the `_MainTex` property.
3. Uses the material's shader to draw a full-screen surface from the `source` texture to the `dest` texture.

If you provide a `mat` material that doesn't have a `_MainTex` property, `Blit` doesn't use `source`.

You can use `Graphics.Blit` to create [post-processing effects](/engine/6000.6/manual/post-processing-and-full-screen-effects/overview.md), by setting `mat` to a material with a custom shader.

`Blit` changes [RenderTexture.active](/engine/6000.6/script-reference/unityengine/rendertexture/active.md). Store the active render texture before you use `Blit` if you need to use it afterwards.

Avoid setting `source` and `dest` to the same render texture, as this may cause undefined behaviour. Use [Custom Render Textures](/engine/6000.6/manual/materials-and-shaders/textures/textures-reference/class-custom-render-texture.md) with double buffering instead, or use two render textures and alternate between them to implement double buffering manually.

In linear color space, set [GL.sRGBWrite](/engine/6000.6/script-reference/unityengine/gl/srgbwrite.md) before using `Blit`, to make sure the sRGB-to-linear color conversion is what you expect.

To blit to the screen in the Built-in Render Pipeline, follow these steps:

1. Set `dest` to `null`. Unity now uses `Camera.main.targetTexture` as the destination texture.
2. Set the [Camera.targetTexture](/engine/6000.6/script-reference/unityengine/camera/targettexture.md) property of [Camera.main](/engine/6000.6/script-reference/unityengine/camera/main.md) to `null`.

To blit to the screen in the Universal Render Pipeline (URP) or the High Definition Render Pipeline (HDRP), you must call [Graphics.Blit](/engine/6000.6/script-reference/unityengine/graphics/blit.md) or [CommandBuffer.Blit](/engine/6000.6/script-reference/unityengine/rendering/commandbuffer/blit.md) inside a method that you call from the [RenderPipelineManager.endContextRendering](/engine/6000.6/script-reference/unityengine/rendering/renderpipelinemanager/endcontextrendering.md) callback.

If you want to use a depth or stencil buffer that is part of the `source` (Render)texture, or blit to a subregion of a texture, you have to manually write an equivalent of the [Graphics.Blit](/engine/6000.6/script-reference/unityengine/graphics/blit.md) function - i.e. [Graphics.SetRenderTarget](/engine/6000.6/script-reference/unityengine/graphics/setrendertarget.md) with destination color buffer and source depth buffer, setup orthographic projection ([GL.LoadOrtho](/engine/6000.6/script-reference/unityengine/gl/loadortho.md)), setup material pass ([Material.SetPass](/engine/6000.6/script-reference/unityengine/material/setpass.md)) and draw a quad ([GL.Begin](/engine/6000.6/script-reference/unityengine/gl/begin.md)).

Often the previous content of the Blit `dest` does not need to be preserved. In this case, it is recommended to activate the `dest` render target explicitly with the appropriate load and store actions using [CommandBuffer.SetRenderTarget](/engine/6000.6/script-reference/unityengine/rendering/commandbuffer/setrendertarget.md). The Blit dest should then be set to [BuiltinRenderTextureType.CurrentActive](/engine/6000.6/script-reference/unityengine/rendering/builtinrendertexturetype/currentactive.md).

Additional Resources: [Graphics.BlitMultiTap](/engine/6000.6/script-reference/unityengine/graphics/blitmultitap.md), [Post-processing effects](/engine/6000.6/manual/post-processing-and-full-screen-effects/overview.md).

## Blit(RenderTargetIdentifier, RenderTargetIdentifier, Material, int, int)

Adds a command to use a shader to copy the pixel data from a texture into a render texture.

```csharp
public void Blit(RenderTargetIdentifier source, RenderTargetIdentifier dest, Material mat, int pass, int destDepthSlice)
```

### Parameters

**** (\[RenderTargetIdentifier]\(/engine/6000.6/script-reference/unityengine/rendering/rendertargetidentifier)): The source texture or [RenderTargetIdentifier](/engine/6000.6/script-reference/unityengine/rendering/rendertargetidentifier.md).**** (\[RenderTargetIdentifier]\(/engine/6000.6/script-reference/unityengine/rendering/rendertargetidentifier)): The destination [RenderTargetIdentifier](/engine/6000.6/script-reference/unityengine/rendering/rendertargetidentifier.md).**** (\[Material]\(/engine/6000.6/script-reference/unityengine/material)): The material to use. If you don't provide `mat`, Unity uses a default material.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): If the value is `-1`, Unity draws all the passes in `mat`. Otherwise, Unity draws only the pass you set `pass` to. The default value is `-1`.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): The element in the destination texture to copy from, for example the texture in a texture array. You can't use `destDepthSlice` to specify a face in a Cubemap.

### Remarks

This method adds a command to copy pixel data from a texture on the GPU to a render texture on the GPU. This is one of the fastest ways to copy a texture.

When you use `Graphics.Blit`, Unity does the following:

1. Sets the [active render texture](/engine/6000.6/script-reference/unityengine/rendertexture/active.md) to the `dest` texture.
2. Passes `source` to the `mat` material as the `_MainTex` property.
3. Uses the material's shader to draw a full-screen surface from the `source` texture to the `dest` texture.

If you provide a `mat` material that doesn't have a `_MainTex` property, `Blit` doesn't use `source`.

You can use `Graphics.Blit` to create [post-processing effects](/engine/6000.6/manual/post-processing-and-full-screen-effects/overview.md), by setting `mat` to a material with a custom shader.

`Blit` changes [RenderTexture.active](/engine/6000.6/script-reference/unityengine/rendertexture/active.md). Store the active render texture before you use `Blit` if you need to use it afterwards.

Avoid setting `source` and `dest` to the same render texture, as this may cause undefined behaviour. Use [Custom Render Textures](/engine/6000.6/manual/materials-and-shaders/textures/textures-reference/class-custom-render-texture.md) with double buffering instead, or use two render textures and alternate between them to implement double buffering manually.

In linear color space, set [GL.sRGBWrite](/engine/6000.6/script-reference/unityengine/gl/srgbwrite.md) before using `Blit`, to make sure the sRGB-to-linear color conversion is what you expect.

To blit to the screen in the Built-in Render Pipeline, follow these steps:

1. Set `dest` to `null`. Unity now uses `Camera.main.targetTexture` as the destination texture.
2. Set the [Camera.targetTexture](/engine/6000.6/script-reference/unityengine/camera/targettexture.md) property of [Camera.main](/engine/6000.6/script-reference/unityengine/camera/main.md) to `null`.

To blit to the screen in the Universal Render Pipeline (URP) or the High Definition Render Pipeline (HDRP), you must call [Graphics.Blit](/engine/6000.6/script-reference/unityengine/graphics/blit.md) or [CommandBuffer.Blit](/engine/6000.6/script-reference/unityengine/rendering/commandbuffer/blit.md) inside a method that you call from the [RenderPipelineManager.endContextRendering](/engine/6000.6/script-reference/unityengine/rendering/renderpipelinemanager/endcontextrendering.md) callback.

If you want to use a depth or stencil buffer that is part of the `source` (Render)texture, or blit to a subregion of a texture, you have to manually write an equivalent of the [Graphics.Blit](/engine/6000.6/script-reference/unityengine/graphics/blit.md) function - i.e. [Graphics.SetRenderTarget](/engine/6000.6/script-reference/unityengine/graphics/setrendertarget.md) with destination color buffer and source depth buffer, setup orthographic projection ([GL.LoadOrtho](/engine/6000.6/script-reference/unityengine/gl/loadortho.md)), setup material pass ([Material.SetPass](/engine/6000.6/script-reference/unityengine/material/setpass.md)) and draw a quad ([GL.Begin](/engine/6000.6/script-reference/unityengine/gl/begin.md)).

Often the previous content of the Blit `dest` does not need to be preserved. In this case, it is recommended to activate the `dest` render target explicitly with the appropriate load and store actions using [CommandBuffer.SetRenderTarget](/engine/6000.6/script-reference/unityengine/rendering/commandbuffer/setrendertarget.md). The Blit dest should then be set to [BuiltinRenderTextureType.CurrentActive](/engine/6000.6/script-reference/unityengine/rendering/builtinrendertexturetype/currentactive.md).

Additional Resources: [Graphics.BlitMultiTap](/engine/6000.6/script-reference/unityengine/graphics/blitmultitap.md), [Post-processing effects](/engine/6000.6/manual/post-processing-and-full-screen-effects/overview.md).
