MetaCore/third_party/simplepbr-shaders/shaders/tonemap.frag

41 lines
954 B
GLSL

#version 120
#ifdef USE_330
#define texture2D texture
#define texture3D texture
#endif
uniform sampler2D tex;
#ifdef USE_SDR_LUT
uniform sampler3D sdr_lut;
uniform float sdr_lut_factor;
#endif
uniform float exposure;
varying vec2 v_texcoord;
#ifdef USE_330
out vec4 o_color;
#endif
void main() {
vec4 tex_color = texture2D(tex, v_texcoord);
vec3 color = tex_color.rgb;
color *= exposure;
color = max(vec3(0.0), color - vec3(0.004));
color = (color * (vec3(6.2) * color + vec3(0.5))) / (color * (vec3(6.2) * color + vec3(1.7)) + vec3(0.06));
#ifdef USE_SDR_LUT
vec3 lut_size = vec3(textureSize(sdr_lut, 0));
vec3 lut_uvw = (color.rgb * float(lut_size - 1.0) + 0.5) / lut_size;
vec3 lut_color = texture3D(sdr_lut, lut_uvw).rgb;
color = mix(color, lut_color, sdr_lut_factor);
#endif
#ifdef USE_330
o_color = vec4(color, tex_color.a);
#else
gl_FragColor = vec4(color, tex_color.a);
#endif
}