//go:build ignore //kage:unit pixels package main var Time float func hash21(p vec2) float { p = fract(p * vec2(123.34, 456.21)) p += dot(p, p + 45.32) return fract(p.x * p.y) } func smoothNoise(p vec2) float { ip := floor(p) fp := fract(p) fp = fp * fp * (3.0 - 2.0 * fp) ul := hash21(ip + vec2(0.0, 0.0)) ur := hash21(ip + vec2(1.0, 0.0)) ll := hash21(ip + vec2(0.0, 1.0)) lr := hash21(ip + vec2(1.0, 1.0)) a := mix(ul, ur, fp.x) b := mix(ll, lr, fp.x) return mix(a, b, fp.y) } func Fragment(dstPos vec4, srcPos vec2, color vec4) vec4 { original := imageSrc3UnsafeAt(srcPos) sp := srcPos * 15.0 t := Time * 2.0 n := smoothNoise(sp + t) sparkle := pow(n, 4.0) * 2.0 sparkle = min(sparkle, 1.0) sparkleColor := mix(original, vec4(1.0, 0.9, 0.5, 1.0), sparkle) output := mix(original, sparkleColor, original.a) return output }