From 84c8eb5a015074541caef02590f7c21bcf425bcf Mon Sep 17 00:00:00 2001 From: Filippo Tarpini Date: Sat, 9 Sep 2023 18:12:47 +0300 Subject: [PATCH] Make AutoHDR work with color luminance instead of average This gives more consistent results. My main ReShade has also been updated with the same change: https://github.com/Filoppi/PumboAutoHDR --- Data/Sys/Shaders/AutoHDR.glsl | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/Data/Sys/Shaders/AutoHDR.glsl b/Data/Sys/Shaders/AutoHDR.glsl index 6226d70d7c..b806d65838 100644 --- a/Data/Sys/Shaders/AutoHDR.glsl +++ b/Data/Sys/Shaders/AutoHDR.glsl @@ -30,6 +30,11 @@ DefaultValue = 2.5 [/configuration] */ +float luminance(float3 color) +{ + return dot(color, float3(0.2126f, 0.7152f, 0.0722f)); +} + void main() { float4 color = Sample(); @@ -46,8 +51,8 @@ void main() // Restore the original SDR (0-1) brightness (we might or might not restore it later) color.rgb /= hdr_paper_white; - // Find the color average - float sdr_ratio = (color.r + color.g + color.b) / 3.0; + // Find the color luminance (it works better than average) + float sdr_ratio = luminance(color.rgb); const float auto_hdr_max_white = max(HDR_DISPLAY_MAX_NITS / (hdr_paper_white_nits / hdr_sdr_white_nits), hdr_sdr_white_nits) / hdr_sdr_white_nits; if (sdr_ratio > AUTO_HDR_SHOULDER_START_ALPHA && AUTO_HDR_SHOULDER_START_ALPHA < 1.0) @@ -61,4 +66,4 @@ void main() color.rgb *= hdr_paper_white; SetOutput(color); -} \ No newline at end of file +}