Когда цветов мало — два у первого «Макинтоша», четыре оттенка у Game Boy, — полутон приходится изображать узором: часть пикселей светлее, часть темнее, и глаз их усредняет. Это и есть дизеринг. Им жили игры 8- и 16-битной эпохи и GIF с палитрой в 256 цветов, а сегодня он прячет полосы в градиентах видеоигр.
Как это устроено
Картинка разбивается на крупные пиксели («Пикселей» по короткой стороне), и для каждого выбираются два ближайших цвета, A и B. Какой показать, решает порог t из маски: если тон продвинулся от A к B дальше t — берётся B. Весь характер узора — в том, как разложены пороги.
Матрица Байера строится рекурсивно: каждая следующая вписывает предыдущую в четыре четверти в порядке 0, 2, 3, 1. Получается ровная «вышивка», а тон 50 % — идеальная шахматка. Синий шум — маска 32×32, которую слой строит при загрузке методом «пустот и скоплений»: на торе раз за разом ищутся самое тесное скопление точек и самая большая пустота, а порядок, в котором точки снимаются и добавляются, становится порогом. В таком шуме нет низких частот — зерно без комков и без сетки.
В режиме «палитра» слой подбирает для пикселя пару цветов документа, чья смесь в OKLab ближе всего к нужному, со штрафом за смешение далёких цветов. Диффузии ошибки здесь нет сознательно: она последовательна, пиксель за пикселем, и в анимации «кипит», а маска даёт узор, который не дрожит от кадра к кадру.
Немного истории
Брайс Байер из Kodak опубликовал свою матрицу в 1973 году — тот самый Байер, чей цветной фильтр стоит почти в каждой цифровой камере. В 1976 году Роберт Флойд и Луис Стейнберг предложили диффузию ошибки: пиксель округляется, а ошибка раздаётся соседям с весами 7/16, 3/16, 5/16 и 1/16. Роберт Улични (Robert Ulichney) в 1987 году показал, что лучший узор — «синий», без низких частот, а в 1993-м придумал метод пустот и скоплений. Градиентный шум описал Хорхе Хименес в 2014 году для Call of Duty: Advanced Warfare. А 1-битная игра «Return of the Obra Dinn» Лукаса Поупа (2018) доказала, что дизеринг — это ещё и стиль.
Что покрутить
- «Порог»: «Байер 4×4» и «Байер 8×8» — узор старых игр, «синий шум» — зерно, похожее на печать, «градиентный шум» — мелкая диагональная рябь.
- «Цвета» → «1 бит» и «Пикселей» около 300 — ранний «Макинтош»; «уровни RGB» с «Уровнями» 2 дают восемь цветов первых домашних компьютеров.
- «Сила» 0 отключает узор и оставляет чистую постеризацию — сравните, сколько полутонов дизеринг возвращает при тех же цветах.
- Лучше всего видно, как узор передаёт тон, на плавных «Градиентной сетке» и «Фрактальном шуме»; поверх «Странных аттракторов» 1 бит превращает облако точек в гравюру.