Quick answer: Godot shader TIME built-in stuck at zero? Either the engine is paused, the material is set to non-animated, or you’re sampling in a non-rendering context. Check process mode and material flags.

An ocean shader animates in the editor but flat-lines at runtime. TIME never advances. The scene is paused, or the material is being read in a context where TIME isn’t updated.

Pause Mode

If the scene is paused (get_tree().paused = true), TIME stops advancing for materials whose process mode is Pausable. Set the material owner’s process_mode = PROCESS_MODE_ALWAYS to keep it ticking.

Animated Flag

For CanvasItem materials, ensure the canvas item is in the active scene tree — TIME advances only for visible/processed items.

Use Custom Time

uniform float custom_time;
// drive it from _process:
material.set_shader_parameter("custom_time", t)

If you need explicit control (replay, slow-mo), drive your own time uniform.

Verifying

The shader animates whenever you expect — through pauses, in custom contexts — without surprise stalls.

“TIME depends on engine state. For predictable animation, drive a custom_time uniform.”

Custom time uniforms also make your shaders deterministic in replays and recordings — worth the small uniform cost.