HackerTube
HomeLongsLikedHistoryWatch laterCategoriesPlaylistsSettings

Surface-Stable Fractal Dithering Explained

runevision3 HN recommenders · recommended in 4 months, 2025-2026
YouTube
646K views · 1 year ago · explainer · evergreen

Rune Skovbo Johansen explains Surface-Stable Fractal Dithering, a technique he invented and released as open source. It makes dithering stick to 3D surfaces and covers the experiments and shortcomings along the way, inspired by Return of the Obra Dinn.

HN recommends it as the original explainer for a clever dithering technique and the go-to video in dithering threads.

Computer graphics & renderingCreative coding & generative artGame programming & engines#dithering#shaders#computergraphics#obradinn#fractals

8 comments from Hacker News

@m12k2026 · in “Return of the Obra Dinn: spherical mapped dithering for a 1bpp first-person game”

If you find this interesting, you might also be interested in this video of someone diving even deeper into how to make the dither surface stable: ▶ this video

RecommendsView on HN
@m12k2025 · in “Dithering – Part 1”

And here's a couple videos about a technique that was inspired by the Obra Dinn's dither, but making it surface stable: ▶ this video (explanation) link (demo)

RecommendsView on HN
@jansan2025 · in “Writing my own dithering algorithm in Racket”

I think implementing a dithering algorithm is one of the most satisfying projects, because it is fun, small(ish) and you know when you are done. Of course, unless you are trying to implement something completely insane like Surface-Stable Fractal Dithering ▶ this video

CitesView on HN
@qwertox2025 · in “Writing my own dithering algorithm in Racket”

Somewhat related and worth watching: Surface-stable fractal dithering explained ▶ this video There's a follow-up video to that one.

RecommendsView on HN
@runevision2025 · in “”

I'd like to expand with some more details and developments since the post I saw here a few weeks ago about my Surface-Stable Fractal Dithering technique. (That post (not by me) was here: link ) I've since made it work also in color (RGB dithering and CMYK halftone) and demonstrated what it looks like in true 1-bit (or 3-bit for color) at low resolutions as well. See the linked demonstration video for a variety of styles/aesthetics it can be used for: link The original explainer video is here: ▶ this video And the repository is here: link Lots of people both here and elsewhere has speculated about various alterations or different use cases, etc. I'd like to point to this FAQ that have a lot of common topics covered. If you have questions, suggestions or similar, it would be a good idea to check that out first (after the explainer video): link Furthermore, lots of people have been inspired to make their own implementations, or related effects inspired by Surface Stable Fractal Dithering. I keeping a list of the ones I know about here: link For example, Aras Pranckevičius got a simplified version of the effect to work on Playdate. Since the Playdate does not have a GPU, the effect (along with 3D rasterization in general) is implemented fully CPU-based here. link Ryan / InfernalWAVE is working on an implementation for Godot: link arColm made shaders for MineCraft: link I've been surprised and happy that the effect has gotten as much interest as it has, and I'm hoping w

CitesView on HN
@biercarsten2025 · in “The Art of Dithering and Retro Shading for the Web (2024)”

Ah, thats from runevision. I recently whatched his youtube video on this ( ▶ this video ) and "Return of the Obra Dinn" was also the first thing I thought of.

CitesView on HN
@qwertox2025 · in “Bilinear down/upsampling, aligning pixel grids, and that infamous GPU half pixel (2021)”

On a similar note, yesterday I stumbled across a 4-days old video related to dithering which is really worth watching. " Surface-Stable Fractal Dithering " [0] by "Rune Skovbo Johansen, indie game developer and procedural generation enthusiast" [0] ▶ this video

RecommendsView on HN
@abetusk2025 · in “Surface-Stable Fractal Dithering”

