Update: thanks for all the great explanations!
Update: thanks for all the great explanations!
The reason the visible colors form a horseshoe rather than a triangle is due to how the cones’ sensitivity ranges overlap [1]. They cannot be excited independently by the primaries of a display.
[0] https://upload.wikimedia.org/wikipedia/commons/1/1e/CIE1931x...
[1] https://upload.wikimedia.org/wikipedia/commons/thumb/0/04/Co...
I'd like to add that no light source can lie outside the horseshoe of the CIE xyz diagram: pure wavelengths are points on the curved line, everything that mixes them moves towards the inside of the space. So you're stuck with triangles that fit within it.
The green in ProPhoto RGB is shown at a ‘distance’ from the other colors that’s impossible for human photoreceptors to perceive (let’s say it’s #00bb00), because there’s no way to trigger our green receptors at such a severe distance from white — they can’t differentiate greens beyond #009900 — without our perception also mixing in some of the other colors (result: #119911) due to those receptors being analog-curve-blended rather than sharp single-frequency cutouts like quantum dot, sodium lights, or laser emission spectra. So no matter how strong a green you emit in reality, it can never reach when perceived the depth of green that ProPhoto RGB represents, because the eye can’t perceive #00bb00 green as being different from #009900 green, and it can’t perceive any intensity of green as #00gg00 rather than #11gg11 without optical illusions or other fun tricks like shooting your green ‘M’ receptors with pinpoint laser beams: https://news.ycombinator.com/item?id=43741013
So, the upside of having three overlapping curves is that we can distinguish different shades of similar colors with much higher accuracy, but the downside is that we cannot see undiluted green or blue. Human tetrachromats, theorized to have a fourth receptor at +/-yellow, would in theory be able to differentiate colors even more strongly, peaking at that +/-yellow versus red/green; but, perhaps, they might(?) lose a bit of the ‘imaginary’ three neon CMY colors that we synthesize from that overlap (for example #ffff00), in exchange for gaining six? new ones (#00ff00ff?). I need to consider 4-D rhodopsin interactions for longer than this comment’s edit window to be more certain of that implication :)
DxO created a wide color space a while back that they fit better to human receptor sensitivity than ProPhoto, and while I’m not qualified to judge whether it’s Better or Worse, their explanation of how they constructed it around Pointer’s Gamut — someone sampled actual real world objects to see what the strongest colors we can see in earthly reality are! — provides some very precise images showing ‘the strongest color distances we can find from white on real life objects’ versus ‘the strongest color distances from white that sRGB and ProPhoto RGB can represent’:
https://www.dxo.com/en/news/white-paper-wide-gamut/ (heading “How we designed”)
This post also does help explain in depth why having ‘impossible’ color spaces is helpful for digital processing: It lets you manipulate photos without color truncation (do your intermediate math in double-float), and then when you’re ready to ‘land’ the photo back into reality — either on sRGB, or Dosplay P3, or HDR10, or Kodak film negatives — you can control how that inevitable rounding-off of the impossible colors occurs (store the final result in half-float). Do you want to prioritize eye-searing color or preserve the fine gradients of hue, in your photo of a flower petal? There is no single correct answer, but if you do your work in ProPhoto, you’ll have the option to preserve those gradients (or to convert them to luminosity gradients!) that you would lose if you’d done your work in a more limited colorspace.
Hex code nitpicks: Colorspace pros, I acknowledge that RGB hex codes are wildly incorrect to use here, not the least of which because they encode luminosity and hue when I’m just using them as hue above, but also because they’re wildly incorrect to mix with modern color spaces. This is done solely for analogy purposes and supports the curiosity basis of colorspaces 101; those who wish to learn more are welcome to — and join us in being grumpy about web hex codes and colorspaces :D
Uh…Claude…
I believe the leading theory is that red light is given off by a variety of fruits when ripe so arboreal ancestors with that mutation could much more easily locate food. To most mammals red ripe apples and green unripe ones are all just shades of yellow so the mutation would have been like a superpower: the equivalent of eagle-eyed vision.
*edit: found the link I was after on this: https://moultano.wordpress.com/2026/06/19/where-to-find-the-...
However, in CRT displays, the color of the light emitted by the red phosphor was rather impure, far from a saturated red.
This limitation has been inherited by the sRGB color space, and because of this, the main defect of sRGB is that it cannot reproduce a lot of colors in the yellow-orange-red-purple corner.
This is very noticeable, because there are a lot of natural objects with such colors, e.g. flowers, fruits, birds, insects, clothes, whose colors appear washed out in sRGB, but they look much better on displays with greater gamut, like P3-D65 (Display P3) which is available in better monitors.
While the colors in the cyan corner cannot be reproduced well even with a laser projector, that is usually less objectionable than the poor reproduction of yellow to red colors by sRGB monitors, because interesting cyan objects are more rarely encountered (though they exist, e.g. certain gems, lichens, algae, insects, lizards and fish, certain clothes, frequently the littoral sea).
RGBY televisions do exist, but their goal is to boost brightness in the yellow region, not color gamut.
If we had primary color wavelengths that could stimulate each cone independently, then it would work just like you say, and we'd only need 3 of them. But because the cone spectra overlap, we don't have "orthogonal basis vectors" to work with. Our primary colors each excite a mix of cone responses.
But no problem right? As long as each primary color has a different response, we at least have linearly independent vectors, and any student of linear algebra knows you can mix those together to act as an orthogonal basis and get any desired excitation of the cones. Right?
And that would be true, except that linear algebra assumes you can freely add or subtract vector amplitudes, but with LEDs we can only generate light, we can't send a beam of "negative green". So we're constrained to the subset of colors where the basis vectors all have positive amplitudes. And that's the smaller color space that results.
Cone cell activation is complicated. Displays with three well chosen primaries are economical and effective, but they aren't intended to produce every perceivable color. And our chromaticity diagrams, that pointy splotch that's often used to compare display gamuts, is based on a "standard observer" that is a simplified model for human perception.
An ideal pixel would be able to emit any kind of electromagnetic radiation of any intensity, kind of fun to think about but unrealistic and impractical.
What additional primaries mathematically do is expand a gamut from a triangle to a convex polygon. While ten or a hundred primaries would be bonkers, I bet we could fit a quadrilateral or a pentagon to the perceivable gamut in ways that'd see some gains.
Anyway, things like the green (or blue -can't remember) receptor have a strong curve in the green spectrum, but also a "bump," over in red (I think).
We're an organic mess.
Looking at RGB curves for LEDs, they are three perfect little mountains. No "bumps," anywhere.
I guess that the goal is to try to mimic the "messy" human visual perception.
Also, expect these monitors to be non-cheap. Companies like Eizo are having a difficult time, justifying their prices, these days.
The green-sensitive cones overlap with the red-sensitive cones, and to a smaller extent also with the blue-sensitive.
Full saturation red and blue are possible by emitting light on the edges of the visible spectrum.
Full saturation green, however, also activates the red and blue cones.
To cover the whole gamut is impossible, but you can approximate it with ~three green tones: a 490nm deep cyan that hits blue and green but not red, ~510nm that hits red and blue equally, and ~540nm the peak of the green cone.
The RGB setup we have strikes a balance between cost and visual quality. If the cost of adding primaries goes down you can add more to increase the quality. One issue is that the signals often assume RGB (channels), so the hardware manufacturer would have to adapt the RGB signal to their multi-primary hardware.