Ask any colorist what’s the hardest thing to replicate digitally.
Not skin tone. Not highlight rolloff. Not the characteristic curve of a specific emulsion.
Grain.
It always comes back to grain. And the reason is slightly embarrassing if you’re a digital engineer: the thing that makes film grain look right is that it’s genuinely, physically, irreducibly random — in a way that computers are terrible at generating.
Here’s why.
What’s Actually Inside a Roll of Film
Film emulsion is a suspension of silver halide crystals in gelatin. Billions of them, per frame. When a photon hits one of those crystals with enough energy, it triggers a chain reaction — silver ions get reduced to metallic silver, a latent image forms, development chemistry makes it permanent.
The part everyone skips over: crystal size is not uniform.
A single roll contains crystals that vary dramatically in size, shape, and sensitivity. This isn’t a manufacturing flaw. It’s deliberate. Larger crystals catch photons at lower light intensities but resolve less spatial detail. Smaller crystals are sharper but need more light to fire. A film stock is, among other things, a carefully calibrated distribution of crystal sizes — tuned for a specific balance of speed, grain character, and resolving power.
When you develop the film, the crystals that captured light get reduced to metallic silver grains. Their spatial distribution across the frame is determined by which crystals got hit — and photons arrive probabilistically, governed by quantum mechanics.
Real randomness. Not pseudorandom. Real.
Why Grain Looks Organic and Noise Looks Wrong
Film grain has three properties that digital noise almost never gets right.
It clumps. Crystals in a gelatin suspension aren’t isolated — they’re in contact with their neighbors. Development chemistry spreads slightly beyond individual crystal boundaries. The resulting silver grains form clusters that are larger and more irregular than any single crystal. Visually: grain has spatial correlation. Adjacent grains relate to each other. It flows. It breathes. It doesn’t look like a pixel grid with random values applied on top.
It shimmers with color. Color film has three emulsion layers — sensitive to red, green, and blue — stacked physically on top of each other at different depths. Each develops independently with its own crystal distribution. The grain in the red layer is slightly different from the grain in the green layer, and both are misregistered with the blue layer because they’re at different physical depths. This is why color film grain has subtle, shifting color variation. Digital noise adds the same statistical pattern to every color channel simultaneously. It looks flat by comparison because it is flat.
It peaks in the midtones. This is the one that trips up almost every grain plugin ever made. Film grain is not worst in the shadows. In deep shadow areas, there aren’t enough exposed crystals to form visible clusters — the image is thin. In highlights, the emulsion is so thoroughly exposed that density becomes uniform. Grain is most visible in the midtones, where you have enough exposure to form clusters but not so much that everything blends together.
Digital noise does the opposite. It’s dominated by shot noise — worst in shadows, invisible in highlights. Shadow areas on a digital sensor look like static. Shadow areas on film look clean.
The Poisson Distribution Problem
Digital noise isn’t mysterious. It’s a direct consequence of how photons work.
Each photosite on a sensor counts the photons it receives during an exposure. Photon arrival is random — it follows a Poisson distribution. At ISO 800, a well-exposed photosite might collect 200 photons on average, with a variation of roughly ±14. That’s ±7%. Clean enough.
In deep shadow, that same photosite might collect 5 photons on average, with a variation of ±2.2. That’s ±44%. That’s the noise you’re seeing. It’s not the camera failing. It’s the fundamental statistics of light.
The result is spatially uncorrelated noise: each pixel is statistically independent of its neighbors. No clumping. No flow. No color variation between channels. Just random values at pixel scale, worst exactly where you don’t want them.
What It Actually Takes to Simulate Grain Correctly
The engineering problem in plain terms: you need randomness that has structure.
Not white noise (too uniform). Not Perlin noise (too smooth). Something in between — band-limited, spatially correlated, spectrally asymmetric, density-dependent, and temporally independent. Every frame should get a completely new grain field, because each frame of film is a physically separate exposure event. Crystals have no memory of the previous frame.
That last one is easy to overlook and almost always wrong in grain plugins. Static grain that doesn’t change between frames looks painted on. Film grain flickers — not randomly, it regenerates completely, because the crystals regenerate completely, because the film is new.
Getting this right means modeling the process, not the output. Not “what does grain look like” but “what physical process produces grain — and how do we replicate that process with math.”
The gap between a grain filter and real film grain isn’t a quality gap. It’s a category gap.
One is a texture applied to an image. The other is the direct visual record of quantum events happening in silver crystals in gelatin. The latter just looks different — not better in an aesthetic sense, but more coherent, in the way that things produced by consistent physical laws always cohere in ways that approximations don’t.
That coherence is what you’re actually chasing when you reach for the grain slider. Knowing that doesn’t make it easier to generate. But it does tell you what you’re actually trying to solve.