Quick answer: Godot 4 shader TIME stuck at zero when applied to a modulated CanvasItem? Modulate property animation interferes with shader time evaluation on some backends - use a custom uniform driven by _process.
Animated shader TIME drives a glow. Add modulate animation; glow freezes.
Drive a custom uniform
material.set_shader_parameter("u_time", time_acc)Increment in _process. Shader reads u_time; not TIME.
Or separate modulate from shader
Modulate via a parent CanvasModulate; shader on child. Separation avoids interference.
Test backends
Compatibility, Forward+. Sometimes the bug is backend-specific.
“TIME is engine state. Engine state can be unexpectedly reset.”
If your shader uses TIME, treat it as suspect. Custom uniforms are explicit; predictable.