WASHES · REFERENCE GALLERY · THE CATALYST
Practical Pigment Mixing
Sochorová & Jamriška. ACM TOG 40(6), SIGGRAPH Asia 2021. The Mixbox paper — the fast-forward video that started the Washes project.
Mix blue and yellow paint and you get green. Lerp blue and yellow in RGB and you get gray. The difference is that paint mixes subtractively, through absorption and scattering, while RGB interpolation averages light. Mixbox's insight: map RGB into a latent pigment-concentration space, interpolate there, and map back — RGB in, RGB out, physically plausible in between, droppable into any painting app without changing its color representation.
The strips below show both paths between the same two endpoint colors. The top strip interpolates in sRGB. The bottom strip interpolates pigment concentrations — the Kubelka–Munk coefficients K and S are mixed linearly, then the reflectance of the mixture is computed. That coefficient-space mixing is the physical ground truth Mixbox is engineered to approximate cheaply.
Naive sRGB interpolationLERP IN DISPLAY SPACE
Pigment-space interpolationLERP K AND S, THEN RENDER
sRGB lerp
Pigment mix
Try this
1. French ultramarine + hansa yellow, t ≈ 0.5. The classic. The sRGB midpoint is a lifeless gray-mauve; the pigment midpoint is a believable sap green. This single comparison is the entire pitch of the paper.
2. Quinacridone rose + phthalo green — near-complementary pigments. Both paths darken in the middle, but the pigment path stays chromatic far longer before collapsing toward black, the way real complements mud out on a palette.
3. Titanium white + any dark pigment. Watch the pigment-space tints: a little pigment in white shifts hue as well as lightness (compare against the straight-line sRGB tint). Scattering, not just absorption, shapes the mixture — the reason K–M needs two coefficients.
What's shown here is full Kubelka–Munk coefficient mixing, the slow exact computation. Mixbox itself is a fitted RGB→latent→RGB approximation of this behavior (its coefficients are the authors' own and aren't reproduced here). Washes took the other fork in the road: keep the full K–M representation and simulate the fluid too.