uniform sampler2D visibility; uniform sampler2D shape; uniform float uTime; uniform float glitch; uniform vec3 pulseColor; uniform vec3 glitchColor; varying vec3 vColor; varying vec3 vDeltaPosition; varying vec2 vUv; varying float vBackfacing; void main() { vec2 uv = vUv; vec3 color = vColor; float time = uTime * 0.0002; // Remove backfacing dots if (floor(vBackfacing + 0.1) == 0.0) discard; // Remove ocean dots if (length(texture2D(visibility, uv).rgb) > 1.0) discard; // Make points circular if (texture2D(shape, gl_PointCoord).a < 0.0625) discard; // GLitch effect vec3 glitch = color * gln_rand(uv + time * 0.01) + 0.3; vec3 normalColor = color * gln_normalize(gln_simplex((vec3(uv + time, 1.0) * 1000.0))) + 0.3; color = mix(normalColor, glitch, glitch); // Pulse effect float dx = vDeltaPosition.x; float dy = vDeltaPosition.y; float dz = vDeltaPosition.z; float dist = sqrt(dx * dx + dy * dy + dz * dz) * 10.0; // vec3 pulseColor = vec3(0.953, 0.545, 0.627); color = mix(color, pulseColor, dist); gl_FragColor = vec4(color, 1.0); }