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. Choose Ground to sample your canvas ground instead; it is kept in the middle ground button. 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.

Zinc white comes from Mayer page 115. Its curve is almost the same as titanium’s, because both are bright whites once opaque; the difference is scattering, which for zinc is taken as about 0.15 of titanium’s, so zinc-based mixes are more transparent over a ground. In oil, zinc films can become brittle, so keep zinc layers thin. In acrylic it is sound.

The Acrylic setting keeps a separate set of your own paints. Both media have a wet-to-dry preview, calibrated separately. Wet acrylic looks lighter because water in the film scatters light; as it dries the film clears and the colour darkens. The bench models that as extra scattering with no extra absorption, which is why darks shift most. Oil shifts less: as linseed oil cures its refractive index rises, so pigments scatter a little less and the paint darkens, most in darks, earths and other low-hiding colours. A passage that sinks in can look duller as its gloss settles. One swatch photographed wet and dry calibrates the size of the shift for each medium. Mayer’s curves describe the pigments, so they carry over to acrylic paints made with the same pigment numbers.

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.