The explanation everybody gives for white clouds runs like this. Air molecules are much smaller than the wavelength of light, so they scatter blue far harder than red, and that is why the sky is blue. Cloud droplets are about the same size as the wavelength, so they scatter every colour the same, and that is why clouds are white. Two regimes, one boundary, tidy.
The page Google currently puts at the top of this question is NOAA’s, and it is the version above: cloud droplets are of similar size to the wavelength of sunlight, so Mie scattering applies, and Mie scattering does not distinguish between colours.
I went to compute the actual colour and the first number I got stopped me. A cloud droplet is nothing like the size of the wavelength of light. Its radius alone is eighteen times the wavelength, and right across it is thirty-six. And when I ran droplets that genuinely are the size of the wavelength, they did not come out neutral at all. They came out blue, clearly and measurably blue, well past the point anyone could see it.
So the familiar explanation names the right mechanism and then gives the condition backwards. Being near the wavelength is the condition under which a water droplet population tints what it scatters. Clouds are white because their droplets are nowhere near that size. There is a threshold, it sits at an effective radius of 0.294 microns, and a cloud droplet clears it by a factor of 34.
Here is what came out the other end, for a cloud lit by daylight and rendered the way every other colour on this site is rendered, as a reflectance against a perfect white diffuser.
#D7D7D6 · L* 85.99 · 0.34 from a pure neutral grey
#ECECEC · L* 93.39 · 0.18 from neutral
#FAFAFA · L* 98.17 · 0.04 from neutral
#3C3D3D · L* 25.62 · 0.54 from neutral
The lightness runs from 25 to 98. The colour does not move at all. Every one of those figures in the right-hand column is a CIEDE2000 distance from a perfectly neutral grey of the same lightness, and the threshold for seeing a colour difference is about 2.3. The largest value anywhere in the whole family of clouds I could construct was 0.508. A cloud is not approximately white. It is neutral to roughly a fifth of the smallest difference a person can detect, and it stays neutral whether it is a wisp or a thunderhead.
How the numbers were made
Three ingredients, and it is worth saying what each one is because the conclusions live or die on them.
The first is the scattering itself, from the Mie series: the exact solution for light scattered by a sphere, coded from Bohren and Huffman’s formulation. I ran it over a gamma droplet size distribution of the standard Hansen and Travis form, with an effective radius of 10 microns and an effective variance of 0.10, which are mid-range values for a water cloud. The sanity checks matter here, so: the code reproduces the textbook test case at a refractive index of 1.55 and a size parameter of 5.213 to within four parts in a hundred thousand, it recovers the small-particle Rayleigh limit to one part in a hundred thousand, and the size distribution hands back an effective radius of 10.0000 microns from the parameters I fed it.
The second is water’s absorption, from Pope and Fry’s integrating-cavity measurements between 380 and 727.5 nanometres, with Segelstein’s compilation above that. Water is not perfectly clear and the imperfection is strongly red-weighted, which is why water is cyan when you get enough of it in the way. At 450 nanometres it absorbs 0.00922 per metre. At 700 nanometres, 0.624. Sixty-eight times as much.
The third is the transport. A cloud is not a single scattering event, it is a photon bouncing hundreds of times before it gets out, so the colour depends on the whole random walk. I solved this two independent ways: an adding-doubling solution of the azimuthally averaged transfer equation, and a Monte Carlo random walk. The two agree on the spectral shape to about one part in a million and on the absolute albedo to two parts in ten thousand, and the adding-doubling conserves energy to better than two parts in a million. For the limiting case of an infinitely deep cloud neither method is good enough, for a reason I will come back to, and I used asymptotic theory instead.
The thing the familiar explanation gets backwards
Start with the claim that cloud droplets are about the size of the wavelength. Green light is 0.55 microns. A cloud droplet has an effective radius near 10 microns and so a diameter near 20, which is thirty-six wavelengths across. The dimensionless size parameter that governs the scattering, two pi times radius over wavelength, comes out at about 114. That is deep into the regime where a sphere behaves less like a resonator and more like a lens with an edge.
Now the consequence. Here is how strongly a droplet population scatters 700 nanometre light compared with 400, as a percentage. Negative means blue wins, which is the Rayleigh behaviour that makes the sky blue.
Two things in that list are worth stopping on.
The first is the top two rows. The Mie series at a radius of 0.02 microns gives minus 89.94 percent, and the molecular Rayleigh law over the same pair of wavelengths gives minus 89.34. Same answer. That is not a coincidence and it is not a bug: Rayleigh scattering is the small-particle limit of the Mie solution, so the same code produces it. Which means the sentence “Mie scattering does not differentiate individual wavelength colours” cannot be right as a statement about Mie scattering. Mie scattering is just scattering by a sphere, at any size. Whether it differentiates colours depends entirely on the size of the sphere, and at the sizes where the sphere is comparable to the wavelength it differentiates them hard.
The residual 0.6 percentage points between the Mie answer and the pure Rayleigh law is also real, incidentally. It is water’s dispersion: the refractive index is 1.3456 at 380 nanometres and 1.3290 at 780, so blue sees a slightly stronger scatterer and the slope steepens past the fourth power.
The second thing is that the tilt changes sign at 0.520 microns. Below that, a droplet population scatters blue harder, like air. Above it, red harder. And the crossing is not smooth, it is a collapse: between 0.3 and 0.75 microns the tilt swings from minus 53 percent to plus 33, which is the Mie interference structure sweeping past as the particle grows through the wavelength. Then it settles, decaying towards zero as the droplet gets properly large.
Where the whiteness actually begins
A spectral tilt in the scattering is not yet a colour. To get a colour you have to push it through the transport and the eye. So I fixed the cloud at a 550 nanometre optical depth of 20, a normal small cumulus, varied only the droplet size, and asked how far the result lands from a neutral grey of the same lightness.
The threshold is 0.294 microns of effective radius. Below it, a water droplet cloud of ordinary thickness is a colour, not a grey: a pale cool blue, between 2.3 and 2.9 CIEDE2000 from neutral, which is past the detection threshold. Above it the colour falls away quickly, and by the time you reach real cloud droplets there is nothing left.
Note where the sub-micron sizes sit in that table, because it is the part that makes the threshold feel real rather than arithmetical. Particles of 0.1 to 0.3 microns are smoke, fresh haze, and the fine end of condensation nuclei. They land squarely in the blue zone. This is why cigarette smoke looks blue against a dark background, and why a fine aerosol haze has a cast of its own rather than simply dimming whatever is behind it. Those are water-and-dust clouds in the literal sense, and they are blue because their particles are small. The thing that makes a cloud white is not being a cloud. It is being coarse.
A cloud droplet sits 34 times past the line. There is no borderline case, no marginal cloud, no weather in which it might go either way.
The two tilts, and the one that wins
The leftover 1.62 percent is still interesting, because it means a cloud is not exactly neutral and the direction of its deviation is the opposite of what you would guess.
There are two competing effects. Scattering is 1.62 percent stronger in the red, so a cloud throws back slightly more red, which makes it faintly warm. Absorption is 68 times stronger in the red, so the deeper a photon goes the more of its red gets eaten, which makes a cloud faintly cool. Which one you get depends on the thickness, and you can watch the sign flip.
A thin cloud is warm. A deep cloud is cool. They cancel at a thickness of just under 8 kilometres, which for the liquid water content I used is an optical depth of 376 and is deeper than almost anything the troposphere produces. So nearly every cloud you will ever look at is on the warm side, by a margin of a few hundredths of a CIEDE2000 unit.
The peak of the whole curve is 0.508 at an optical depth of 3.6, roughly a 76 metre wisp, and it is warm. That is the most colour a water cloud can have, from either direction, and it is a fifth of a just noticeable difference. I find that a more satisfying answer than “all wavelengths equally”, because it is a bound rather than an approximation. Nothing in the parameter space gets anywhere near visible.
You cannot build a cloud thick enough to see water in it
This is the result I did not expect, and it is worth the detour.
On snow and glacier ice the answer went the other way. Snow and ice are the same substance with the same absorption, and the only difference is how far the light travels inside before it leaves. Thin snow is white, deep ice is blue, and there is a crossing point: at about 27 centimetres of path the blue becomes visible. Keep piling it on and the colour keeps getting stronger.
A cloud does not work like that. As you make it deeper the reflectance climbs towards one, and the deeper you go the smaller the share of returning photons that came from down there. Past a point the extra kilometres contribute almost nothing to what comes back out of the top. The colour saturates. In the limit of an infinitely deep cloud it saturates at 0.369 CIEDE2000 from neutral, hex #FEFFFF, which is a sixth of the detection threshold.
That is a ceiling, not an asymptote you creep up on. There is no cloud, anywhere, of any depth, made of any amount of liquid water, that shows you the colour of the water it is made of.
To find out how far off it is, I scaled pure water’s absorption by a factor and re-rendered the infinitely deep case. It would have to be 44 times stronger before even that cloud crossed the visibility threshold.
Water is a very weak absorber and a cloud is a very short optical path through it, even when it is four kilometres tall. The liquid takes up something like three parts in ten million of a cloud’s volume. Four kilometres of cloud is about a millimetre of water, and a millimetre of water is nothing like enough to show you a colour. The thing that makes the ocean blue is tens of metres of path. A cloud cannot assemble that no matter how tall it stands.
This is also why the computation needed asymptotic theory at the top end. A Monte Carlo random walk has to follow photons until they leave or are absorbed, and in a cloud at 450 nanometres the absorption length is about ten million optical depths. The path length distribution has a heavy tail that no feasible number of simulated photons reaches, so a Monte Carlo truncates it and quietly invents a ceiling of its own. My first run did exactly that and reported a ceiling six times too low. The adding-doubling solution has the opposite problem: its residual energy leak, about one part in a thousand after fifty doublings, is larger than the absorption signal it is trying to measure. Both are fine up to an optical depth of a few hundred, which covers every real cloud, and above that the weak-absorption asymptotic result is the only honest tool.
So why are some clouds grey
Because you are looking at the wrong side of them.
Everything above is reflectance, which is the sunlit top and the sunlit flank. A grey cloud is almost always a cloud whose base you are under, and a base is lit by whatever got through from above. That is transmittance, and transmittance falls as the cloud thickens for exactly the reason reflectance rises.
That is the grey, and it is a complete account of it. Lightness from 95 down to 15 across the range of real cloud depths. The chroma over that whole span never exceeds 0.74, which is a third of a just noticeable difference. Across every cloud I computed, top and bottom, thin and deep, the lightness moves by 85 points and the colour moves by less than one.
Which is the answer to “why are clouds grey” in the only form that means anything: grey and white are the same colour. A grey cloud is not a different kind of cloud or a differently coloured cloud. It is the same neutral, further down the lightness axis, because there is more water between you and the sun. If that sounds like a cheat, it is the same cheat your language is already playing: the words for grey are words for lightness, and the thing they name has no hue to lose.
NOAA’s page attributes the grey mainly to contrast, that the bright background overwhelms the darker cloud in front of it. That is a real effect and it is doing some of the work, but it is not needed to explain the grey. A thunderhead base at 4.5 percent transmittance is #3C3D3D measured against a white diffuser, with no observer and no background involved. It is dark on its own merits. Contrast makes it look darker still.
Where the blue in a blue-grey cloud comes from
One thing the transmittance table does not explain is the blue. Storm cloud bases do not look like neutral charcoal, they look blue-grey, and that is not an illusion. It just is not the cloud.
Take that #3C3D3D base, which has a chroma of 0.49, and put ordinary clear air in front of it. Air both dims what is behind it and adds its own scattered sunlight, the airlight, and the airlight is blue for the same Rayleigh reason the sky is. I used the Bodhaine Rayleigh optical depth, which gives 0.01213 per kilometre for a horizontal path at sea level, and put the airlight at a quarter of a white card’s luminance.
Two kilometres of clean air gives the cloud base twenty times more chroma than it owns. At twenty kilometres, a distance at which you can comfortably see a thunderhead, it is #415492, a definite blue, 21.7 CIEDE2000 from the neutral charcoal it actually is.
If that structure looks familiar it is because it is the same ladder lightning’s colour turned out to climb. In that piece the bolt contributed one hex code and the air in front of it contributed everything else; the whole measured range of channel temperatures moved the colour by less than a just noticeable difference while ten kilometres of air moved it 36 times as far. Clouds behave identically. The cloud supplies the lightness, the air supplies the hue, and the hue you report is a measurement of the gap.
Worth adding what a white cloud is being compared against when you call it white. In the same model the clear sky comes out at #618ACB and a small cumulus at #D7D7D6, which are 30.3 CIEDE2000 apart, split almost evenly between lightness and chroma. Half of what makes a cloud read as white is that it is sitting in front of something very blue and much darker.
Does the droplet size inside a real cloud matter
Clouds are not all made of 10 micron droplets. Maritime clouds run large, continental and polluted clouds run small, and the same liquid water split into smaller droplets is a stronger scatterer. So I ran the whole thing at 5, 10 and 20 microns at a fixed optical depth of 20.
- 5 microns: top #DBDAD9, 0.60 from neutral. Base #939596, 1.05.
- 10 microns: top #D7D7D6, 0.34. Base #99999A, 0.56.
- 20 microns: top #D5D5D5, 0.13. Base #9C9D9D, 0.22.
Smaller droplets, slightly more colour, in the expected direction: 5 microns is closer to the wavelength than 20 is, so it has more tilt left. The largest figure in that set is 1.05, still less than half a just noticeable difference. Whatever a cloud is made of, within the range clouds are actually made of, the answer does not change.
One more calibration, since the greys above are easy to read as “basically white” and they are not. A small cumulus at #D7D7D6 is 1.07 CIEDE2000 from CSS lightgray, which is below the threshold, so your browser ships a named colour that is a cumulus cloud to within a difference you cannot see. The same cumulus is 6.57 from whitesmoke and 5.63 from silver. A thunderhead top at #FAFAFA is 1.00 from pure white, so that one really is white, and it is the only one that is.
What the calculation assumes
Four places where this could be wrong, stated plainly.
The transport uses a Henyey-Greenstein phase function matched to the Mie asymmetry parameter rather than the full Mie angular distribution. The real phase function has a sharper forward spike and a backscatter glory, and both matter a great deal for how a cloud looks from a particular direction. They matter much less for the hemispheric reflectance I am computing, and almost not at all for the ratio between wavelengths, which is where the colour lives. The asymmetry parameter varies from 0.8588 to 0.8653 across the visible, a spread of 0.8 percent, so there is very little spectral structure in the angular behaviour to miss.
The cloud is plane-parallel and homogeneous. Real cumulus is lumpy and self-shadowing, and that is a large part of why a cumulus looks three-dimensional: the shaded flanks are much darker than the sunlit top. But shadow is a lightness effect, and we have already established that the entire lightness axis of a cloud carries no hue. Three-dimensional geometry makes clouds more interesting to look at without making them any more coloured.
Aerosol is absent. Real clouds form on and contain dust, salt, soot and sulphate, and some of those do absorb selectively. Soot in particular darkens a cloud and, because its absorption is slightly stronger in the blue, warms it. That is a genuine route to a tinted cloud, and it is the reason smoke-laden clouds over a fire look dirty rather than white, but it is a contaminant colour, not water’s.
Ice is absent. High cirrus is ice crystals, not droplets, and they are hexagonal rather than spherical, so Mie theory does not apply to them. Ice absorbs a little less in the red than water does, so the expected effect is a cirrus cloud being even more exactly neutral than a water cloud. The famous coloured cirrus effects, iridescence and sun dogs and circumhorizontal arcs, are interference and refraction, which are angular colours from a narrow range of crystal orientations. They are not the cloud’s colour any more than a rainbow is the rain’s.
The thing worth keeping
What I like about this one is that the standard explanation is not guessing. Somebody did know the right mechanism, named the right theory, and then compressed the condition into a sentence that reversed it. Mie and Rayleigh are not two kinds of scattering with a boundary between them, they are one solution with a size parameter, and being near the wavelength is not the flat regime but the opposite. Close to the wavelength is where the interference structure is violent and the colour is strongest. You have to get well clear of it before things go neutral, and the price of admission is 0.294 microns.
The second thing is how much of this question turns out to be about lightness pretending to be colour. White cloud, grey cloud, dark storm base, bright anvil top: four things that language treats as four appearances, and they are one neutral spanning 85 points of lightness with under one unit of chroma anywhere in it. The only real hue in the whole scene comes from the air in front, and the further away the cloud the more of it you get. Ask what colour a cloud is and the honest answer is a number on one axis and a shrug on the other two.
If you want to find out how well you can read a neutral without a reference next to it, which is harder than this article makes it sound, that is what this site is for. The colour memory game takes the comparison away and makes you hold a target in your head. Spot the difference keeps the comparison and shrinks the gap until you lose it, which is the closest thing to the 0.508 figure at the heart of this piece, and hue sort will tell you whether it is small hue steps or small purity steps that defeat you. There is more in the full set.
For the neighbouring questions, why the sky is blue has the Rayleigh half of the same boundary, what colour snow is has the path-length argument that clouds are too thin to run, what colour water is has the absorption spectrum this piece leans on, and what colour lightning is has the distance ladder. The method behind every number here is in what CIEDE2000 is.