Windows 11 has made strides in streamlining the HDR experience, finally allowing for casual workstations where HDR is always enabled throughout the desktop. This is made possible by emulating an SDR color space within the native HDR10 composition space so that both types of content can coexist.
However, the specifications for "SDR" can sometimes be ambiguous since there are multiple standards that depend on viewing parameters.
The rule of thumb is:
- Gamma 2.4 — Rec.709 reference. Dark room viewing (5 lux). Home theater use.
- Gamma 2.2 — Pseudo-standard in uncontrolled lighting (>50 lux). Computer use.
As of version 22H2, Windows 11 does not allow us to pick which tone curve to use for SDR — in fact it uses neither of the above. Instead, Windows 11 uses what's called the piecewise sRGB transfer function, originally intended for computer/web use. This curve is technically the tone response that gamma 2.2 approximates, but for various reasons it wasn't commonly used as an actual display EOTF. Gamma 2.2 took over as the pseudo-standard, and almost every computer monitor still uses it to this day.
Because it's so prolific, almost all web content and computer games are color graded using a gamma-2.2 outputting monitor, intentionally or not. For Microsoft to decide using piecewise sRGB as the virtual SDR curve was a mistake; it forcibly renders almost all apps and web content to look incorrect, some more than others.
As an example, we can take a look at Diablo IV, a game that is meant to be dark and gritty.
Diablo IV in SDR (gamma 2.2 tone curve) |
Diablo IV in HDR (sRGB tone curve) |
Diablo IV looks absolutely spectacular in SDR, with deep shadow detail and excellent use of dithering to prevent blacks from appearing blotchy.
On the other hand, there have been countless complaints about the game looking washed out when HDR is enabled, swaying many players to simply enjoy the game in SDR. When HDR is enabled, rich blacks turn into dull grays, and the game's atmosphere turns hazy, losing much of its depth. The primary cause of this is — you guessed it — the piecewise sRGB tone curve that Windows uses in HDR.
Note: Only games with HDR implementations that output to scRGB are susceptible to this issue, which includes any game enhanced by Window's Auto-HDR. Engines that output to ST2084 are not affected.
We can plot the output luminance of sRGB vs. gamma 2.2 to see the the concrete differences:
Gamma 2.2 vs Piecewise sRGB chart. The luminance axis is in log space since our eyes perceive the sensation of lightess logarithmically |
Here, the discrepancy between gamma 2.2 and sRGB is obvious. The sRGB curve is fundamentally much lighter below the mid-tones, making content mastered in gamma-2.2 appear flat when viewed with an sRGB transfer.
macOS currently offers a nice solution, allowing its users to create their own custom reference mode in the dispay settings. Among a few others, one of the custom parameters is the SDR Transfer Function, which the user can pick between BT.1886 (for film), a pure gamma (2.2, for PC use), or piecewise sRGB (for treason).
macOS custom reference mode allows the SDR Transfer Function to be adjusted |
This is a problem that ultimately requires Microsoft to fully rectify, so in the meantime we'll need to resort to a band-aid fix. By using an MHC2 ICC profile, we can apply a system gamma ramp that transforms the SDR sRGB curve into a 2.2 gamma curve.
The caveat with this solution is that all content takes on the same transformation, including native HDR10 implementations, which don't need it; such content will see slightly darker shadows, potentially crushing shadow detail. You can either disable the color profile when viewing native HDR content, or just live with the slight boost in contrast for the sake of convenience.
An accurate curve mapping does depend on Window's SDR content brightness value, so I've provided several profiles to choose from — pick the one closest to your setting. The transformation is also an ideal mapping, so its accuracy will also depend on your monitor and its calibration quality.
SDR brightness value | SDR white screen luminance |
---|---|
0 | 80 nits |
5 | 100 nits |
10 | 120 nits |
30 | 200 nits |
55 | 300 nits |
80 | 400 nits |
100 | 480 nits |
- Download one of the color profiles above
- Open Windows' "Color Management" utility
- Press "Add" on the bottom left
- Press "Browse..." and select the color profile you downloaded
- Enable the "Add as HDR Profile" checkbox
- Press "OK"
- Select the color profile you added and press "Set as Default Profile"
- Done
- All profiles are tagged with a peak luminance of 800 nits and a black level of 0
- Pixel values above diffuse SDR white are untouched; a soft shoulder was added toward unity to blend the curve mapping with HDR values
- Tested on an LG C2 OLED
These color profiles were created with the help of MHC2Gen and ArgyllCMS.