Morphiq

Components / Backgrounds / Bitmap Noise

Bitmap Noise

A dithered field with no input at all. Two fBm tiles pan past each other on different headings, and the interference makes patches form and dissolve in place rather than slide across as one sheet.

Usage

import BitmapNoise from '@/components/bitmap-noise'

<BitmapNoise
  scale={2}
  speed={0.4}
  patch={0.42}
  dither="bayer8"
/>

Installation

npx shadcn@latest add https://morphiq.prathampatel.design/r/bitmap-noise.json

Model

(v) => String(v.dither).startsWith("bayer") ? "out = level(tone + (M(x, y)/n² − ½)/levels)" : v.dither === "none" ? "out = round(tone · (levels − 1)) / (levels − 1)" : "e = tone − out;  e spreads to unvisited neighbours by the kernel’s weights"

M the Bayer matrix, n its size · error diffusion carries each cell’s rounding error forward, so tone is conserved over area

Props

PropertyTypeDefaultDescription
cellnumber4Pixels per cell. Smaller is finer and costs more per frame.
levelsnumber2Tone steps. 2 is one-bit; higher posterises.
ditherDitherKernel'bayer8'—
ditherAmountnumber10 passes the tone through untouched, 1 applies the kernel in full.
serpentinebooleantrueAlternate scan direction. Error-diffusion kernels only.
contrastnumber1—
brightnessnumber0—
invertbooleanfalse—
warpnumber0Flow-field shear, in cells.
cursorRadiusnumber160Reach of the pointer's influence, in px.
cursorStrengthnumber0Outward push at the centre of that reach, in px.
cursorLiftnumber0Luminance added at the centre of that reach.
colorstring'#e8e4dc'—
backgroundstring | null'#0a0b0e'null renders transparent.
pausedbooleanfalseStops the frame loop without unmounting.
respectReducedMotionbooleantrueHonour prefers-reduced-motion, and keep honouring it if it changes.
fullscreenbooleanfalsePosition the field to the viewport rather than its container.
scalenumber2Patch size, in cells. Bigger is blobbier.
speednumber0.4Drift rate. 0 freezes the field.
patchnumber0.420 is a smooth gradient, 1 is hard islands.
densitynumber0.36Fraction of the field that ends up lit.
driftnumber0Constant lateral push on the second layer.