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
This commit is contained in:
Filippo Tarpini 2023-09-09 18:12:47 +03:00 committed by GitHub
parent 5e0cf795e3
commit 84c8eb5a01
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -30,6 +30,11 @@ DefaultValue = 2.5
[/configuration] [/configuration]
*/ */
float luminance(float3 color)
{
return dot(color, float3(0.2126f, 0.7152f, 0.0722f));
}
void main() void main()
{ {
float4 color = Sample(); float4 color = Sample();
@ -46,8 +51,8 @@ void main()
// Restore the original SDR (0-1) brightness (we might or might not restore it later) // Restore the original SDR (0-1) brightness (we might or might not restore it later)
color.rgb /= hdr_paper_white; color.rgb /= hdr_paper_white;
// Find the color average // Find the color luminance (it works better than average)
float sdr_ratio = (color.r + color.g + color.b) / 3.0; 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; 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) 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; color.rgb *= hdr_paper_white;
SetOutput(color); SetOutput(color);
} }