Write a Scriptable Render Pass in Compatibility Mode in URP
An example of creating a Scriptable Render Pass in Compatibility Mode.
Read time 2 minutesLast updated a month ago
To create a Scriptable Render Pass in the Universal Render Pipeline (URP), follow these steps:
-
Create a C# script that inherits theclass. For example:
ScriptableRenderPassusing 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 themethod to set up the render pass. Unity calls this method before executing the render pass.
ConfigureFor 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 themethod with your rendering commands. Unity calls this method every frame, once for each camera.
ExecuteFor 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 in Compatibility Mode, refer to the following:
For a complete example, refer to Example of a Scriptable Renderer Feature in Compatibility mode.