diff options
Diffstat (limited to 'shaders')
-rw-r--r-- | shaders/bloom.kage | 43 | ||||
-rw-r--r-- | shaders/clouds.kage | 11 | ||||
-rw-r--r-- | shaders/none.kage | 4 | ||||
-rw-r--r-- | shaders/vcr_lite.kage | 33 |
4 files changed, 85 insertions, 6 deletions
diff --git a/shaders/bloom.kage b/shaders/bloom.kage new file mode 100644 index 0000000..fc987b1 --- /dev/null +++ b/shaders/bloom.kage @@ -0,0 +1,43 @@ +//go:build ignore +//kage:unit pixels + +package main + +const THRESHOLD = .9 +const DIRECTIONS = 30.0 // BLUR DIRECTIONS (Default 16.0 - More is better but slower) +const QUALITY = 12.0 // BLUR QUALITY (Default 4.0 - More is better but slower) +const SIZE = 5.0 // BLUR SIZE (Radius) +const PI = 6.28318530718 // Pi*2 +const OPACITY = 0.21 + + +var Time float +var NoiseOffset float + +func Fragment(dstPos vec4, srcPos vec2, color vec4) vec4 { + uv := srcPos + + average := vec3(0.0) + radius := SIZE / 2 + + amount := 0.0 + for d:=0.0; d<PI; d+=PI/DIRECTIONS{ + for i:=1.0/QUALITY; i<=1.0; i+=1.0/QUALITY{ + t := imageSrc0UnsafeAt(uv + vec2(cos(d),sin(d))*radius*log(i)).rgb + + brightness := dot(t.rgb, vec3(0.2126, 0.7152, 0.0722)) + if brightness > THRESHOLD { + average += t + amount += 1.0 + } + } + } + + col := imageSrc0UnsafeAt(uv).rgb + if amount > 0 { + col += (average / amount) * OPACITY + } + + return vec4(col,1.0) +} + diff --git a/shaders/clouds.kage b/shaders/clouds.kage index 26597e5..62a0ae0 100644 --- a/shaders/clouds.kage +++ b/shaders/clouds.kage @@ -13,6 +13,7 @@ const cloudlight = 0.3 const cloudcover = 0.2 const cloudalpha = 8.0 const skytint = 0.5 +const colorDepth = 64 func rand(co vec2) float { return fract(sin(dot(co.xy, vec2(12.9898,-78.233))) * 43758.5453) @@ -59,10 +60,11 @@ func fbm(n vec2) float { func Fragment(dstPos vec4, srcPos vec2, color vec4) vec4 { m := mat2(1.6, 1.2, -1.2, 1.6) - skycolour1 := vec3(0.45, 0.57, 0.66) - skycolour2 := vec3(0.55, 0.77, 0.86) + skycolour := vec3(0.68, 0.81, 0.86) + //skycolour2 := vec3(0.55, 0.77, 0.86) + + p := floor(srcPos.xy) / imageSrc0Size().xy; - p := srcPos.xy / imageSrc0Size().xy; uv := p*vec2(imageSrc0Size().x/imageSrc0Size().y,1.0); time := Time * speed q := fbm(uv * cloudscale * 0.5) @@ -120,12 +122,13 @@ func Fragment(dstPos vec4, srcPos vec2, color vec4) vec4 { c += c1 - skycolour := mix(skycolour2, skycolour1, p.y); + //skycolour := mix(skycolour2, skycolour1, 0); cloudcolour := vec3(1.1, 1.1, 0.9) * clamp((clouddark + cloudlight*c), 0.0, 1.0); f = cloudcover + cloudalpha*f*r; result := mix(skycolour, clamp(skytint * skycolour + cloudcolour, 0.0, 1.0), clamp(f + c, 0.0, 1.0)); + result = floor(result*colorDepth)/colorDepth return vec4( result, 1.0 ); } diff --git a/shaders/none.kage b/shaders/none.kage index 3eccc50..941070d 100644 --- a/shaders/none.kage +++ b/shaders/none.kage @@ -5,8 +5,8 @@ package main var Time float -var Cursor vec2 +var NoiseOffset float func Fragment(dstPos vec4, srcPos vec2, color vec4) vec4 { - return imageSrc2UnsafeAt(srcPos); + return imageSrc0UnsafeAt(srcPos) } diff --git a/shaders/vcr_lite.kage b/shaders/vcr_lite.kage new file mode 100644 index 0000000..405195c --- /dev/null +++ b/shaders/vcr_lite.kage @@ -0,0 +1,33 @@ +//go:build ignore + +//kage:unit pixels + +package main + +var Time float +var NoiseOffset float + +const noiseX = 840.0 +const noiseY = 840.0 +const speed = 0.01 + +const colorOffsetIntensity = 0.1 + +func rand(co vec2) float { + return fract(sin(dot(co.xy, vec2(12.9898,78.233))) * 43758.5453) +} + + +func Fragment(dstPos vec4, srcPos vec2, color vec4) vec4 { + time := Time * speed + uv := srcPos / imageSrc0Size() + + uv.x = uv.x + (rand(vec2(time,srcPos.y)) - 0.5) / (noiseX); + uv.y = uv.y + (rand(vec2(time))-0.5) / (noiseY) + offsetR := vec2(0.006 * sin(time), 0.0) * colorOffsetIntensity + offsetG := vec2(0.0073 * (cos(time * 0.97)), 0.0) * colorOffsetIntensity + r := imageSrc0UnsafeAt((uv+offsetR) * imageSrc0Size()).r + g := imageSrc0UnsafeAt((uv+offsetG) * imageSrc0Size()).g + b := imageSrc0UnsafeAt(uv * imageSrc0Size()).b + return vec4(r, g, b, 1.0) +} |