Quick answer: Godot CanvasLayer UI showing behind 3D objects? Set CanvasLayer.layer to a higher value than the 3D viewport’s default, and ensure the SubViewport canvas_item isn’t covering it.
A HUD CanvasLayer in a 3D scene renders behind the 3D content. Layer ordering or the SubViewport rendering setup is wrong.
Layer Number
CanvasLayer’s layer defaults to 1. Negative values draw below the world; positive above. Set layer = 10 for HUDs to stay clearly on top of game items at default 1.
SubViewport Containers
If the 3D world is in a SubViewportContainer (e.g. split-screen), the container’s own canvas item draws inside its own CanvasLayer. Place your HUD on a CanvasLayer that draws after the container.
FollowViewportEnable
For per-3D-camera UI (like nameplates), use CanvasLayer.follow_viewport_enable = true with a Camera3D referenced — the layer tracks the camera and renders above its viewport.
Verifying
HUD elements always render above 3D content, including transparent or post-processed effects.
“CanvasLayer.layer decides draw order. Bump it above any container layers.”
Number HUD CanvasLayers explicitly (10 for HUD, 20 for menus, 100 for tooltips) — sparse numbers leave room to insert later without renumbering everything.