Use the ScriptableRenderFeature
API to insert a Scriptable Render Pass into the Universal Render PipelineA series of operations that take the contents of a Scene, and displays them on a screen. Unity lets you choose from pre-built render pipelines, or write your own. More info
See in Glossary (URP) frame rendering loop.
Follow these steps:
Create a new C# script.
Replace the code with a class that inherits from the ScriptableRendererFeature
class.
using UnityEngine;
using UnityEngine.Rendering.Universal;
public class MyRendererFeature : ScriptableRendererFeature
{
}
In the class, override the Create
method. For example:
public override void Create()
{
}
URP calls the Create
methods on the following events:
In the Create
method, create an instance of your Scriptable Render Pass, and inject it into the renderer.
For example, if you have a Scriptable Render Pass called 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;
}
Override the AddRenderPasses
method.
public override void AddRenderPasses(ScriptableRenderer renderer, ref RenderingData renderingData)
{
}
URP calls the AddRenderPasses
method every frame, once for each cameraA component which creates an image of a particular viewpoint in your scene. The output is either drawn to the screen or captured as a texture. More info
See in Glossary.
Use the EnqueuePass
API to inject the Scriptable Render Pass into the frame rendering loop.
public override void AddRenderPasses(ScriptableRenderer renderer, ref RenderingData renderingData)
{
renderer.EnqueuePass(redTintRenderPass);
}
You can now add the Scriptable Renderer Feature to the active URP asset. Refer to How to add a Renderer Feature to a Renderer for more information.
The following is the complete example code of a Scriptable Renderer Feature, using a Scriptable Render Pass called 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);
}
}