Grain & Noise Textures 12
Textures · 12 files · CC0-1.0
Twelve 1024 × 1024 textures that tile in both directions without a visible seam — the contact sheet above shows every texture across its own tile boundary. All of them are generated in Node from a seeded PRNG and a wrap-around gradient-noise lattice, so nothing is photographed, scanned or sampled, and the pack can be regenerated byte-for-byte with node src/content/assets/grain-noise-textures-12/make.mjs.
What’s inside
- Film grain · light / mid / heavy — mid-grey (#808080) emulsion grain, lightly clumped. Blend with
mix-blend-mode: overlayorsoft-lightfor a neutral result; the grey midpoint means it adds no overall tint. - Paper fibre · cream / kraft — tinted stock with low-frequency mottle, tens of thousands of short pulp fibres and a fine tooth. Use as a background or multiply it over flat colour.
- Fractal noise · large / medium / fine — soft clouds at three lattice scales. Ideal as displacement maps,
mask-imagesources, GLSLtexture2Dnoise lookups and gradient-mesh breakup. - Scanlines — 4 px period, soft dark line, slight phosphor flicker. Tile with
background-size: 1024px(or 512px for a finer screen). - Halftone dots — 45° screen, dot size driven by a tileable gradient. Works as a luminance mask for print-style reveals.
- Brushed metal — anisotropic horizontal streaks on a cool grey; combine with a metallic PBR material or use as a roughness map.
- Dust & speckle — motes, hairs and soft bokeh on black. Add with
mix-blend-mode: screenfor a projector / film-scan feel.
Usage
.grain::after {
content: ""; position: absolute; inset: 0; pointer-events: none;
background: url(/assets/packs/grain-noise-textures-12/film-grain-mid.webp) repeat;
mix-blend-mode: overlay; opacity: .5;
}
For animated grain, shift background-position by a random multiple of a few pixels each frame (or offset a <canvas> draw of the tile) — because the texture is seamless the jump is invisible. In Three.js set texture.wrapS = texture.wrapT = THREE.RepeatWrapping.
Download
- Download ZIP (12 × WebP)2.0 MB
- film-grain-mid.webp338 KB
- film-grain-light.webp184 KB
- film-grain-heavy.webp385 KB
- paper-fibre-cream.webp197 KB
- paper-fibre-kraft.webp226 KB
- fractal-noise-large.webp12 KB
- fractal-noise-medium.webp34 KB
- fractal-noise-fine.webp76 KB
- scanlines.webp45 KB
- halftone-dots.webp334 KB
- brushed-metal.webp216 KB
- dust-speckle.webp48 KB
- LICENSE.txt
License: CC0-1.0 — Original work by MOTION/LAB, synthesised procedurally from a seeded generator and released under CC0 1.0 — no attribution required.
- textures
- grain
- noise
- seamless
- tileable
- overlay
- halftone
- paper
- webp

Used in these effects
Noise Gradient Mesh Background
A full-screen fragment shader blends four drifting colour fields through domain-warped simplex noise, adds animated film grain and a soft vignette, and lets the pointer gently pull the warp; a CSS gradient stands in when WebGL or motion is unavailable.
- threejs
- glsl
Scroll Displacement Transition
A full-bleed WebGL plane, matched every frame to a DOM frame, melts between four procedural images as a pinned section is scrolled — a fractal-noise mask drives a liquid front with pixel displacement and a chromatic split, while captions hand over per segment.
- gsap
- scrolltrigger
- threejs
- glsl
RGB-Shift Image Hover
Four image tiles share one WebGL renderer; hovering a tile splits its red and blue channels along the pointer's direction (offset scales with velocity), zooms the UVs 1 → 1.08 over 0.8s and tears the first 150ms into glitched horizontal slices.
- threejs
- glsl
- gsap
- canvas2d
Spotlight Radial Reveal
A fixed near-black overlay with a radial mask hole is a torch beam: its position and radius are scrubbed along a keyframe path as the page scrolls, lighting each exhibit in turn; the cursor leans the beam on desktop and the hole opens fully at the end.
- gsap
- scrolltrigger
Section Background Colour Shift
Five chapters each carry a ground colour and ink colour in data attributes; when a chapter crosses a sensor line the body background and text tween to match, while a floating swatch readout names the colour.
- gsap
- scrolltrigger