Terrain4J_Experimental_branch/resources/EngineResources/shaders/multi-sampled_post_process_frag.glsl
2026-09-04 00:23:48 +01:00

72 lines
No EOL
2 KiB
GLSL

#version 450
layout(constant_id = 0) const int USE_AA = 0;
const float GAMMA_CONST = 0.4545;
const float SPAN_MAX = 8.0;
const float REDUCE_MIN = 1.0/128.0;
const float REDUCE_MUL = 1.0/32.0;
layout(location = 0) in vec2 inTextCoord;
layout(location = 0) out vec4 outFragColor;
layout(location = 1) out vec4 outBloomColour;
layout(set = 0, binding = 0) uniform sampler2DMS inputTexture;
layout(set = 1, binding = 0) uniform ScreenSize{
vec2 size;
} screenSize;
vec4 gamma(vec4 color){
return color = vec4(pow(color.rgb,vec3(GAMMA_CONST)),color.a);
}
vec3 HDR(float Gamma, float Exposure, sampler2D Texture, vec2 TexCoords){
vec3 hdrColor = texture(Texture, TexCoords).rgb;
vec3 mapped = vec3(1.0) - exp(-hdrColor * Exposure);
mapped = pow(mapped, vec3(1.0 / Gamma));
return mapped;
}
vec4 msaa(int sampleCount, sampler2DMS textureIn,vec2 TextCoord){
ivec2 pixelCoords = ivec2(TextCoord * textureSize(textureIn));
vec4 colorSum = vec4(0.0);
for(int i = 0; i < sampleCount; ++i) {
vec4 sampleColor = texelFetch(textureIn, pixelCoords, i);
colorSum += sampleColor;
}
return colorSum / float(sampleCount);
}
void main(){
ivec2 pixelCoords = ivec2(inTextCoord * textureSize(inputTexture));
outFragColor = texelFetch(inputTexture, pixelCoords, 0);
if(USE_AA == 0){
outFragColor = texelFetch(inputTexture,pixelCoords,0);
}
if(USE_AA == 1){
outFragColor = texelFetch(inputTexture,pixelCoords,0);
}
if(USE_AA == 2){
outFragColor = msaa(2,inputTexture,inTextCoord);
}
if(USE_AA == 3){
outFragColor = msaa(4,inputTexture,inTextCoord);
}
if(USE_AA == 4){
outFragColor = msaa(8,inputTexture,inTextCoord);
}
vec3 color = outFragColor.rgb;
float brightness = dot(color, vec3(0.2126, 0.7152, 0.0722));
float threshold = 1.0;
float softKnee = 0.5;
float contribution = max(brightness - threshold, 0.0);
contribution = contribution / max(contribution + softKnee, 0.0001);
outBloomColour = vec4(color * contribution, 1.0);
}