-
Notifications
You must be signed in to change notification settings - Fork 373
Eye care: prevent PWM and or temporal dithering
Two common issues with computer monitors that cause eye strain for people who are sensitive to high frequency flickering are the following:
- PWM is a technique (Pulse Width Modulation) used in some displays to control brightness or achieve a dimming effect. It involves rapidly turning the screen's LED backlight (or for OLED screens, pixels) on and off at a specific high frequency, creating the illusion of different brightness levels.
- Temporal dithering is a technique to produce more colors than what a display's panel (or display connection) can support (for example showing colors with 10 bit color depth - "billions of colors" - on an 8 bit - "millions of colors" - panel). When the display does not have the capability to show the full color depth, it will emulate missing colors by rapidly change between two adjacent color levels thus creating a middle ground.
BetterDisplay has some capabilities to help with these issues.
Note
The article reflects app version v2.2.3
In order to prevent PWM flicker, you first need to figure out the hardware brightness threshold below which PWM is activated. For most displays this is somewhere between the 30% and 50% range. You can use various techniques to figure out the exact treshold or you can simply assume 40% which should be safe for most displays.
In order to prevent the display to use hardware brightness levels below the PWM threshold and use BetterDisplay's software dimming instead (which does not trigger PWM), you should change the Combined brightness - minimum allowed hardware brightness level
setting under the display's Advanced control settings
section (make sure Combined brightness
is enabled for the display).
This technique works both for built-in displays and external displays with hardware birghtness control.
Note
In app version v3.x the GPU Dithering
option mentioned below can be found under the Color Mode
menu.
Apple Silicon Macs automatically select the best available color depth for a display connection - this usually results in 10-bit color depth with no option to change this and thus prevent temporal dithering (or FRC - a high frequency switching between color levels to achieve an interim color).
Starting with version v2.3.0 you can toggle GPU Dithering
under Image Adjustments to turn temporal dithering on and off for Apple Silicon Macs. This option is available and useful both for the built-in and external displays. Please note that this setting changes GPU side dithering and disables dithering for built-in Apple displays - external displays that have their might have their own additional hardware temporal dithering algorithms (still disabling GPU dithering helps).
A possible alternate option is to create a virtual screen using the app (which always uses a 8-bit color depth) and mirror it to your real screen (go to Settings
> Displays
> Create New Virtual Screen...
, select Match aspect ratio...
, select the display and toggle on Configure virtual screen mirroring
, then click Create Virtual Screen
). Based on user feedback this helps with temporal dithering issues.
Note
Using virtual screen mirroring to prevent temporal dithering is a workaround with some drawbacks. Virtual screen mirroring has some bugs (mouse cursor issues, color issues, sleep issues) in macOS when employed on Apple Silicon Macs.
Intel Macs allow you to switch between 8-bit and 10-bit color depth. In order to prevent temporal dithering for most displays, you simply need to switch to 8-bit color depth under the display's Color Depth
submenu in the app menu.
A great way to reduce the number of rendered color is to use the quantization filter. This, combined with grayscale rendering can create an e-book like appearance which some find soothing to the eyes (to access the Grayscale Framebuffer
option - available on Apple Silicon only -, hold the OPTION
key while opening Image Adjustments).