版本:Unity 6 (6000.0)
语言:English
URP 中的可脚本化的渲染特性的简介
将可脚本化的渲染特性应用于 URP 中的特定相机类型

在 URP 中创建可脚本化的渲染特性

使用ScriptableRenderFeature API 将可脚本化的渲染通道插入通用渲染管线一系列操作,将场景内容显示在屏幕上。Unity 允许您选择预构建的渲染管线,或编写您自己的渲染管线。 更多信息
参见术语表
(URP) 帧渲染循环。

按照以下步骤操作

  1. 创建一个新的 C# 脚本。

  2. 将代码替换为继承自ScriptableRendererFeature类的类。

    using UnityEngine;
    using UnityEngine.Rendering.Universal;
    
    public class MyRendererFeature : ScriptableRendererFeature
    {
    }
    
  3. 在类中,重写Create方法。例如

    public override void Create()
    {
    }
    

    URP 在以下事件中调用Create方法

    • 可脚本化的渲染特性首次加载时。
    • 启用或禁用可脚本化的渲染特性时。
    • 检视面板一个 Unity 窗口,显示有关当前选定的游戏对象、资源或项目设置的信息,允许您检查和编辑值。 更多信息
      参见术语表
      窗口中更改渲染特性的属性时。
  4. Create方法中,创建可脚本化的渲染通道的实例,并将其注入渲染器。

    例如,如果您有一个名为RedTintRenderPass的可脚本化的渲染通道

    // Define an instance of the Scriptable Render Pass
    private RedTintRenderPass redTintRenderPass;
    
    public override void Create()
    {
        // Create an instance of the Scriptable Render Pass
        redTintRenderPass = new RedTintRenderPass();
    
        // Inject the render pass after rendering the skybox
        redTintRenderPass.renderPassEvent = RenderPassEvent.AfterRenderingSkybox;
    }
    
  5. 重写AddRenderPasses方法。

    public override void AddRenderPasses(ScriptableRenderer renderer, ref RenderingData renderingData)
    {
    }
    

    URP 每一帧调用一次AddRenderPasses方法,每个相机一个组件,创建场景中特定视点的图像。输出要么绘制到屏幕上,要么捕获为纹理。 更多信息
    参见术语表
    调用一次。

  6. 使用EnqueuePass API 将可脚本化的渲染通道注入帧渲染循环。

    public override void AddRenderPasses(ScriptableRenderer renderer, ref RenderingData renderingData)
    {
        renderer.EnqueuePass(redTintRenderPass);
    }
    

您现在可以将可脚本化的渲染特性添加到活动的 URP 资源中。有关更多信息,请参阅如何将渲染特性添加到渲染器

示例

以下是可脚本化的渲染特性的完整示例代码,使用名为RedTintRenderPass的可脚本化的渲染通道。

using UnityEngine;
using UnityEngine.Rendering;
using UnityEngine.Rendering.Universal;

public class MyRendererFeature : ScriptableRendererFeature
{
    private RedTintRenderPass redTintRenderPass;

    public override void Create()
    {
        redTintRenderPass = new RedTintRenderPass();
        redTintRenderPass.renderPassEvent = RenderPassEvent.AfterRenderingSkybox;
    }

    public override void AddRenderPasses(ScriptableRenderer renderer, ref RenderingData renderingData)
    {
        renderer.EnqueuePass(redTintRenderPass);
    }
}
URP 中的可脚本化的渲染特性的简介
将可脚本化的渲染特性应用于 URP 中的特定相机类型