One bit in Unity: procedural dithering for an ink aesthetic

Published on May 30, 2026 | Translated from Spanish

The project My Work Is Not Yet Done demonstrates that horror doesn't need color. With a palette of only pure black and white, its creator uses Unity and C# post-processing to apply dithering in real time. The result is an anguishing atmosphere that evokes an ink drawing, proving that technical limitations can be the greatest expressive asset in independent video game development.

Game screenshot in black and white with dithering, anguishing shadows, and real-time ink texture

Technical implementation of dithering in C# for Unity 🎮

To achieve this effect, you must create a post-processing script that iterates over each pixel of the rendered image. The key algorithm is Bayer dithering or Floyd-Steinberg dithering. Instead of simply thresholding the image (which loses detail), these algorithms compare the gray value of each pixel with a threshold matrix (in the case of Bayer) or distribute the quantization error to neighboring pixels (Floyd-Steinberg). In Unity, this is implemented in a Shader or in a script that processes the camera via OnRenderImage. It is crucial to disable bilinear filtering on the output texture and force the resolution to a low value to enhance the pixel art. Games like Return of the Obra Dinn use a similar approach but with a 3-color palette, while World of Horror applies a more static dithering. For your project, I recommend starting with a 4x4 Bayer matrix, which offers a good balance between performance and visual quality.

The narrative of monochrome: why black and white works 🖤

Beyond the technique, the aesthetic choice responds to a narrative need. Radical black and white eliminates the distraction of color, forcing the player to concentrate on shapes, shadows, and movement. Dithering, by generating grainy textures, evokes the anxiety of a nervous sketch or a disturbed archival photograph. My Work Is Not Yet Done uses this extreme contrast to hide details in visual noise, creating a sense of paranoia. If you are looking for this effect in your game, remember that lighting must be very contrasted; a strong directional light with hard shadows is the perfect foundation for dithering to work its magic.

For a horror game that uses a palette of only pure black and white, like My Work Is Not Yet Done, how can procedural dithering be implemented in Unity to generate 1-bit textures that maintain visual readability and an oppressive atmosphere without resorting to grayscales?

(PS: optimizing for mobile is like trying to fit an elephant into a Mini Cooper)