I had an interesting color-related graphics issue on my Windows 10 machine. As I use the machine mostly for gaming, I previously did not invest much time into solving it. However, recently I had to do some work-related things on it. The colors on the screen look washed-out. The issue affects mostly text rendering, video streams, and games. An OpenGL game was the first application where I actually noticed the bad colors. The game renders in much better contrast on my non-Windows machine.
The issue appeared with the Windows 10 Creators Update in 2017. I was an early user of this update due to it being a requirement for the Windows Subsystem for Linux. Some other Windows 10 users noticed it as well. Here is a thread from the Microsoft support forum.
I also played around with different monitors, cables (DisplayPort vs HDMI), and color profiles. None of this helped. Surprisingly, screenshots and captured video streams appeared in full color when viewed on another computer.
Turns out that there is a graphics driver setting that limits the range of colors sent to the screen. I have absolutely no idea why this even exists and I did not find any good source of information that explains it. It is supposed to be enabled only when a television screen is connected to the PC. Of course, there are bugs in the screen detection algorithm and this limitation gets applied to normal computer monitors. Based on the information on this Reddit thread, it seems like that detection algorithm was dropped from the NVIDIA drivers and manual override option was provided.
Unfortunately, the default value is limited. Furthermore, it gets reset to default every time you update the NVIDIA drivers. I do not know exactly if it happens for everyone, or only for those who had the early Windows 10 Creators update.
The setting can be set:
- Click right on the desktop;
- Click NVIDIA Control Panel;
- Select Display -> Change resolution from the left;
- In "3. Apply the following settings", choose NVIDIA color settings;
- Desktop color depth: Highest (32 bit);
- Output color format: RGB;
- Output color depth: 8bpc (or 10bpc if your monitor supports it);
- Output dynamic range: Full.
Or as shown on the screenshot:
There are similar settings for videos under the NVIDIA control panel. They only apply to applications using specific technologies. I selected full range there as well: Adjust video color settings -> With the NVIDIA settings -> Advanced -> Dynamic range: Full.
After applying the settings, my computer text rendering quality improved a lot. The OpenGL-based game began to render exactly the same as on my non-Windows computer. Video streams now have full contrast. I cannot imagine if I had to do graphics design with the old settings.
There is a longer PC Monitors article explaining the effects of the color range limit and some alternative solutions for the problem, including solutions to similar issues with AMD graphic cards.