Version: 6000.3
语言: 中文
适用于 URP 的可脚本渲染器功能 API 参考
在 URP 中将渲染通道限制为场景区域

在URP中通过脚本注入渲染通道

要将自定义渲染通道注入 Universal Rendering Pipeline (URP) 中的渲染循环,请订阅 RenderPipelineManager API 中的一个事件,并使用EnqueuePass应用程序接口。

例如,您可以将额外的摄像机渲染到渲染纹理(render texture)一种特殊类型的纹理,在运行时创建和更新。要使用它们,请先创建一个新的渲染纹理,并指定要渲染到其中的摄像机之一。然后,你可以在材质中使用渲染纹理,就像使用常规纹理一样。更多信息
请参阅术语表
,并将这些纹理用于平面反射或监视等效果相机在场景中创建特定视点图像的组件。输出要么绘制到屏幕上,要么作为纹理捕获。更多信息
请参阅术语表
视图。

注意RenderPipelineManager事件仅在摄像机处于活动状态时触发。

按着这些次序:

  1. 附加新的MonoBehaviour脚本到游戏对象Unity 场景中的基本对象,可以表示角色、道具、风景、相机、航路点等。游戏对象的功能由附加到它的组件定义。更多信息
    请参阅术语表
    ,然后创建自定义渲染通道的实例。例如:

    public class InjectPass : MonoBehaviour
    {
        // Declare a custom render pass
        private ExampleRenderPass exampleRenderPass;
    
        private void OnEnable()
        {
            // Create the custom render pass
            exampleRenderPass = new ExampleRenderPass(settings);
        }
    }
    

    有关编写渲染通道的更多信息,请参阅使用渲染图系统编写渲染通道

  2. 将一个方法订阅到RenderPipelineManager应用程序接口。例如:

        private void OnEnable()
        {
            ...
            // Call the InjectRenderPass method when the beginCameraRendering event is raised.
            RenderPipelineManager.beginCameraRendering += InjectRenderPass;            
        }
    
  3. 在订阅的方法中,使用EnqueuePassAPI 方法,将自定义渲染通道注入 URP 渲染循环。

    public class InjectPass : MonoBehaviour
    {
        ...
    
        // Add the method that Unity calls after the beginCameraRendering event is raised.
        // The method must accept the ScriptableRenderContext and Camera parameters the event delegate defines.
        private void InjectRenderPass(ScriptableRenderContext context, Camera cam)
        {
            ...
            // Use the EnqueuePass API to inject the custom render pass.
            cam.GetUniversalAdditionalCameraData().scriptableRenderer.EnqueuePass(exampleRenderPass);
        }
    }
    
  4. 取消订阅OnDisable方法。例如:

    public class InjectPass : MonoBehaviour
    {
        ...
    
        private void OnDisable()
        {
            RenderPipelineManager.beginCameraRendering -= InjectRenderPass;
        }
    }
    

其他资源

适用于 URP 的可脚本渲染器功能 API 参考
在 URP 中将渲染通道限制为场景区域