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

CommandBuffer.Blit

建议更改

成功!

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

关闭

提交失败

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

关闭

取消

声明

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

声明

public void Blit(Texture source, Rendering.RenderTargetIdentifier dest, Material mat);

声明

public void Blit(Texture source, Rendering.RenderTargetIdentifier dest, Material mat, int pass);

声明

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

声明

public void Blit(Rendering.RenderTargetIdentifier source, Rendering.RenderTargetIdentifier dest, Material mat, int pass);

声明

public void Blit(Rendering.RenderTargetIdentifier source, Rendering.RenderTargetIdentifier dest, Vector2 scale, Vector2 offset);

声明

public void Blit(Rendering.RenderTargetIdentifier source, Rendering.RenderTargetIdentifier dest, int sourceDepthSlice, int destDepthSlice);

声明

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

声明

public void Blit(Rendering.RenderTargetIdentifier source, Rendering.RenderTargetIdentifier dest, Material mat, int pass, int destDepthSlice);

参数

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

描述

添加一个命令,使用着色器将像素数据从纹理复制到渲染纹理。

此方法添加一个命令,将 GPU 上纹理的像素数据复制到 GPU 上的渲染纹理。这是复制纹理最快的方法之一。

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

  1. 活动渲染纹理 设置为 dest 纹理。
  2. source 作为 _MainTex 属性传递给 mat 材质。
  3. 使用材质的着色器从 source 纹理绘制全屏表面到 dest 纹理。

如果您提供的 mat 材质没有 _MainTex 属性,则 Blit 不会使用 source

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

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

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

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

要在内置渲染管线中将内容绘制到屏幕上,请按照以下步骤操作

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

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

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

通常,Blit dest 的先前内容不需要保留。在这种情况下,建议使用适当的加载和存储操作使用 SetRenderTarget 显式激活 dest 渲染目标。然后,Blit dest 应设置为 BuiltinRenderTextureType.CurrentActive

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