版本: Unity 6 (6000.0)
语言英语
  • C#

Graphics.Blit

建议更改

成功!

感谢您帮助我们提高 Unity 文档的质量。虽然我们无法接受所有提交内容,但我们确实会阅读用户提出的每项建议更改,并在适用的情况下进行更新。

关闭

提交失败

由于某种原因,您的建议更改无法提交。请<a>稍后重试</a>。感谢您抽出时间帮助我们提高 Unity 文档的质量。

关闭

取消

声明

public static void Blit(Texture source, Material mat, int pass = -1);

声明

public static void Blit(Texture source, Material mat, int pass, int destDepthSlice);

声明

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, RenderTexture dest, Vector2 scale, Vector2 offset);

声明

public static void Blit(Texture source, RenderTexture dest, int sourceDepthSlice, int destDepthSlice);

声明

public static void Blit(Texture source, RenderTexture dest, Vector2 scale, Vector2 offset, int sourceDepthSlice, int destDepthSlice);

声明

public static void Blit(Texture source, Rendering.GraphicsTexture dest);

声明

public static void Blit(Texture source, Rendering.GraphicsTexture dest, Material mat, int pass = -1);

声明

public static void Blit(Texture source, Rendering.GraphicsTexture dest, Vector2 scale, Vector2 offset);

声明

public static void Blit(Texture source, Rendering.GraphicsTexture dest, int sourceDepthSlice, int destDepthSlice);

声明

public static void Blit(Texture source, Rendering.GraphicsTexture dest, Vector2 scale, Vector2 offset, int sourceDepthSlice, int destDepthSlice);

参数

source 源纹理。
dest 目标 RenderTextureGraphicsTexture
mat 要使用的材质。如果您不提供 mat,Unity 会使用默认材质。
pass 如果值为 -1,Unity 会绘制 mat 中的所有通道。否则,Unity 只会绘制您将 pass 设置为的通道。默认值为 -1
scale 要应用的缩放比例。
offset 要应用的偏移量。
sourceDepthSlice 要从中复制的源纹理中的元素,例如纹理数组中的纹理。您不能使用 sourceDepthSlice 指定立方体贴图中的面。
destDepthSlice 要从中复制的目标纹理中的元素,例如纹理数组中的纹理。您不能使用 destDepthSlice 指定立方体贴图中的面。

描述

使用着色器将纹理中的像素数据复制到渲染目标中。

此方法将 GPU 上纹理中的像素数据复制到 GPU 上的渲染纹理或图形纹理。这是复制纹理的最快方式之一。

当您使用 Graphics.Blit 时,Unity 会执行以下操作

  1. 将活动渲染目标设置为 dest 纹理。(请参阅 RenderTexture.activeGraphicsTexture.active。)
  2. source 作为 _MainTex 属性传递给 mat 材质。
  3. 使用材质的着色器从 source 纹理绘制一个全屏表面到 dest 纹理。

如果您提供的 mat 材质没有 _MainTex 属性,Blit 不会使用 source。如果您提供一个 GraphicsTexture 作为 dest,它必须在 GraphicsTextureDescriptor.flags 中启用 GraphicsTextureDescriptorFlags.RenderTarget

您可以使用 Graphics.Blit 创建 后期处理效果,方法是将 mat 设置为具有自定义着色器的材质。

Blit 会更改 RenderTexture.activeGraphicsTexture.active。如果您需要在之后使用活动渲染目标,请在使用 Blit 之前存储它。

避免将 sourcedest 设置为相同的纹理,因为这可能会导致未定义的行为。请改用具有双缓冲的 自定义渲染纹理,或使用两个渲染纹理并在它们之间交替以手动实现双缓冲。

在线性颜色空间中,在使用 Blit 之前设置 GL.sRGBWrite,以确保 sRGB 到线性颜色转换符合您的预期。

要在内置渲染管线中将内容绘制到屏幕上,请执行以下步骤

  1. dest 设置为 null。Unity 现在会使用 Camera.main.targetTexture 作为目标纹理。
  2. Camera.targetTexture 属性设置为 null

要在通用渲染管线 (URP) 或高清渲染管线 (HDRP) 中将内容绘制到屏幕上,您必须在从 RenderPipelineManager.endContextRendering 回调中调用的方法内调用 Graphics.BlitCommandBuffer.Blit

如果您想使用 source(渲染)纹理的一部分的深度或模板缓冲区,或将内容绘制到纹理的子区域,您必须手动编写 Graphics.Blit 函数的等效项,即使用目标颜色缓冲区和源深度缓冲区设置 Graphics.SetRenderTarget,设置正交投影(GL.LoadOrtho),设置材质通道(Material.SetPass)并绘制一个四边形(GL.Begin)。

其他资源:Graphics.BlitMultiTap后期处理效果

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