3.0 KiB
uid |
---|
urp-inject-a-pass-using-a-scriptable-renderer-feature |
Inject a render pass using a Scriptable Renderer Feature
Use the ScriptableRenderFeature
API to insert a Scriptable Render Pass into the Universal Render Pipeline (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:- When the Scriptable Renderer Feature loads the first time.
- When you enable or disable the Scriptable Renderer Feature.
- When you change a property in the Inspector window of the Renderer Feature.
-
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 camera. -
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.
Example
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);
}
}