Water Whitening

Quick Start

A problem with coatings from water dispersions is that they tend to pick up water and turn white - from light scattering. The effect can be modelled via Rayleigh Scattering.


The app is based on work from the Keddie group in U Sussex1

Water Whitening

R drop radius nm
φ water %
d Thickness μm
RI Polymer
λFromm nm
λTo nm
C 109nm4
%T Average
//One universal basic required here to get things going once loaded
window.onload = function () {
    //restoreDefaultValues(); //Un-comment this if you want to start with defaults

//Main() is hard wired as THE place to start calculating when inputs change
//It does no calculations itself, it merely sets them up, sends off variables, gets results and, if necessary, plots them.
function Main() {
    //Save settings every time you calculate, so they're always ready on a reload

    //Send all the inputs as a structured object
    //If you need to convert to, say, SI units, do it here!
    const inputs = {
        R: sliders.SlideR.value * 1e-9, //nm to m
        phi: sliders.Slidephi.value / 100, //% to fraction
        d: sliders.Slided.value * 1e-6, //μm to m
        RI: sliders.SlideRI.value,
        lFrom: sliders.SlideFrom.value,
        lTo: sliders.SlideTo.value,

    //Send inputs off to CalcIt where the names are instantly available
    //Get all the resonses as an object, result
    const result = CalcIt(inputs);
    document.getElementById('m').value = result.m;
    document.getElementById('C').value = result.C;
    document.getElementById('Tav').value = result.Tav;
   if (result.plots) {
        for (let i = 0; i < result.plots.length; i++) {
            plotIt(result.plots[i], result.canvas[i]);

    //You might have some other stuff to do here, but for most apps that's it for Main!

//Here's the app calculation
//The inputs are just the names provided - their order in the curly brackets is unimportant!
//By convention the input values are provided with the correct units within Main
function CalcIt({ R, phi, d, RI, lFrom, lTo}) {
    const m=1.33/RI
    const mterm=Math.pow((m*m-1)/(m*m+2),2)
    //I have an error of 1000 in C
    const C=1000*32*Math.pow(Math.PI,2)*Math.pow(R,3)*phi*d*mterm
    let RS=[], lambda,lm,T, Tav=0, count=0
    for (lambda=lFrom;lambda<=lTo;lambda+=10){
        lm=lambda/1e9 //to m
        Tav+=T; count++
    // console.log(100*Opacity)
    //Now set up all the graphing data detail by detail.
    let plotData = [RS], lineLabels = ["% Transmission"]

    const prmap = {
        plotData: plotData, //An array of 1 or more datasets
        lineLabels: lineLabels, //An array of labels for each dataset
        hideLegend: true, //Set to true if you don't want to see any labels/legnds.
        xLabel: 'λ&nm', //Label for the x axis, with an & to separate the units
        yLabel: '%T& ', //Label for the y axis, with an & to separate the units
        y2Label: null, //Label for the y2 axis, null if not needed
        yAxisL1R2: [], //Array to say which axis each dataset goes on. Blank=Left=1
        logX: false, //Is the x-axis in log form?
        xTicks: undefined, //We can define a tick function if we're being fancy
        logY: false, //Is the y-axis in log form?
        yTicks: undefined, //We can define a tick function if we're being fancy
        legendPosition: 'top', //Where we want the legend - top, bottom, left, right
        xMinMax: [lFrom,lTo], //Set min and max, e.g. [-10,100], leave one or both blank for auto
        yMinMax: [0,100], //Set min and max, e.g. [-10,100], leave one or both blank for auto
        y2MinMax: [,], //Set min and max, e.g. [-10,100], leave one or both blank for auto
        xSigFigs: 'F0', //These are the sig figs for the Tooltip readout. A wide choice!
        ySigFigs: 'F1', //F for Fixed, P for Precision, E for exponential

    //Now we return everything - text boxes, plot and the name of the canvas, which is 'canvas' for a single plot
    return {
        plots: [prmap],
        canvas: ['canvas'],


What causes water whitening?

When a water-based emulsion is made into a film, the hope is that the emulsion particles will film form. If the emulsion particles do not fully fuse on coating/drying, and if there are polar materials (e.g. residual surfactant) at the particle boundaries, then water can diffuse into the emulsion film and accumulate as nano-droplets in between particles. From Rayleigh Scattering theory we can deduce the transmission spectrum (less transmission = more scattering) from the radius of the nanodrops, R, the volume fraction of spherical voids of water, φ, the film thickness d, and the ratio, m, of the refractive index of water (1.33) to that of the polymer (typically around 1.5), so m is typically ~0.9. These give us the constant C:


The transmission, T, at wavelength λ is given by:


You can plot between λFrom and λTo and an average is calculated as a convenient single number.

Reducing water whitening

In addition to the obvious fact that thinner coatings give lower visible whiteness, we can reduce the refractive index of our polymer to reduce m, but that's not practical. So we need to reduce both R and φ. Note that the total volume fraction of water may be larger than φ, but in terms of scattering, generally absorbed water is irrelevant (though it might have other downsides).

Although it is commonly assumed that it is the surfactant from the emulsion polymerisation process that attracts the water and creates the scattering, the paper shows no obvious correlation with surfactant concentration - indeed their worst scattering came from a sample where they had dialysed out all the surfactant. Instead, the root cause is poorly fused emulsion particles which, if rather too rigid, will have, in the worse case, 30% voids between the packed rigid spheres. So you will get less water whitening via more deformable particles that can fill space better, plus plasticised surfaces (and the surfactant, if chosen carefully, can be the plasticiser) that allow particle sintering at the boundaries.


Yang Liu, Agata M. Gajewicz, Victor Rodin, Willem-Jan Soer, Jurgen Scheerder, Guru Satgurunathan, Peter J. McDonald, Joseph L. Keddie, Explanations for Water Whitening in Secondary Dispersion and Emulsion Polymer Films, J Poly. Sci. B:, 2016, 54, 1658–1674