Skip to content
Lens · TechniqueBeginner

Vignette & film grain

Darken the corners of the frame and sprinkle it with moving noise, the two marks a real camera leaves on its picture.

UVTimeScreenScreen / post

Cards

One live example to tweak, learn and copy.

How it works

Real lenses pass less light toward the corners of the frame than through the middle, so photos and films darken toward the edges. That falloff is the vignette. Film adds its own texture on top: the image is made of tiny light-sensitive crystals, randomly placed and different in every frame, which shows as a fine moving grain. Digital sensors have a cousin of it, noise, strongest in the shadows.

Both are cheap to fake in one post-process pass, and both pull the eye:

  • Vignette. Measure each pixel’s distance from the center, with the aspect ratio corrected so the shape stays round, and pass it through a smoothstep to get a soft ring that scales the color down. It frames the subject and hides the flat, digital look of evenly lit corners.
  • Grain. A hash of the pixel’s position and the frame number gives a different random value per pixel per frame. Scaled small and added or multiplied into the color, it reads as film. It also breaks up banding in smooth gradients, the same way dither does.

Unity and Unreal have both built in; Godot has neither. Writing them yourself makes sense there, on the web, for a look the built-in one doesn’t offer (a projector’s flicker, a tinted stock), or to control where in the chain they run: after tone mapping, so the grain doesn’t get compressed along with the highlights.

Further reading