To create a dithering effect for 3D scenes. Doing a straight 2D dither on each frame will result in noisy artifacts and won't be "stable". Doing an "ordered" dithering produces a "porch screen" artifact effect, where there's a stable pattern in screen space that can be seen. Trying to naively map dithering patterns as textures on 3D objects again results in unstable patterns as the dithering is dependent on the distance of the screen to the object and produces noise. This is a proposed solution that maps a dithering pattern as a texture that doesn't have the "porch screen" effect and is stable. The video linked [0] to in the repo talks about experiments and shortcomings from the above I just listed. This work is in response to some challenges the developer of the "Return of the Obra Dinn" game experienced when trying to create a dithering effect in game [1] [2]. [0] ▶ this video [1] link [2] link

RecommendsView on HN
I wrote a Raytracer for DOS, 16 VGA colors15:00

I wrote a Raytracer for DOS, 16 VGA colors

Bisqwit
905K views • 15 years ago
Marble Marcher - A Fractal Physics Game3:58

Marble Marcher - A Fractal Physics Game

CodeParade
1.7M views • 7 years ago
I painted a Landscape with Mathematics42:00

I painted a Landscape with Mathematics

Inigo Quilez
812K views • 4 years ago
Shader Basics, Blending & Textures • Shaders for Game Devs [Part 1]3:53:11

Shader Basics, Blending & Textures • Shaders for Game Devs [Part 1]

Freya Holmér
1.9M views • 5 years ago
Superpositions, Sudoku, the Wave Function Collapse algorithm.14:28

Superpositions, Sudoku, the Wave Function Collapse algorithm.

Martin Donald
764K views • 6 years ago
A Deep Dive into Nanite Virtualized Geometry1:10:00

A Deep Dive into Nanite Virtualized Geometry

SIGGRAPH Advances in Real-Time Rendering
278K views • 5 years ago
Unlimited Detail Real-Time Rendering Technology Preview 2011 [HD]7:43

Unlimited Detail Real-Time Rendering Technology Preview 2011 [HD]

Axiom Holographics
4.4M views • 15 years ago
Sparse Voxel Octree (SVO) Demo by Jon Olick4:45

Sparse Voxel Octree (SVO) Demo by Jon Olick

Zelexi
191K views • 17 years ago
Learn to Paint with Mathematics24:02

Learn to Paint with Mathematics

Inigo Quilez
191K views • 12 years ago
The Beauty of Bézier Curves24:26

The Beauty of Bézier Curves

Freya Holmér
2.2M views • 5 years ago
3D Gaussian Splatting - Why Graphics Will Never Be The Same2:12

3D Gaussian Splatting - Why Graphics Will Never Be The Same

IndividualKex
2M views • 3 years ago
Atari XL/XE - Rescue on Fractalus [Lucasfilm Games] 19855:14

Atari XL/XE - Rescue on Fractalus [Lucasfilm Games] 1985

StaxX28
136K views • 19 years ago
Erik Jansson - GPU driven Rendering with Mesh Shaders in Alan Wake 243:13

Erik Jansson - GPU driven Rendering with Mesh Shaders in Alan Wake 2

Digital Dragons
29K views • 2 years ago
NVScene 2015 Session: How to Create Content with Signed Distance Functions (Johann Korndörfer)51:06

NVScene 2015 Session: How to Create Content with Signed Distance Functions (Johann Korndörfer)

NVScene
35K views • 11 years ago
This game DISAPPEARS if you pause it!3:58

This game DISAPPEARS if you pause it!

Branta Games
687K views • 1 year ago
Destiny's Multithreaded Rendering Architecture1:06:37

Destiny's Multithreaded Rendering Architecture

GDC Festival of Gaming
45K views • 10 years ago
GuiltyGearXrd's Art Style : The X Factor Between 2D and 3D58:59

GuiltyGearXrd's Art Style : The X Factor Between 2D and 3D

GDC Festival of Gaming
710K views • 11 years ago
The Continuity of Splines1:13:50

The Continuity of Splines

Freya Holmér
1.9M views • 3 years ago
Coding Adventure: Ant and Slime Simulations17:54

Coding Adventure: Ant and Slime Simulations

Sebastian Lague
2.2M views • 5 years ago
New Voxel Engine Reveal - Crystal Islands Experiment5:05

New Voxel Engine Reveal - Crystal Islands Experiment

John Lin
394K views • 5 years ago