| 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 会执行以下操作
dest 纹理。source 作为 _MainTex 属性传递给 mat 材质。source 纹理绘制全屏表面到 dest 纹理。如果您提供的 mat 材质没有 _MainTex 属性,则 Blit 不会使用 source。
您可以使用 Graphics.Blit 创建 后期处理效果,方法是将 mat 设置为具有自定义着色器的材质。Blit 会更改 RenderTexture.active。如果您需要在之后使用活动渲染纹理,请在使用 Blit 之前存储它。
避免将 source 和 dest 设置为相同的渲染纹理,因为这可能会导致未定义的行为。请改用具有双缓冲的 自定义渲染纹理,或者使用两个渲染纹理并在它们之间交替以手动实现双缓冲。
在线性颜色空间中,在使用 Blit 之前设置 GL.sRGBWrite,以确保 sRGB 到线性的颜色转换符合您的预期。
要在内置渲染管线中将内容绘制到屏幕上,请按照以下步骤操作
dest 设置为 null。Unity 现在使用 Camera.main.targetTexture 作为目标纹理。null。要在通用渲染管线 (URP) 或高清渲染管线 (HDRP) 中将内容绘制到屏幕上,您必须在从 RenderPipelineManager.endContextRendering 回调调用的方法中调用 Graphics.Blit 或 CommandBuffer.Blit。
如果要使用作为 source(渲染)纹理一部分的深度或模板缓冲区,或绘制到纹理的子区域,则必须手动编写等效于 Graphics.Blit 函数的内容 - 即使用目标颜色缓冲区和源深度缓冲区进行 Graphics.SetRenderTarget,设置正交投影 (GL.LoadOrtho),设置材质通道 (Material.SetPass) 并绘制一个四边形 (GL.Begin)。
通常,Blit dest 的先前内容不需要保留。在这种情况下,建议使用适当的加载和存储操作使用 SetRenderTarget 显式激活 dest 渲染目标。然后,Blit dest 应设置为 BuiltinRenderTextureType.CurrentActive。
其他资源:Graphics.BlitMultiTap、后期处理效果。