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