Compositor layers
Updated: Apr 8, 2026
Compositor layers allow you to render crisper, easier-to-read textures at the frame rate of the compositor — which is always greater than or equal to the frame rate of your application. By using compositor layers for text and user interfaces, you can achieve high clarity even with smaller fonts and UI elements.
When to use compositor layers
- Text, user interfaces, and videos — Sharper textures allow smaller font sizes and UI elements while remaining readable. Use cylinder slices to create large, curved UIs.
- Gaze cursors and crosshairs — Textures intended to be the focal objects in your scene.
- Loading screens — Compositor layer elements always appear to update at full frame rate, even when the application fails to submit frames on time.
Why compositor layers are sharper
In the standard rendering pipeline, a texture is sampled twice: once when rendered into the eye buffer, and again when the compositor distorts the eye buffer for the display. Each round of sampling adds blur.
Compositor layers skip the first sampling step. The compositor renders the texture directly to the distorted screen output using a special vertex shader, resulting in only one round of sampling. This provides:
- Sharper textures — Skipping a layer of sampling preserves the original quality.
- Independent frame rate — Layers render at the compositor’s frame rate, independent of your app’s render performance.
Compositor layers support a predefined set of shapes: quad, cylinder, and cubemap. You can transform these shapes arbitrarily, but you cannot control the pixel shader — your texture is rendered with no lighting or effects. You can bake lighting and effects into the texture and update it per frame if needed.
Compositor layers can be rendered as overlays (on top of your scene) or underlays (visible only where your eye buffer alpha is set to 0).
Engine-specific implementation