Unpacking a Palette: A Digital Journey and Tool for Oil Color Mixing & Materiality

For those of us who work with physical paint, the palette is more than just a surface. It’s a laboratory — a crucible where potential is made manifest. Each paint not just a hue, but a complex personality shaped by pigment, binder, opacity, and how it chooses to interact with others. I’ve been drawn to these interactions, seeking a more systematic, perceptually grounded understanding — beyond just intuition and uducated guesswork.

This pulled me into a digital rabbit hole while thinking about how to mix the colour of a patch of sky in a painting I’m busy with, resulting in a small browser-based utility: the Oil Paint Inventory & Mixing Simulator.
→ Explore version 0.10.4 here


From Inventory to Simulation

It began simply: an inventory system to track the paints I had. But it quickly became something more — a way to explore and visualize how real-world oil colors behave in mixtures and glazes. The aim was never just digital mimicry, but insight — a way to engage more seriously with the material intelligence of paint.

Earlier versions used first RGB, then HSL (Hue, Saturation, Lightness) for mixing. HSL was an improvement over naive RGB blends, allowing for some nuance when mixing dissimilar hues. But it still fell short in capturing what really happens on the palette — particularly around chroma collapse, transparency, and the way certain pigments dominate or recede. The simulated swatches felt thin, even artificial — too much like old 256-colour spectrums.


Anchoring in CIELAB and Physical Reference

A turning point came in shifting to the CIELAB color space (L*, a*, b*), which offers a perceptual model closer to how we actually see — independent of specific devices or displays. I calibrated each paint’s masstone using physical swatches applied over white, grey, and black, then digitized them into Lab* values. These swatches became my ground truth, forming a kind of analog–digital bridge: a perceptual reference, not just a codebase.

There’s a strange beauty in those grids — like botanical specimens pinned for study, except here it’s pigment, light, and substrate being mapped.


Kubelka-Munk: Light, Absorption, Scatter

The biggest leap came with the implementation of a simplified Kubelka-Munk (K–M) model. Rather than guessing at color interactions, this approach estimates each pigment’s absorption (K) and scattering (S) properties — based on linear RGB reflectance and adjusted by a manually assigned scatteringStrength value. For example:

  • Titanium White: very high scatter
  • Phthalo Blue: low scatter, high absorption

With this model, the simulator now does two things more credibly:

  • Mixing: K and S values are blended proportionally and converted back into perceived reflectance.
  • Glazing: Transparent layers are simulated over different substrates, using a glazeThicknessFactor and the Saunderson correction to handle compound reflections.

It’s not physics lab precise — but it’s honest enough to behave in recognizably painterly ways. Transparent paints filter. Opaques cover. Warm and cool biases in earth tones show up in complex, often unexpected ways.


What It Is — and Isn’t

This tool is not meant to replace experience, nor substitute for the subtleties of physical paint. It doesn’t model gloss, granulation, texture, or edge phenomena. But it does offer a structured way to observe and reason about relationships — hue, tint strength, layering, and the optical dance between pigment and ground – and of course, mixing & blending outcomes.

In drawing, we learn that feet, hands, and faces require us to slow down — and then slow down again. Color is no different. Behind every intuitive gesture is a wealth of interactions that we mostly ignore. This tool is one way of noticing them.


Acknowledgements

I’m especially grateful to:

  • Marnus Van Den Berg — for sharp JavaScript insights, particularly around UI control refinements and tooltip dynamics.
  • Kevin Richard John Berry — for his trained eye, excellent perceptual feedback, and suggestions around simulating transparency.

Their contributions helped bring structure and subtlety to this tool, as tough as it still is.

This project remains a work in progress, a continued exploration. I invite you to delve into the Paint Inventory Mixer yourself or engage at Github: https://github.com/AndreClements/PaintInventoryTool.

Select your colors, observe the L*a*b* data, and experiment with the Kubelka-Munk based mixing grid. May it offer you, as it does me, a new lens through which to appreciate the profound science and subtle poetry held within each tube of paint. With time, I might add more functionality, paints, brands – and what not. Requests or suggestions welcome.

Dated ~ May 2025


Related Items