indexOpen the app

The Grain Model Named After Logic Gates, But Isn't One

Add white noise to a digital image, call it film grain, and it looks wrong immediately — flat, uniform, a little sterile, missing whatever the real thing has that makes it feel like a material rather than an error. The reason isn't subjective. It's that the statistics are wrong, and once you see which statistics, the fix stops being a guessing game.

Digital sensor noise is independent and identically distributed: every pixel's noise value gets drawn separately from every other pixel's, so a bright value at one location tells you nothing about its neighbor. The result is a uniform scatter with no dense patches and no sparse ones, because nothing in the process lets pixels influence each other.

Real grain doesn't work that way. A silver halide crystal doesn't develop in isolation — it sits among other crystals, and when a photon triggers development, the resulting cloud of metallic silver spreads slightly and can overlap with its neighbors. That overlap is what creates the clumping: local density that persists across a small patch rather than resetting pixel by pixel. Human vision is tuned to notice exactly this kind of spatial structure, since it's how we tell a surface from a scatter of dots, so a texture with none of it reads as synthetic no matter how much noise you throw at it.

What "Boolean" Actually Means Here

The standard tool for modeling this kind of clumping is called the Poisson Boolean model, and the name trips people up — it has nothing to do with true/false logic. It's a term from stochastic geometry, where "Boolean" refers to a union of overlapping random shapes, not a binary condition.

The process starts with a Poisson point process: scatter random points across a plane, where the count of points in any region follows a Poisson distribution, so some patches end up dense with points and others sparse, purely by chance. Each point becomes the center of a disc (or some other shape), with the disc's radius itself drawn from a probability distribution rather than fixed. Where discs from neighboring points overlap, they merge into one connected blob — that merged union is the "Boolean" part of the name. The finished image is whatever's covered by any of these discs, denser where several overlap and thinner where a disc sits alone.

That single mechanism is what produces spatial correlation for free. A grain event in one spot changes the visible density right next to it, because a large disc from one point can reach into what would otherwise be an isolated neighboring patch. Independent, per-pixel noise has no way to do this — there's no shape in it large enough to connect one pixel's outcome to the next one's.

Disc size is also where film speed enters the model. Faster stocks need larger silver halide crystals to reach a latent image with fewer photons, which is the same story covered in why ISO 400 is coarser than ISO 100 — and larger crystals map to larger discs in the simulation, which overlap more and produce a coarser, chunkier texture. Slower stocks get smaller discs, less overlap, and a finer result. The model isn't adding a separate "coarseness" knob; grain size falls out of the same disc-radius distribution that speed already determines.

Why This Beats Adding Noise

Your visual system isn't measuring individual pixel values so much as reading local contrast, edges, and blobs — the kind of structure a stack of overlapping discs naturally provides at its boundaries, and that flat noise simply has none of. A grain filter that just perturbs pixel values independently is optimizing for the wrong quantity: it treats grain as a signal to be added, when it's closer to a texture produced by a geometric process that happened to use silver as its raw material.

None of this claims the Poisson Boolean model is a perfect replica. Real silver halide crystals aren't discs, and their nucleation isn't perfectly Poisson-distributed either — the dye clouds that actually reach your eye are shaped by crystal geometry and development chemistry far messier than a random disc union. What the model captures is the one property that matters most for how the texture reads: grains don't land independently, they compete for the same territory and pile up where chance concentrates them. Match that one statistic and the rest of the illusion mostly follows on its own.