Version: 2020.3
言語: 日本語
public static void Blit (Texture source, RenderTexture dest);
public static void Blit (Texture source, RenderTexture dest, Material mat, int pass= -1);
public static void Blit (Texture source, Material mat, int pass= -1);
public static void Blit (Texture source, RenderTexture dest, Vector2 scale, Vector2 offset);
public static void Blit (Texture source, RenderTexture dest, int sourceDepthSlice, int destDepthSlice);
public static void Blit (Texture source, Material mat, int pass, int destDepthSlice);
public static void Blit (Texture source, RenderTexture dest, Vector2 scale, Vector2 offset, int sourceDepthSlice, int destDepthSlice);

パラメーター

source ソーステクスチャ (コピー元のテクスチャ)
dest The destination RenderTexture. Set this to null to blit directly to screen. See description for more information.
mat 使用するマテリアル。たとえば、マテリアルのシェーダーはいくつかのエフェクトを後処理できます。
pass -1 (デフォルト) の場合、マテリアルのすべてのパスを描画します。そうでなければ、指定されたパスだけを描画します。
offset Offset applied to the source texture coordinate.
scale Scale applied to the source texture coordinate.
sourceDepthSlice The texture array source slice to perform the blit from.
destDepthSlice The texture array destination slice to perform the blit to.

説明

元のテクスチャをシェーダーでレンダリングするテクスチャへコピーします。

This is mostly used for implementing post-processing effects.

Blit sets dest as the render target, sets source _MainTex property on the material, and draws a full-screen quad.

If you are using the Built-in Render Pipeline, when dest is null, Unity uses the screen backbuffer as the blit destination. However, if the main camera is set to render to a RenderTexture (that is, if Camera.main has a non-null targetTexture property), the blit uses the render target of the main camera as destination. To ensure that the blit actually writes to the screen backbuffer, make sure to set /Camera.main.targetTexture/ to null before calling Blit.
If you are using a Scriptable Render Pipeline (like HDRP or Universal RP), to blit to the screen backbuffer using Graphics.Blit, you have to call Graphics.Blit from inside a method that you register as the RenderPipelineManager.endFrameRendering callback.

Note that if you want to use a depth or stencil buffer that is part of the source (Render)texture, you have to manually write an equivalent of the Graphics.Blit function - i.e. Graphics.SetRenderTarget with destination color buffer and source depth buffer, setup orthographic projection (GL.LoadOrtho), setup material pass (Material.SetPass) and draw a quad (GL.Begin).

Note that in Linear color space, it is important to have the correct sRGB<->Linear color conversion state set. Depending on what was rendered previously, the current state might not be the one you expect. You should consider setting GL.sRGBWrite as you need it before doing Blit or any other manual rendering.

Note that a call to Blit with source and dest set to the same RenderTexture may result in undefined behaviour. A better approach is to either use Custom Render Textures with double buffering, or use two RenderTextures and alternate between them to implement double buffering manually.

Graphics.Blit changes RenderTexture.active. Keep track of the previously active RenderTexture if you need to use it after calling Graphics.Blit.

See Also: Graphics.BlitMultiTap, Post-processing effects.

using UnityEngine;

public class Example : MonoBehaviour { // Copies aTexture to rTex and displays it in all cameras.

Texture aTexture; RenderTexture rTex;

void Start() { if (!aTexture || !rTex) { Debug.LogError("A texture or a render texture are missing, assign them."); } }

void Update() { Graphics.Blit(aTexture, rTex); } }