Quick answer: Godot 4 shader's render_priority not affecting draw order when objects on different CanvasLayers? CanvasLayer ordering trumps render_priority - work within one CanvasLayer.

Two objects with render_priority 0 and 10; on different CanvasLayers; layer ordering wins.

Same CanvasLayer

Move both to one layer; render_priority decides order.

Or use CanvasLayer for global order

CanvasLayer 0 = ground; 10 = UI. Within each, render_priority.

Audit per object

Each object's CanvasLayer; render_priority. Document.

“Render order has multiple axes. Higher beats lower.”

Document the CanvasLayer / render_priority hierarchy at the project level. The bug class is silent until you notice the order.

Related reading