The `u_time` variable in shaders tells you the current time. However, if you reuse a shader (as is [best practice according to Apple](https://developer.apple.com/documentation/spritekit/skshader): "If multiple sprites need the same behavior, create one shader object and associate it with every sprite[…]"), then `u_time` continues counting from the *first* time it's added to a scene. This makes it difficult to use shaders to produce certain types of effects, such as a simple fade from black to white, as below:

```
void main() {
    float duration = 3.0; // seconds
    float progress = u_time / duration;

    gl_FragColor = vec4(progress, progress, progress, 1.0);
}

```

This shader works as intended the first time it's added to a sprite, as `u_time` starts from zero. However, subsequent reuses of the same shader code start with a non-zero `u_time`. And so, subsequent shaders will start fully white and not render the intended black-to-white fade. This seems to very much limit the possible utility of `SKShader`.