Inject a render pass with a Scriptable Renderer Feature in URP
Write a class that inherits ScriptableRendererFeature, and use it to creates an instance of the custom render pass you created, and insert the custom render pass into the rendering pipeline.
阅读时间2 分钟最后更新于 24 天前
Use the API to insert a Scriptable Render Pass into the Universal Render Pipeline (URP) frame rendering loop.
ScriptableRenderFeatureFollow these steps:
-
Create a new C# script.
-
Replace the code with a class that inherits from theclass.
ScriptableRendererFeatureusing UnityEngine;using UnityEngine.Rendering.Universal;public class MyRendererFeature : ScriptableRendererFeature{} -
In the class, override themethod. For example:
Createpublic override void Create(){}URP calls themethods on the following events:Create- 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 window of the Renderer Feature.Inspector
?
-
In themethod, create an instance of your Scriptable Render Pass, and inject it into the renderer.
CreateFor example, if you have a Scriptable Render Pass called:RedTintRenderPass// Define an instance of the Scriptable Render Passprivate 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;}You can also use themethod to initialize any other resources the Scriptable Renderer Feature needs, such as materials.Create -
Override themethod.
AddRenderPassespublic override void AddRenderPasses(ScriptableRenderer renderer, ref RenderingData renderingData){}URP calls themethod every frame, once for each camera. Don't create or instantiate any resources within this method.AddRenderPasses -
Use theAPI to inject the Scriptable Render Pass into the frame rendering loop.
EnqueuePasspublic override void AddRenderPasses(ScriptableRenderer renderer, ref RenderingData renderingData){ renderer.EnqueuePass(redTintRenderPass);}To add a render pass to a specific camera only, use anstatement to check the camera type. For example:ifif (renderingData.cameraData.cameraType == CameraType.Game){ 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.
To dispose of any resources, override the method.
DisposeExample
For a complete example of a Scriptable Renderer Feature with a custom render pass that uses a material to blit, follow these steps:
- Import the URP render graph samples. For more information, refer to Importing a package sample in URP.
- In the Project window, go to Samples > Universal Render Pipeline > <your version> > URP RenderGraph Samples > BlitWithMaterial.