Random loop
By Ayfri
Common
precision highp float;
float seed = 0.0;
void setSeed(float s) {
seed = s;
}
// Hash pseudo-aléatoire classique, opti pour WebGL1
float hash(float s) {
return fract(sin(s * 12.9898) * 43758.5453);
}
// Pas besoin de randI ou randS séparés ici, on reste sur du float pur
float rand() {
seed += 1.0; // Décale la seed pour le prochain appel
return hash(seed);
}
#define setSeed(arg) setSeed(arg)
#define setNSeed() setSeed(uResolution.x * fragCoord.y + fragCoord.x + mod(uTime * 1000.0, 1000.0))
Image
precision highp float;
uniform float uTime;
void main() {
// La taille du bloc (le scale du zoom)
float pixelSize = max(1.0, (cos(uTime * 0.5) + 1.0) * 20.0);
// On crée la grille : tous les fragments d'un même gros pixel auront la même gridPos
vec2 gridPos = floor(gl_FragCoord.xy / pixelSize);
// On calcule la seed avec la position sur la grille et le temps (sans multiplicateur absurde)
float randomSeed = gridPos.x * 13.37 + gridPos.y * 42.0 + uTime * 2.0;
setSeed(randomSeed);
// Hit le RNG
vec3 color = vec3(rand(), rand(), rand());
gl_FragColor = vec4(color, 1.0);
}