source | 包含原图的 RenderTexture。 |
destination | 包含修改后图片的 RenderTexture。 |
在内建渲染管线中,Unity 会在相机完成渲染后对连接到同个 GameObject 的 相机 组件(已启用状态)的 MonoBehaviours 调用 OnRenderImage
。你可以使用 OnRenderImage
创建全屏后处理效果。这些效果的工作原理是:读取源图片中的像素,使用 Unity 着色器修改像素的外观,然后将结果渲染到目标图片中。你通常会使用 Graphics.Blit 来执行这些步骤。
如果同一相机上的多个脚本实现了 OnRenderImage
,Unity 会按照它们在相机检视器窗口中出现的顺序从上往下调用它们。一个操作的 destination
是下一个操作的 source
;在内部,Unity 会创建一个或多个临时渲染纹理来存储这些中间结果。
在 Android 设备上,为了避免条带化或在全屏效果中使用 Alpha 通道,请将 PlayerSettings.use32BitDisplayBuffer 设为 true
。
在可编程渲染管线中不支持 OnRenderImage
。要在通用渲染管线 (URP) 中创建自定义全屏效果,请使用 ScriptableRenderPass API。要在高精度渲染管线 (HDRP) 中创建自定义全屏效果,请使用 全屏自定义 Pass。
有关使用 Unity 的预构建后期处理效果的信息,请参见后期处理。
using UnityEngine;
public class ExampleClass : MonoBehaviour { // A Material with the Unity shader you want to process the image with public Material mat;
void OnRenderImage(RenderTexture src, RenderTexture dest) { // Read pixels from the source RenderTexture, apply the material, copy the updated results to the destination RenderTexture Graphics.Blit(src, dest, mat); } }