### Godot version

v4.1.1.stable.official [bd6af8e0e]

### System information

Windows 10.0.22621 - Vulkan (Forward+) - dedicated NVIDIA GeForce GTX 1650 SUPER (NVIDIA; 31.0.15.3130) - Intel(R) Core(TM) i5-10400F CPU @ 2.90GHz (12 Threads)

### Issue description

I think I found a bug in the particle shader. It revolves around the following line:

```
// apply linear acceleration
force += length(VELOCITY) > 0.0 ? normalize(VELOCITY) * tex_linear_accel * mix(linear_accel_min, linear_accel_max, rand_from_seed(alt_seed)) : vec3(0.0);

```
As long as VELOCITY is greater than 0, "rand_from_seed(alt_seed)" is called among other things. Thereby "alt_seed" is changed.
But if now damping is active, VELOCITY reaches 0 at some point. Then "rand_from_seed(alt_seed)" is NOT called anymore.
That means: all following random values, which depend on "rand_from_seed()", change once abruptly.


### Steps to reproduce

The error probably manifests itself in very different ways. As soon as damping brings the speed to 0, there will be one-time jumpy changes in all aspects that use edge_fom_seed:

- radial acceleration
- tangential acceleration
- orbit velocity
- damping
- angular velocity
- animation offset and speed
- hue

### Minimal reproduction project

N/A
code += "		dot(delta - vec4(0.0, 1.0, 0.0, 0.0), grad_0100), dot(delta - vec4(1.0, 1.0, 0.0, 0.0), grad_1100));\n";
		code += "	vec4 result_4567 = vec4(\n";
		code += "		dot(delta - vec4(0.0, 0.0, 1.0, 0.0), grad_0010), dot(delta - vec4(1.0, 0.0, 1.0, 0.0), grad_1010),\n";
		code += "		dot(delta - vec4(0.0, 1.0, 1.0, 0.0), grad_0110), dot(delta - vec4(1.0, 1.0, 1.0, 0.0), grad_1110));\n";
		code += "	vec4 result_89AB = vec4(\n";
		code += "		dot(delta - vec4(0.0, 0.0, 0.0, 1.0), grad_0001), dot(delta - vec4(1.0, 0.0, 0.0, 1.0), grad_1001),\n";
		code += "		dot(delta - vec4(0.0, 1.0, 0.0, 1.0), grad_0101), dot(delta - vec4(1.0, 1.0, 0.0, 1.0), grad_1101));\n";
		code += "	vec4 result_CDEF = vec4(\n";
		code += "		dot(delta - vec4(0.0, 0.0, 1.0, 1.0), grad_0011), dot(delta - vec4(1.0, 0.0, 1.0, 1.0), grad_1011),\n";
		code += "		dot(delta - vec4(0.0, 1.0, 1.0, 1.0), grad_0111), dot(delta - vec4(1.0, 1.0, 1.0, 1.0), grad_1111));\n\n";
		code += "	vec4 fade = delta * delta * delta * (10.0 + delta * (-15.0 + delta * 6.0));\n";
		code += "	vec4 result_W0 = mix(result_0123, result_89AB, fade.w), result_W1 = mix(result_4567, result_CDEF, fade.w);\n";
		code += "	vec4 result_WZ = mix(result_W0, result_W1, fade.z);\n";
		code += "	vec2 result_WZY = mix(result_WZ.xy, result_WZ.zw, fade.y);\n";
		code += "	return mix(result_WZY.x, result_WZY.y, fade.x);\n";
		code += "}\n\n";
		code += "// Curl 3D and three-noise function with friendly permission by Isaac Cohen.\n";
		code += "// Modified to accept 4D noise.\n";
		code += "vec3 noise_3x(vec4 p) {\n";
		code += "	float s = noise(p);\n";
		code += "	float s1 = noise(p + vec4(vec3(0.0), 1.7320508 * 2048.333333));\n";
		code += "	float s2 = noise(p - vec4(vec3(0.0), 1.7320508 * 2048.333333));\n";
		code += "	vec3 c = vec3(s, s1, s2);\n";
		code += "	return c;\n";
		code += "}\n";
		code += "vec3 curl_3d(vec4 p, float c) {\n";
		code += "	float epsilon = 0.001 + c;\n";
		code += "	vec4 dx = vec4(epsilon, 0.0, 0.0, 0.0);\n";
		code += "	vec4 dy = vec4(0.0, epsilon, 0.0, 0.0);\n";
		code += "	vec4 dz = vec4(0.0, 0.0, epsilon, 0.0);\n";