Error Diffusion Dithering

Jump to navigation Jump to search

madVR Dithering and Error Diffusion Overview

MadVR has added a few new dithering options: Error Diffusion Option 1 and Error Diffusion Option 2. Both of these new options are somewhat demanding in terms of GPU usage, and require that your GPU is DirectX 11 compatible, such as a GTX 970, GTX 960, or any of the newer AMD GPUs.

If you stick with the ordered dithering or random dithering options you will save yourself about 4ms of render time per frame, which can be a lot of you have a weaker GPU. If you have a GTX 960 or GTX 970 or better then I highly recommend enabling Error Diffusion Option 1, or Error Diffusion Option 2. Both of these new dithering options for madVR perform about the same. I did notice that Option 2 was slightly faster, about 1ms per frame faster, so performance wise you won't notice much of a difference if you have a pretty powerful GPU.

After some back and forth testing, I've come to like Option 1 the most, it seems to produce less noise / patterns.

madVR Dithering configurations and settings for GTX 970

I tested both of the options under the main dither menu and there is very little performance gain / loss between Error Diffusion 1 and Error Diffusion 2, at least if you have a newer Nvidia GTX 970 or GTX 960. You must have a DX11 GPU to enable the highest two options, so if you have an older or not very powerful GPU, stick with either ordered or random dithering.

I chose to go with Error Diffusion Option 1 for Dithering, with both of the options enabled. Personally I like option 1 over option 2, but everyone has their own preferences, so choose whatever option looks better to you. In terms of performance, the fastest option is to use "None", Random, Ordered, Error Diffusion Option 2, and finally Error Diffusion Option 1. If you have a higher end GPU like the GTX 970, GTX 980, or any kind of SLI setup then you should go with Error Diffusion Option 1.

When playing a 1080p video I noticed that Error Diffusion Option 1 cost about 1ms more than Error Diffusion Option. By that I mean the average frame render time was about 6.10ms with option 1 enabled, and 5.10ms with option 2 enabled. While 1ms may not seem like a lot, it can mean the difference between dropped frames, or no dropped frames, so keep that in mind if you start to notice slow playback.

  • use colored noise -- Not sure if this option really helps all that much. I currently have colored noise enabled. This option and the one below do not seem to impact performance at all, so if you like colored noise, go for it! You can also use Nvidia's Control Panel to reduce some video noise in addition to the options found here.
  • change dither for every frame -- I like to have this enabled, but you should test out this option to see what you prefer.

Dithering serttings for madvr gtx970.jpg

madvr Dithering Performance Results

As you can see there is some difference in render times between the dithering settings. Error Diffusion Option 2 seemed to be slightly faster than Option 1, and I did not notice much difference in video quality so you might as well use option 2 if you have a somewhat modern GPU. If you don't have a very good GPU then I would probably go with either random dithering or ordered dithering, using no dithering won't give you much in terms of performance.

To gather this data I used madvr's built in stats (ctrl + j) and played a short 1080p video, waited about 1 minute and recorded the average render time per frame that was displayed. I am using a GTX 970 and I am using the following settings for madVR (other than the category I am testing of course).

MadVR Scaling Option MadVR Scaling Algorithm
chroma upscaling BiCubic 75 with anti ringing filter enabled
image doubling Always use NNEDI3 to double Luma resolution with 64 neurons
image upscaling Lanczos 3 Taps with anti-ringing filter
image downscaling Lanczos 3 Taps with anti-ringing filter
smooth motion enable smooth motion only if...
dithering Error Diffusion Option 2

1080p Dithering Performance madvr gtx970.jpg

As you can see from the results above, there is a performance gap between the Error Diffusion Options and the other options such as ordered or random. There was basically no performance difference between no dithering, random dithering, and ordered dithering, so there's no point in disabling dithering entirely.

madvr Dithering Algorithm Screenshot Comparisons: 1080p

No Dithering

The image below was taken while playing a 1080p video with dithering set to "none" in the madVR configuration area for dithering. I used PotPlayer to play the video, but MPC-HC should yield similar performance and quality. 1080p NO Dithering madvr gtx970.jpg

Ordered Dithering

Ordered dithering seems to produce a sharper image, at least compared to random.

1080p Ordered Dithering madvr gtx970.jpg

Random Dithering

Random dithering seemed to be smoother, but less sharp than ordered dithering. Some people like sharper, some people prefer smoother, blurrier video, there's no right or wrong way to go. If you are using an older GPU, try and stick with either ordered or random dithering.

1080p Random Dithering madvr gtx970.jpg

Error Diffusion Option 1 Dithering

It is kind of hard to tell the difference between Option 1 and Option 2, or even between ordered and random dithering. I did notice a slight improvement with Option 1 over ordered or random, but the differences are still somewhat subtle.

1080p error diffusion option 1 madvr gtx970.jpg

Error Diffusion Option 2 Dithering

1080p error diffusion option 2 madvr gtx970.jpg

More Pages

MadVR Main Page 720p Chroma Upscaling Screens PotPlayer DSR 720p Image Doubling madVR Dithering Chroma Upscaling Benchmarks Nvidia Noise Reduction
PotPlayer Main Page 1080p Chroma Upscaling Screens PotPlayer Decoder Comparison 720p Image Upscaling Processing Options NNEDI3 Main Page Nvidia Edge Enhancement