使用 ScriptableRenderFeature API 可将可编程渲染通道插入到通用渲染管线 (URP) 的帧渲染循环中。
请遵循以下步骤:
创建一个新的 C# 脚本。
将代码替换为继承自 ScriptableRendererFeature 类的类。
using UnityEngine;
using UnityEngine.Rendering.Universal;
public class MyRendererFeature : ScriptableRendererFeature
{
}
在该类中,重写 Create 方法。例如:
public override void Create()
{
}
URP 会在以下事件中调用 Create 方法:
在 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;
}
需要重写 AddRenderPasses 方法。
public override void AddRenderPasses(ScriptableRenderer renderer, ref RenderingData renderingData)
{
}
URP 每帧调用 AddRenderPasses 方法,每个摄像机调用一次。
使用 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);
}
}