Rendering in the Universal Render Pipeline
The Universal Render Pipeline (URP) renders scenes using the following components:
- URP Renderer. URP contains the following Renderers:
- Shading models for shaders shipped with URP
- Camera
- URP Asset
The following illustration shows the frame rendering loop of the URP Universal Renderer.
When the render pipeline is active in Graphics Settings, Unity uses URP to render all Cameras in your Project, including game and Scene view cameras, Reflection Probes, and the preview windows in your Inspectors.
The URP renderer executes a Camera loop for each Camera, which performs the following steps:
- Culls rendered objects in your scene
- Builds data for the renderer
- Executes a renderer that outputs an image to the framebuffer.
For more information about each step, refer to Camera loop.
In the RenderPipelineManager class, URP provides events that you can use to execute code before and after rendering a frame, and before and after rendering each Camera loop. The events are:
For the example of how to use the beginCameraRendering event, refer to Inject a render pass via scripting.
Camera loop
The Camera loop performs the following steps:
Step | Description |
---|---|
Setup Culling Parameters | Configures parameters that determine how the culling system culls Lights and shadows. You can override this part of the render pipeline with a custom renderer. |
Culling | Uses the culling parameters from the previous step to compute a list of visible renderers, shadow casters, and Lights that are visible to the Camera. Culling parameters and Camera layer distances affect culling and rendering performance. |
Build Rendering Data | Catches information based on the culling output, quality settings from the URP Asset, Camera, and the current running platform to build the RenderingData . The rendering data tells the renderer the amount of rendering work and quality required for the Camera and the currently chosen platform. |
Setup Renderer | Builds a list of render passes, and queues them for execution according to the rendering data. You can override this part of the render pipeline with a custom renderer. |
Execute Renderer | Executes each render pass in the queue. The renderer outputs the Camera image to the framebuffer. |