diff options
Diffstat (limited to 'Assets/Shaders/Blur.glsl')
| -rw-r--r-- | Assets/Shaders/Blur.glsl | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/Assets/Shaders/Blur.glsl b/Assets/Shaders/Blur.glsl new file mode 100644 index 0000000..984f0ba --- /dev/null +++ b/Assets/Shaders/Blur.glsl @@ -0,0 +1,60 @@ +#type vertex + +#version 330 core + +layout (location = 0) in vec2 a_Pos; +layout (location = 1) in vec2 a_TexCoord; + +out vec2 v_TexCoord; + +void main() +{ + gl_Position = vec4(a_Pos, 0.0, 1.0); + v_TexCoord = a_TexCoord; +} + +#type fragment + +#version 330 core + +in vec2 v_TexCoord; +out vec4 o_FragColor; + +uniform sampler2D u_ScreenTexture; +uniform vec2 u_Resolution; +uniform float u_BlurStrength; +uniform float u_GlowIntensity; + +void main() +{ + vec2 texelSize = 1.0 / u_Resolution; + vec4 centerColor = texture(u_ScreenTexture, v_TexCoord); + + float brightness = (centerColor.r + centerColor.g + centerColor.b) / 3.0; + float glowMask = smoothstep(0.05, 0.3, brightness); + + vec4 blurredColor = vec4(0.0); + float totalWeight = 0.0; + + for (int x = -8; x <= 8; x++) + { + for (int y = -8; y <= 8; y++) + { + vec2 offset = vec2(x, y) * texelSize * u_BlurStrength; + vec4 sampleColor = texture(u_ScreenTexture, v_TexCoord + offset); + + float weight = exp(-(x*x + y*y) / (2.0 * 8.0 * 8.0)); + blurredColor += sampleColor * weight; + totalWeight += weight; + } + } + + blurredColor /= totalWeight; + + vec3 emissionColor = vec3(1.0, 0.8, 0.6); + vec3 glowColor = emissionColor * glowMask * u_GlowIntensity * 2.0; + vec3 auraColor = blurredColor.rgb * glowMask * u_GlowIntensity * 0.8; + vec3 finalColor = centerColor.rgb + glowColor + auraColor; + + o_FragColor = vec4(finalColor, centerColor.a); +} |
