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);

参数

source源纹理。
dest目标 RenderTexture。设置为 null 将直接对屏幕执行 blit 操作。有关更多信息,请参阅“说明”。
mat要使用的材质。例如,材质的着色器可以执行一些后期处理效果。
pass如果为 -1(默认值),绘制材质中的所有通道。否则,仅绘制给定通道。
offset应用于源纹理坐标的偏移。
scale应用于源纹理坐标的缩放。

描述

使用着色器将源纹理复制到目标渲染纹理。

主要用于实现 post-processing effects

Blit 将 dest 设置为渲染目标,在材质上设置 source _MainTex 属性, 并绘制全屏四边形。

如果 dest 为 /null/,则将屏幕后备缓冲区用作 blit 目标,除非主摄像机当前设置为渲染到 RenderTexture(即 Camera.main 具有非 null 的 targetTexture 属性)。如果是这种情况,blit 使用主摄像机的渲染目标作为目标。为确保 blit 的操作目标确实为屏幕后备缓冲区,在调用 Blit 前请务必将 /Camera.main.targetTexture/ 设置为 /null/。

注意,如果要使用作为 /source/(渲染)纹理一部分的深度或模板缓冲区, 您必须手动执行等同于 Blit 功能的操作 - 即使用目标颜色缓冲区和源深度缓冲区调用 Graphics.SetRenderTarget ,设置正交投影 (GL.LoadOrtho), 设置材质通道 (Material.SetPass) 并绘制一个四边形 (GL.Begin)。

请注意,在线性颜色空间中,设置正确的 sRGB<-> 线性颜色转换 状态非常重要。受之前渲染的内容的影响,当前状态可能不是您预期的状态。 您应考虑在执行 Blit 或任何其他手动渲染之前,将 GL.sRGBWrite 设置为 需要的值。

请注意,如果调用 Blit 时将 sourcedest 设置为相同的 RenderTexture,可能会导致未定义的行为。更好的方法是使用具有双缓冲的自定义渲染纹理,或使用两个 RenderTextures 并在它们之间交替以手动实现双缓冲。

另请参阅:Graphics.BlitMultiTapPost-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); } }