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、后期处理效果。