Dithering in games – mini series

This an opening post of mini blog post series about various uses of dithering for quantization and sampling in video games. It is something most of us use intuitively in every day work, so wanted to write down some of those concepts, explain and analyze them in Mathematica.

This post is just a table of contents.

Part one – dithering – definition and simple 1D quantization.

Part two – dithering – golden ratio sequence, white and blue noise for 1D quantization.

Part three – dithering in quantization of 2D images, Bayer matrix, interleaved gradient noise and blue noise.

Update April 2020: I didn’t expect to come back to blue noise a few years later, but I wrote a small additional blog post on alternative method for generating blue noise patterns for dithering by “optimizing” frequency spectrum. You can treat it as part three-point-five. 🙂

Update April 2021: I described and posted a tiny, very fast and very readable Python Jax/numpy implementation of the void and cluster algorithm. You can treat it as part three-point-seventy-five. 🙂

Update August 2022: I have explored the idea of “progressive blue-noise stippling” where one dithers an image using blue-noise patterns with an increasing sample count. It’s a pretty cool, artistic effect with potential use for importance sampling.

You can find some supplemental material for posts here: https://github.com/bartwronski/BlogPostsExtraMaterial/tree/master/DitheringPostSeries

This entry was posted in Code / Graphics and tagged , , , , , , , . Bookmark the permalink.

9 Responses to Dithering in games – mini series

  1. Pingback: Dithering part one – simple quantization | Bart Wronski

  2. Pingback: Dithering part two – golden ratio sequence, blue noise and highpass-and-remap | Bart Wronski

  3. Pingback: Dithering part three – real world 2D quantization dithering | Bart Wronski

  4. Pingback: Small float formats – R11G11B10F precision | Bart Wronski

  5. Pingback: When Random Numbers Are Too Random: Low Discrepancy Sequences « The blog at the bottom of the sea

  6. Pingback: “Optimizing” blue noise dithering – backpropagation through Fourier transform and sorting | Bart Wronski

  7. Pingback: Superfast void-and-cluster Blue Noise in Python (Numpy/Jax) | Bart Wronski

  8. Pingback: Transforming “noise” and random variables through non-linearities | Bart Wronski

  9. Pingback: Progressive image stippling and greedy blue noise importance sampling | Bart Wronski

Leave a Reply

Please log in using one of these methods to post your comment:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s