commit 751e21f981b9bf91d8404e92582e3d088620171e Author: nullprop Date: Sat Jul 15 16:43:42 2023 +0300 Init diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9999bad --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/render/*.png diff --git a/README.md b/README.md new file mode 100644 index 0000000..c34328b --- /dev/null +++ b/README.md @@ -0,0 +1,7 @@ +# Shaders + +Shader projects for [SHADERed](https://github.com/dfranx/SHADERed). + +## Gallery + +![neon_pulse](/render/neon_pulse.gif) diff --git a/create_gif.sh b/create_gif.sh new file mode 100755 index 0000000..148113e --- /dev/null +++ b/create_gif.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +gifski -r 24 -o render/"$1".gif render/"$1"*.png + diff --git a/neon_pulse.sprj b/neon_pulse.sprj new file mode 100644 index 0000000..ae3c9ee --- /dev/null +++ b/neon_pulse.sprj @@ -0,0 +1,44 @@ + + + + + + + + + + + + + ScreenQuadNDC + 1 + 1 + 1 + TriangleList + + + + + + + + + + + + + + + + + + 4 + 25 + 319 + 360 + + + + + + diff --git a/render/neon_pulse.gif b/render/neon_pulse.gif new file mode 100644 index 0000000..b6b4682 Binary files /dev/null and b/render/neon_pulse.gif differ diff --git a/shaders/neon_pulsePS.glsl b/shaders/neon_pulsePS.glsl new file mode 100644 index 0000000..d2f8264 --- /dev/null +++ b/shaders/neon_pulsePS.glsl @@ -0,0 +1,92 @@ +#version 330 + +uniform vec2 uResolution; +uniform float uTime; + +out vec4 outColor; + +// https://iquilezles.org/articles/palettes/ +// http://dev.thi.ng/gradients/ +vec3 palette(float t) { + vec3 a = vec3(0.500, 0.500, 0.000); + vec3 b = vec3(0.500, 0.500, 0.000); + vec3 c = vec3(0.100, 0.500, 0.000); + vec3 d = vec3(0.000, 0.000, 0.000); + + return a + b*cos(6.28318*(c*t+d)); +} + +vec3 palette2(float t) { + vec3 a = vec3(0.500, 0.500, 0.000); + vec3 b = vec3(0.500, 0.500, 0.000); + vec3 c = vec3(1.000, 1.000, 1.000); + vec3 d = vec3(0.000, 0.333, 0.667); + + return a + b*cos(6.28318*(c*t+d)); +} + +float rand(vec2 co){ + return fract(sin(dot(co, vec2(12.9898, 78.233))) * 43758.5453); +} + +void main() +{ + vec2 uv = (gl_FragCoord.xy * 2.0 - uResolution.xy) / uResolution.y; + + // wobble + uv.x *= mix(1.0, sin(uTime * 0.5), 0.05); + uv.y *= mix(1.0, sin(uTime * 0.4), 0.05); + + vec2 uv0 = uv; + float dist = length(uv0); + vec3 finalColor = vec3(0.0); + + // foreground flash + for (float i = 0.0; i < 2.0; i++) + { + uv = fract(uv * 0.4) - 0.5; + uv *= cos(uTime * 0.5); + + vec3 col = palette(dist + sin(uTime * 0.1)); + + float d = length(uv); + d = sin(d * 12.0 + uTime * 0.5) / 12.0; + d = abs(d); + + d = 0.02 / d; + d = pow(d, 1.4); + + finalColor += col * d; + } + + // noise + float noise = rand(uv0 * uTime); + float strength = 0.2; + finalColor.x = pow(finalColor.x, mix(1.0, noise, strength)); + finalColor.y = pow(finalColor.y, mix(1.0, noise, strength)); + finalColor.z = pow(finalColor.z, mix(1.0, noise, strength)); + + // background circles + uv = fract(uv0 * 30.5) - 0.5; + uv *= sin(uTime * 0.5); + + vec3 col = palette2(dist + sin(uTime * 0.4)); + + float d = length(uv); + d = sin(d * 5.0 + uTime * 0.5) / 5.0; + d = abs(d); + + d = 0.01 / d; + d = pow(d, 0.5); + + finalColor += col * d; + + // vignette + vec2 edge = gl_FragCoord.xy / uResolution.xy; + edge *= 1.0 - edge.yx; + float vig = edge.x * edge.y * 20.0; + vig = pow(vig, 0.4); + finalColor *= vig; + + outColor = vec4(finalColor, 1.0); +} \ No newline at end of file diff --git a/shaders/neon_pulseVS.glsl b/shaders/neon_pulseVS.glsl new file mode 100644 index 0000000..1ea7fd7 --- /dev/null +++ b/shaders/neon_pulseVS.glsl @@ -0,0 +1,7 @@ +#version 330 + +layout (location = 0) in vec2 pos; + +void main() { + gl_Position = vec4(pos, 0.0f, 1); +}