Quick answer: Scene view → Effects dropdown → tick Animated Materials. Prefab thumbnails render only a single frame and never animate; that’s expected. For deterministic time, expose a Custom Time property and SetVector from script.
Time node feeds a sine driving an emissive pulse. Game view: pulses correctly. Scene view: stuck on whatever value Time happened to be. Prefab thumbnail: stuck on a different value. Three views, three behaviors, two fixes.
The Symptom
Shader Graph using a Time node animates correctly in Play Mode and Game view, but Scene view shows it frozen. Prefab thumbnails in Project window show the material lit but unanimated. Editor previews of the shader show motion.
What Causes This
Three different rendering paths handle Time differently:
- Game view ticks Time every frame in Play Mode.
- Scene view ticks Time only if Animated Materials is enabled.
- Prefab thumbnails render once at icon creation and never re-render.
- Shader Graph preview window ticks Time always.
The Fix
For Scene view: Open the Scene view. Click the Effects dropdown (the gizmo at the top right of the Scene view toolbar). Tick “Animated Materials.” Time now ticks in Scene view. Behavior persists per Scene window.
For prefab thumbnails: Accept that they’re a single-frame snapshot. To preview the animation in the project, drag the prefab into the open Scene and view it there with Animated Materials on.
Custom Time for Determinism
Built-in _Time is global and starts at scene load. For replays, networked games, or animations that must sync across machines, drive Time yourself.
In Shader Graph: add a Vector4 property named _CustomTime (or anything). In the graph, replace the Time node with this property. Time.x = elapsed seconds, .y = sin, .z = cos, .w = delta — or just use .x.
From script:
public class DriveShaderTime : MonoBehaviour
{
public Renderer rnd;
private MaterialPropertyBlock _mpb;
private static readonly int _id = Shader.PropertyToID("_CustomTime");
void Start() { _mpb = new MaterialPropertyBlock(); }
void Update()
{
var t = MyGameClock.NetworkTime;
_mpb.SetVector(_id, new Vector4(t, Mathf.Sin(t), Mathf.Cos(t), Time.deltaTime));
rnd.SetPropertyBlock(_mpb);
}
}
Now the shader sees your clock, not Unity’s, and pause/replay/scrub work correctly.
Verifying
Scene view with Animated Materials on: pulses visible. Without: frozen. Game view with the script: pulses match your clock. Pause your clock; pulses freeze.
“Animated Materials for Scene. Custom Time for everything else. Thumbnails are a snapshot, not a preview.”
Related Issues
For Shader Graph not updating in build, see build shader updates. For shader properties not applying, see exposed property.
Animated Materials. Custom Time when it matters. Thumbnails stay still.