#pragma BLENDER_REQUIRE(gpu_shader_compositor_texture_utilities.glsl) #pragma BLENDER_REQUIRE(gpu_shader_common_math_utils.glsl) /* Tone mapping based on equation (3) from Reinhard, Erik, et al. "Photographic tone reproduction * for digital images." Proceedings of the 29th annual conference on Computer graphics and * interactive techniques. 2002. */ void main() { ivec2 texel = ivec2(gl_GlobalInvocationID.xy); vec4 input_color = texture_load(input_tx, texel); /* Equation (2) from Reinhard's 2002 paper. */ vec4 scaled_color = input_color * luminance_scale; /* Equation (3) from Reinhard's 2002 paper, but with the 1 replaced with the blend factor for * more flexibility. See ToneMapOperation::compute_luminance_scale_blend_factor. */ vec4 denominator = luminance_scale_blend_factor + scaled_color; vec4 tone_mapped_color = safe_divide(scaled_color, denominator); if (inverse_gamma != 0.0) { tone_mapped_color = pow(max(tone_mapped_color, vec4(0.0)), vec4(inverse_gamma)); } imageStore(output_img, texel, vec4(tone_mapped_color.rgb, input_color.a)); }