Kubelka-Munk theory

Quick Start

This is an expert-level app for those intrigued by the realities of ink printed onto scattering surfaces such as paper. Scattering washes out a colour - it's the same as adding white pigment - so for a good colour gamut you want minimum scatter. For a large ink deposit, the substrate makes little difference; the real problem is the washing out of the lighter tones. And, in general, pigment inks are less affected than dye-based inks.

The Kubelka-Munk theory used here is not especially difficult, but it's certainly fiddly when you want to use real colours to show the effect. Start with Ideal CMY inks before the messy reality of Real colours.


Ink gsm

When we print onto a scattering substrate such as paper, any scattered light that gets through the ink will "dilute" its spectrum, making it paler/whiter. This effect is worse for translucent (dye-based) inks than for opaque pigment inks and depends on the scattering of the paper itself.

The theory that describes this dilution-via-scattering effect is from Kubelka and Munk and there are many variations and refinements built up over the years. In this basic app the general effect is shown using CMY inks. The top three squares show what happens as you change your printed ink thickness and the bottom three are an idealised CMY for visual reference.

To go from ink thickness to K-M to RGB to screen rectangle involves a complex chain of logic, using the CIE 1964 tristimulus curves to create the X,Y,Z colour values then a matrix conversion to RGB using a standard conversion and lighting. Despite my best efforts there are some glitches in the chain and I had to manually tweak one of the matrix conversion values to get a satisfactory yellow.

The idealised CMY values give a plausible K-M effect. Owing to my colour-science ignorance, I cannot get the real CMY values to give convincing C and M colours. I hope to fix this in due course.

The basic K-M theory tells us that for an absorption K and scattering S, the reflection R at any given wavelength is given by:


Given that the scattering from the ink is very small (significant only to those with the utmost need for a high gamut), S is assumed to be that of the paper, Sp. When the K of the paper is Kp and that of the ink is Ki, and the weight of ink is w, then we have two formulae:

For the pigment ink K/S is calculated as:

K/S = Kp/Sp+w.Ki/Sp

For the dye-based ink, the R of the paper, Rp is calculated from Kp/Sp then the total R is calculated as:

R = Rp.exp(-2w(Kp+Ki))

For simplicity I have assumed that Sp and Kp are constants across the wavelength range (there was no obvious visible difference if I allowed them to be changed over plausible ranges) and the Ki values are specified at 10nm intervals either as idealised absorptions or as curves taken from the literature.

As admitted above, I find this colour science to be hard. If any expert would like to help me refine this app I would be most grateful and would, of course, acknowlege the help.