Files
sildurs-vibrant-shaders/shaders/world-1/composite4.fsh
2025-11-18 08:49:24 +01:00

51 lines
1.1 KiB
GLSL

#version 120
/* DRAWBUFFERS:6 */
//overwrite buffer 6, final image is buffer 7
#define Bloom
#define bloom_strength 0.75
#define composite4
#include "/shaders.settings"
#ifdef Bloom
varying vec2 texcoord;
varying float eyeAdapt;
uniform sampler2D colortex6;
uniform int isEyeInWater;
uniform float rainStrength;
uniform float viewWidth;
uniform float viewHeight;
#endif
void main() {
#ifdef Bloom
const int nSteps = 17;
const int center = 8; //=nSteps-1 / 2
//huge gaussian blur for glare
vec3 blur = vec3(0.0);
float tw = 0.0;
for (int i = 0; i < nSteps; i++) {
float dist = abs(i-float(center))/center;
float weight = (exp(-(dist*dist)/ 0.28));
vec3 bsample = texture2D(colortex6,(texcoord.xy + vec2(1.0/viewWidth,1.0/viewHeight)*vec2(0.0,i-center))).rgb*3.0;
blur += bsample*weight;
tw += weight;
}
blur /= tw;
vec3 glow = blur * bloom_strength;
vec3 overglow = glow*pow(length(glow)*2.0,2.8)*2.0;
vec3 finalColor = (overglow+glow*1.15)*(1+isEyeInWater*10.0+(pow(rainStrength,3.0)*7.0/pow(eyeAdapt,1.0)))*1.2;
gl_FragData[0] = vec4(finalColor, 1.0);
#else
gl_FragData[0] = vec4(0.0);
#endif
}