blob: 167006585ca4f0143711e16188b556335dca8c4f (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
#pragma BLENDER_REQUIRE(gpu_shader_compositor_texture_utilities.glsl)
/* Tone mapping based on equation (1) and the trilinear interpolation between equations (6) and (7)
* from Reinhard, Erik, and Kate Devlin. "Dynamic range reduction inspired by photoreceptor
* physiology." IEEE transactions on visualization and computer graphics 11.1 (2005): 13-24. */
void main()
{
ivec2 texel = ivec2(gl_GlobalInvocationID.xy);
vec4 input_color = texture_load(input_tx, texel);
float input_luminance = dot(input_color.rgb, luminance_coefficients);
/* Trilinear interpolation between equations (6) and (7) from Reinhard's 2005 paper. */
vec4 local_adaptation_level = mix(vec4(input_luminance), input_color, chromatic_adaptation);
vec4 adaptation_level = mix(global_adaptation_level, local_adaptation_level, light_adaptation);
/* Equation (1) from Reinhard's 2005 paper, assuming Vmax is 1. */
vec4 semi_saturation = pow(intensity * adaptation_level, vec4(contrast));
vec4 tone_mapped_color = input_color / (input_color + semi_saturation);
imageStore(output_img, texel, vec4(tone_mapped_color.rgb, input_color.a));
}
|