Search for a color mixing chart and you get thousands of them. Pinned watercolor grids, printable classroom posters, laminated cards sold next to the brushes. Put two of them side by side and they often disagree, and if you then open a digital color mixer and feed it the same two colors you get a third answer that matches neither. Blue and yellow is the clearest case. Every paper chart says green. Type the two hex codes into most software and you get grey.
That is not sloppiness on anyone’s part. There are genuinely three different operations hiding behind the phrase “mixing two colors”, and only two of them describe anything physical. This piece gives you a chart for each, then measures how far apart they are, because the size of the gap turns out to matter more than any of the fine points people argue about.
Chart one: mixing paint
Paint is subtractive. A yellow pigment looks yellow because it absorbs most of the short wavelengths and reflects the rest back. Stir in a blue pigment and you now have two absorbers in the same puddle, each removing what it removes. What survives is the narrow band that neither one took, and for real blue and yellow pigments that surviving band is green. Every mix is darker and less saturated than the two colors that went into it, which is why the result creeps toward mud as you add more.
The chart below is a standard split-primary painter’s palette, mixed fifty-fifty. The hex codes are computed rather than eyeballed, using a model I will explain further down, and they land where a painter would expect them to land.
+ | Cadmium yellow + cadmium red | #F15A00 |
+ | Cadmium yellow + alizarin crimson | #C75200 |
+ | Cadmium yellow + phthalo blue | #5B8000 |
+ | Cadmium yellow + ultramarine blue | #6E7100 |
+ | Lemon yellow + phthalo blue | #598766 |
+ | Lemon yellow + ultramarine blue | #6C7866 |
+ | Lemon yellow + cadmium red | #ED5F36 |
+ | Alizarin crimson + ultramarine blue | #542855 |
+ | Alizarin crimson + phthalo blue | #452E55 |
+ | Cadmium red + ultramarine blue | #672D4D |
+ | Cadmium red + phthalo blue | #55334D |
+ | Cadmium red + titanium white | #EE6367 |
+ | Alizarin crimson + titanium white | #C55A71 |
+ | Ultramarine blue + titanium white | #6D7CBC |
+ | Phthalo blue + titanium white | #5A8BBC |
Two entries in there are worth pausing on, because they are the strongest evidence that the model is doing real work. Cadmium yellow with phthalo blue gives #5B8000, a clean strong green. Cadmium yellow with ultramarine blue gives #6E7100, a dull olive. Painters have complained about exactly that difference for as long as both pigments have been on the market: ultramarine is a poor partner for bright greens because it carries a red bias, and the red content eats the green on the way out. The same pattern shows up in the purples. Alizarin crimson with ultramarine gives a proper violet at #542855, while cadmium red with ultramarine gives the muddy plum at #672D4D that every beginner produces by accident on their first attempt at purple.
Chart two: mixing light
Screens work the other way. A pixel is three tiny emitters and color comes from adding light, so every mix is brighter than its inputs and full strength on all three gives white. This is additive mixing, and the chart is short because with three primaries there are only so many pairs.
+ | Red + green light | #FFFF00 |
+ | Red + blue light | #FF00FF |
+ | Green + blue light | #00FFFF |
+ | Cyan + magenta + yellow light | #FFFFFF |
Notice that red and green light make yellow while red and green paint make brown. Same two color names, opposite direction of travel, both answers correct. If you want to feel this rather than read it, the Color Mixer game gives you three sliders for red, green and blue light and asks you to hit a target color with them. Five rounds is usually enough to rewire the instinct that adding things makes them darker.
Chart three: averaging two hex codes
Here is the one nobody labels. When a piece of software, or a person making a chart graphic in a design tool, needs the midpoint between two colors, the path of least resistance is to average the numbers. Red channel plus red channel over two, same for green, same for blue. It is one line of code and it looks reasonable.
It is also wrong, and not by a rounding error. sRGB values are gamma encoded, which means the number stored in a hex code is not proportional to the amount of light involved. Halfway between 0 and 255 in storage is nowhere near halfway between the two in light. To average light you have to convert both colors to linear values first, average those, then encode the result back.
I measured the gap. Five hundred thousand random pairs from the full 24-bit sRGB cube, each mixed both ways, with the difference scored in CIEDE2000, the standard that this site uses to grade every guess. A CIEDE2000 of 1.0 is roughly the threshold where a careful observer notices a difference at all, and 5.0 is a difference nobody has to look for.
- Median difference between the hex average and the correct light average: CIEDE2000 6.1
- Share of pairs above 2.0, where the error is visible: 83.9%
- Share of pairs above 5.0, where the error is obvious: 58.1%
- Worst pair in the sample: CIEDE2000 40.2
In other words, more than half the time the shortcut produces a color that anyone would call a different color. The error always runs the same direction, too. The hex average is darker than the truth, because gamma encoding stretches the dark end. Mix pure red with white and the naive answer is #FF8080 at lightness 68, while the physically correct answer is #FFBCBC at lightness 82. That is a CIEDE2000 of 14.3 between two colors that both claim to be “red, half strength”. Blue with white is worse at 17.7. Anyone who has built a gradient that looked strangely muddy in the middle has met this without knowing its name.
How far apart are the paint chart and the light chart?
Far enough that arguing about anything else is a waste of time. Using the same five hundred thousand pairs, mixing each one as light and then mixing it as pigment gives a median CIEDE2000 of 11.2, with a tenth of pairs above 29.9 and a worst case of 85. That is for equal parts of each. If you model stacking two full-strength layers on top of each other instead, a glaze rather than a mix, the two worlds separate to a median of 27.8.
The practical reading is simple. Picking the wrong chart costs you roughly twice what the gamma mistake costs, and the gamma mistake already produces a visibly wrong color in most cases. If a chart does not tell you whether it is describing paint or light, it has withheld the single most important thing about itself.
Why blue and yellow really do make green
The famous line on every paper chart is the one digital tools cannot reproduce, and it is worth understanding why, because the reason is not a flaw in the physics.
Take the most saturated blue and yellow a screen can show, #0000FF and #FFFF00, and mix them each way:
- Averaging the hex codes:
#808080, a dead grey with chroma of exactly zero - Averaging the light:
#BCBCBC, a lighter dead grey, also chroma zero - Treating them as ideal filters and multiplying:
#000000, pure black
Not one of them is green, and all three are correct for the colors they were given. #0000FF and #FFFF00 are exact complements in sRGB. Every channel that one has at full, the other has at zero. There is no wavelength band left over for green to come out of.
Real pigments are nothing like that. Ultramarine reflects a useful amount of green as well as blue. Cadmium yellow reflects a useful amount of green as well as red. The overlap between two broad, leaky reflectance curves is exactly where green survives. Feed the model real pigment values instead of screen primaries and green appears on its own, no special case required: cerulean blue with cadmium yellow comes out at #6D9A00, sitting at a CIELAB hue angle of 119 degrees, squarely in green territory.
This is not an obscure observation. Sochorová and Jamriška opened their 2021 SIGGRAPH Asia paper on pigment mixing with the same complaint, that painting software mixes blue and yellow into grey because it is built on a representation designed for colored lights, and they went on to build a practical way to run the Kubelka–Munk pigment model inside ordinary RGB. The physics has been understood since Kubelka and Munk published in 1931. The gap is in the tools, not the theory.
The one-line version
You do not need the full pigment model for a chart. For a fifty-fifty mix there is a shortcut that is defensible from first principles. Absorbance adds in proportion to how much of each pigment is present, and in a fifty-fifty mix the total pigment load stays the same, so the reflectance of the mix is the geometric mean of the two reflectances rather than the arithmetic mean. Convert both colors to linear values, multiply channel by channel, take the square root, encode back. That is the model behind the paint chart above, and it is what produces the ultramarine-versus-phthalo distinction that painters recognise.
It has a real limit and it is worth stating plainly. Working from a single masstone color per pigment throws away the shape of the reflectance curve, so the model has no way to know about the granulating behaviour of ultramarine or the staining strength of phthalo, and it will not tell you that a drop of phthalo overpowers a spoonful of anything else. For a chart of equal-parts mixes it holds up. For predicting what happens on a wet palette, it does not replace putting paint on paper.
Measuring the mud
The most repeated warning in every painting class is that mixing colors from opposite sides of the wheel gives mud. It is good advice and it is almost never quantified, so here is the number.
Taking every pair in the sample where both colors were reasonably saturated, I compared the chroma of the mix against the average chroma of the two parents, grouped by how far apart the parents sit in hue. Chroma is the CIELAB measure of how far a color is from grey, so 100% means the mix kept all the punch of its parents and 40% means it lost most of it.
| 0 to 30 degrees apart | mixing light: 98% | mixing pigment: 105% |
| 30 to 60 degrees | mixing light: 92% | mixing pigment: 102% |
| 60 to 90 degrees | mixing light: 82% | mixing pigment: 91% |
| 90 to 120 degrees | mixing light: 67% | mixing pigment: 74% |
| 120 to 150 degrees | mixing light: 50% | mixing pigment: 61% |
| 150 to 180 degrees | mixing light: 36% | mixing pigment: 47% |
The curve is steep and it is smooth. Neighbours on the wheel cost you nothing. Cross ninety degrees and you start paying. Reach for a true complementary pair at 150 degrees or more and roughly two thirds of the saturation is gone. Pigment holds on to a little more than light does at every distance, which fits the way painters describe complementary mixes as producing rich neutrals rather than flat grey.
My own reading of that table is that the standard advice is framed backwards. “Do not mix complements” treats a reliable, continuous, measurable effect as a hazard. What the numbers actually describe is a control. Hue distance between your two colors is a saturation dial with a known response curve, and the reason paintings by people who understand this look the way they do is that they are using the dial deliberately instead of avoiding it. Mud is what the dial produces when you turn it without meaning to.
Which chart do you actually need
- Paint, ink, dye, glaze, clay, hair color, icing. Use the subtractive chart. Anything where the color lives in a material and you are looking at reflected light.
- Screens, stage lighting, LEDs, projection. Use the additive chart. Anything that emits.
- Blending two colors in software. Neither chart is automatically right, because you have to decide what you are simulating. If you want the look of overlapping light, average in linear space. If you want the look of mixed paint, use the geometric mean. Averaging the hex codes simulates nothing.
- Printing. Subtractive, but with cyan, magenta and yellow rather than the red, yellow and blue on the classroom poster, and with black added because three inks together give a disappointing brown rather than a true black.
That last point catches people out often enough to be worth its own sentence. The red-yellow-blue wheel taught in schools is a workable approximation with a real historical pedigree, but it is not the set of primaries that actually works for subtractive mixing. Cyan, magenta and yellow reach a considerably wider range of colors, which is why every printer on earth uses them and no printer uses red, yellow and blue.
What we think, after running the numbers
We build color games, so we spend a lot of time watching people be confidently wrong about color in ways that are easy to measure. The mixing charts are a good example of a wider pattern. The information on them is mostly fine. What is missing is the label saying which physical situation the chart describes, and without that label a perfectly accurate chart becomes a source of confusion the moment someone applies it to the wrong medium.
The measurement that surprised us was the 83.9% figure. We expected the hex-average shortcut to be sloppy. We did not expect it to produce a visibly wrong color in more than four cases out of five, or to be wrong in a consistent direction, always too dark. That error is sitting inside a great many color pickers, gradient tools and chart graphics right now, and it is one conversion away from being fixed.
If you want to test your own instincts for any of this rather than take our word for it, the color matching game puts a target color on screen and asks you to reproduce it, scored on the same CIEDE2000 distance used throughout this piece, and the hex guessing game works the other way by showing you a color and asking for its code. Both are quicker at exposing the gap between what you think a mix will do and what it does than any amount of reading.
Related reading
- What color do two colors make? works through the individual pairs people look up most, one at a time, in both mixing worlds.
- What colors make brown covers the single most requested mix, and why it is so easy to arrive at by accident.
- Color theory puts the wheel, the schemes and the primaries in one place.
- How to read hex color codes explains what those six characters are actually storing, which is the root of the gamma problem above.
Method
The 500,000 pairs were drawn from the full 24-bit sRGB cube with a seeded generator so the figures reproduce. Light mixing converts both colors to linear values through the standard sRGB transfer function, averages, and encodes back. Pigment mixing takes the geometric mean of the linear values. Differences are CIEDE2000 computed in CIELAB under a D65 white point, using the same implementation the site uses to score gameplay. Chroma is the CIELAB C* value, and hue distance is the angle between parents in the CIELAB a*b* plane. The palette swatches are sRGB approximations of pigment masstones rather than measured spectral data, which is the main reason the paint chart should be read as a good prediction rather than a calibrated one.