Write a Scriptable Render Pass in URP
To create a Scriptable Render Pass in the Universal Render Pipeline (URP), follow these steps:
- Create a C# script that inherits the - ScriptableRenderPassclass. For example:- using UnityEngine.Rendering; using UnityEngine.Rendering.Universal; public class ExampleRenderPass : ScriptableRenderPass { }
- In the class, add variables for the materials and textures you use in the render pass. - For example, the following code sets up a handle to a texture, and a descriptor to configure the texture. - private RTHandle textureHandle; private RenderTextureDescriptor textureDescriptor;
- Override the - Configuremethod to set up the render pass. Unity calls this method before executing the render pass.- For example: - public override void Configure(CommandBuffer cmd, RenderTextureDescriptor cameraTextureDescriptor) { //Set the texture size to be the same as the camera target size. textureDescriptor.width = cameraTextureDescriptor.width; textureDescriptor.height = cameraTextureDescriptor.height; //Check if the descriptor has changed, and reallocate the texture handle if necessary. RenderingUtils.ReAllocateIfNeeded(ref textureHandle, textureDescriptor); }
- Override the - Executemethod with your rendering commands. Unity calls this method every frame, once for each camera.- For example: - public override void Execute(ScriptableRenderContext context, ref RenderingData renderingData) { // Get a CommandBuffer from pool CommandBuffer cmd = CommandBufferPool.Get(); // Add rendering commands to the CommandBuffer ... // Execute the command buffer and release it back to the pool context.ExecuteCommandBuffer(cmd); CommandBufferPool.Release(cmd); }
Inject a render pass into the render loop
To inject a render pass into the render loop, refer to the following:
For a complete example, refer to Example of a complete Scriptable Renderer Feature.