Configure BIRP for Tick UI¶
Configure the Built-in render pipeline integration so Tick UI attaches to the camera correctly. This page covers the BIRP-specific configuration beyond the basic Inspector setup shown in Set up Tick UI.
This page assumes you have already installed Tick UI and completed the basic setup.
To configure BIRP for Tick UI¶
- Confirm the project is on Built-in.
TICK_URPshould not be defined. Check Project Settings > Player > Other Settings > Scripting Define Symbols for the active platform. - Attach
TickBIRPInjectorto the camera GameObject and put yourBaseGameUIsubclass on the same GameObject. The component requires aCamera([RequireComponent(typeof(Camera))]) and finds the recorder viaGetComponent<TickRecorder>()on the same GameObject. If you have multiple cameras, attach the pair to the camera responsible for the HUD. - Choose the Camera Event that matches your usage.
The default
AfterEverythingputs Tick UI on top of all camera output. Earlier events change where the UI sits in the per-camera command-buffer order.
Choose the Camera Event¶
CameraEvent controls where the Tick UI command buffer runs
in the per-camera frame. Common choices:
| Event | Effect |
|---|---|
AfterEverything (default) |
UI draws on top of the final camera output. Best for HUDs. |
AfterImageEffects |
UI draws after image effects. Functionally similar to AfterEverything for most projects. |
BeforeImageEffects |
UI draws before image effects. Effects (bloom, tone-mapping) apply to the UI. |
AfterDepthTexture |
UI draws after the depth texture is generated. Use when a custom shader needs depth. |
Most projects keep the default. Adjust only when image effects need to apply to the UI, or when a custom rendering setup needs the UI in a specific slot.
Camera-target combinations¶
TickBIRPInjector adds its CommandBuffer to one camera at a
time, and the buffer writes into that camera's currently bound
target.
- Single display camera. Common case. The buffer's render target is the screen. Layout and clipping work in screen pixels.
- Camera with viewport rect. The camera renders into a
sub-rect of the screen. The injector forwards the camera's
pixelWidth/pixelHeight, which reflect the viewport, so the UI positions against the viewport rather than the full screen. - Camera renders to a
RenderTexture. The buffer's target is the RenderTexture. The injector forwards the camera'spixelWidth/pixelHeightand flags the target as off-screen, so the UI positions correctly even when the texture's dimensions differ from the screen. - Multiple cameras. Attach the injector to the camera you want the UI on. Other cameras render normally without the UI.
For the model behind pixel-coordinate handling, refer to Render pipelines.
Troubleshooting¶
Nothing renders.
: The BaseGameUI subclass and the TickBIRPInjector are on
different GameObjects, or the host GameObject has no Camera.
The injector finds the recorder via
GetComponent<TickRecorder>() on the same GameObject and
requires a Camera. Check both.
Scissor is wrong, or scissor leaks across frames.
: The clip stack is unbalanced inside DoUI. Run with the
TICK_DEBUGGER define and check for stack-leak asserts at
end of frame. Refer to Stacks.
UI renders twice.
: Two cameras both have an TickBIRPInjector. Attach the
injector to one camera only.
Additional resources¶
- Configure URP: the equivalent procedure for Universal Render Pipeline.
- Render pipelines: the model behind both integrations.
- Render pipeline support: the matrix of supported features.
- Build a custom integration: for non-URP and non-BIRP pipelines.