Pigment Mixing Bench
Spectral Kubelka–Munk mixing

Pigment Mixing Bench

Set parts of each paint and see the predicted mix next to your target colour. Each pigment is held as a reflectance curve across 36 wavelengths, split into absorption K and scattering S using K/S = (1 − R)² / 2R, mixed by parts, then turned back into colour. Scattering is what decides opacity, so the bench also shows how a mix covers the ground underneath.

Palette

The figures under each name are hue angle h, chroma C and lightness L of a 1:10 tint with white, so you can compare tubes on the same wheel as the target. Tick a paint to put it in the mix. With Mayer curves on, 17 pigments and the white use reflectance curves read from Mayer’s Artist’s Handbook; the rest are estimates. Strength assumes every tube carries the same amount of pigment, so add a swatch of each tube below to calibrate it.

Add your own paint from a swatch

Photograph your tint swatches in daylight with a white swatch in shot. Load the photo, click the white swatch with Set white selected, then click a paint swatch. Enter how it was mixed and add it to your palette.

No photo loaded. You can also type a hex code into the form.

Optional opacity test: one coat straight from the tube over a black-and-white card

With both filled in, the bench fits this paint’s scattering, which sets its opacity. Paint the stripe at your usual thickness.

Back up or restore your paints

Your paints are kept in this browser only. Copy the text below to keep a backup, or paste a backup and load it.

Spectral character

A few pigments have features a smooth curve can't guess. Each card compares three curves that all produce the same tint colour: the smooth guess, my sketch of the known feature, and Mayer's measured curve. Only their behaviour in mixtures differs. With Mayer curves selected, cards that have a Mayer curve show “Use Mayer”, which switches that paint between Mayer’s curve (ticked) and my sketch (unticked). With Estimates selected, and on the two cards without a Mayer curve, “Use sketch” switches between my sketch (ticked) and the smooth guess (unticked).

Smooth guessMy sketchMayer measured

Swatch priorities

Which swatches would improve the bench most. A tint swatch (one part paint to ten parts white) sets a tube’s real strength and colour. An opacity test (one coat straight from the tube across a black-and-white card) sets its scattering, which matters for coverage, glazes and dark mixes. Julian’s own tubes come first; paints you add appear in your copy of the palette.

PaintStatusCurveScatteringSwatch to makePriorityWhy

Spectral library

Every paint in the app as a 1:10 tint with titanium white, plus one coat straight from the tube over black and white to show its opacity, ordered round the wheel from yellow through red and violet to blue and green, with neutrals last. Solid lines are Mayer’s measured curves; dashed lines are estimates. The curves follow the Mayer curves / Estimates switch.

How it works

Each swatch colour is turned into the smoothest reflectance curve that produces it (Burns' method). The paint's own K/S curve is then separated from the white it was mixed with: K/Spaint = (K/Sswatch − (1 − c)·K/Swhite) / c, where c is the paint's share of the swatch. A mix adds each paint's K/S in proportion to its parts and converts back with R = 1 + K/S − √((K/S)² + 2·K/S).

For the pigments under Spectral character, a known feature (an absorption band, a band-gap edge, a red window) is added to the paint’s K/S curve, then three gentle correction terms are solved so the swatch still reproduces exactly. The result is a different curve for the same colour: a metamer chosen to carry real behaviour.

Mayer’s curves are tints with titanium white at a stated percentage by weight. Using the densities printed on each page, the app converts those to proportions by volume, then separates the pigment’s K/S curve from the white’s. Rutile titanium white from page 116 replaces the estimated white for every calculation. The readings were taken by eye from photographs of the charts, so treat them as accurate to a couple of percent.

The bench uses the two-constant form of Kubelka–Munk. Each paint has an absorption curve K and a scattering curve S, relative to titanium white. Mixing averages K and S separately by parts, so an opaque paint and a transparent one with the same tint colour now behave differently in dark mixes, glazes and coverage. Mayer’s full-strength curve, together with his tint, gives each pigment’s S. His full-strength readings sit on a floor of about 4% that is surface gloss, so that is removed first (a Saunderson correction). For the strongly absorbing transparent organics (phthalocyanines, quinacridones and dioxazine), his full-strength films appear to have been read over a light backing, which makes their scattering unreadable, so those use a typical value for their pigment class and say so. Coverage over a ground uses the Kubelka–Munk formula for a layer of given thickness.

Earlier versions used the single-constant form of Kubelka–Munk, which works best for tints with plenty of white. Curves recovered from photos are smooth guesses, so two paints with the same colour but different real spectra will look identical here. Treat results as a strong starting point, then confirm on the palette.