Color.
Three cones, give or take.
thin-film interference over a Voronoi thickness map; cursor proximity is the viewing angle. WebGL2, no WASM and no shader build step. -> iridescence.js
A cuttlefish presses against gravel and the gravel-color happens in its skin. It's geometry, not pigment. Stacks of crystal layers inside the cells, interfering with whatever light hits them, picking which wavelengths bounce back. The morpho butterfly does the same trick from a completely different phylum. Oil on a puddle, same trick. Move your head and the color moves with you.
Before going further: I can't see most of the colors I'm about to walk you through. I have two cones where standard issue is three. Christmas trees and their ornaments tend to merge on me; I read stoplights by position. I'm also bipolar and lefthanded, neither of which is relevant, but you may as well know what kind of person you're following around.
Past red there's infrared, which is heat. Past violet there's ultraviolet, which is sunburn and skin cancer. Bees see the UV side. Snakes have a separate organ for infrared, a literal pit in their face that picks up warm bodies in the dark. We get a narrow strip in the middle, roughly 400 to 700 nanometers, and we built every painting and every screen and every color word inside it.
The eye's guesses
- μ_S 0.01
- μ_M 1.0
- μ_L 0.97
Stockman & Sharpe 2-deg cone fundamentals. The toggle slides L 15nm toward M rather than deleting the curve, because that is what anomalous trichromacy actually does. -> cones.ex
OK so. Three cones. Each one is a sensor that gets excited about a stretch of wavelengths and bored about the rest; light hits the retina, three excitement levels come out, and those three numbers are everything your brain is ever going to be told about what's there. Thousands of distinguishable wavelengths in the world, smashed down into a triple. That triple is your color.
The cone curves overlap on purpose. A wavelength sitting in the seam between two of them lights both partly, and the brain reads the ratio and assigns a name. Yellow is a ratio, not something your eye has a dedicated sensor for. Drag the slider above and watch the dots move. The height of each dot is how loud that cone is.
Now: I'm missing the L cone. The long one. The cone that's supposed to make "red" feel like a different flavor than "green." Without it my brain is running two channels where it's supposed to be running three, and the two it has keep landing in roughly the same place on a question that needs a third opinion. Christmas trees from across the room: fine. Up close, the ornaments and the needles agree about the color in a way they're not supposed to.
And three isn't even fundamental. Some women have four cones. They exist, there are studies, and they apparently see distinctions in beige paint the rest of us can't. Mantis shrimp have sixteen, which presumably means they think the rest of the ocean is functionally blind. Bees have three but their middle one sits in the ultraviolet, so flowers have whole patterns painted on them (landing strips, bullseyes) that we don't know are there. Snakes have an entirely separate organ for infrared. Snakes can see warm.
Two colors, same color
Two patches, two colors. Look at them. Now: underneath, the physical light coming off each patch is wildly different. Different mixes of wavelengths, almost no overlap. Your eye runs each mix through three cones, gets two different triples out, and reports two colors. The mix itself never reaches you; only the triple does. So if two completely different mixes happen to produce the same triple, you get one color, and nothing downstream has any way of knowing there was ever anything to disagree about.
Twelve pairs, none of them guessed: each was found by stepping along the null vector of the Machado matrix in linear RGB, then verified to collapse within 2 RGB units. -> daltonize.ex
This is what your screen runs on. Every color it shows you is a fake. The yellow on this page isn't yellow light coming off the glass, it's red and green pixels sitting next to each other in a ratio your eye averages into yellow. No yellow is involved anywhere and your eye doesn't notice. Your phone is doing it, your TV is doing it, every monitor you've ever used has been doing it. The entire industry is built on a loophole in your retina.
It's also why clothes look one color in the store and a different one at home. The lights in the store and the lights in your kitchen are different spectra, hitting the same shirt, getting averaged through your cones into different triples. The shirt never changed; the light did. (Buy clothes outdoors.)
Toggle the button above. The patches were two colors. Now they're one color, and they haven't moved. My cones run the average and it lands in the same place for both. To a trichromat looking at this: two clearly different patches. To me looking at this: one patch, twice.
Where the screen can't reach
sRGB and Rec.2020 primaries as triangles in CIE xy, clipped against the spectral locus. Every wavelength-to-coordinate step is a pure function, which is why it is testable without booting a socket. -> cone_math.ex
The filled-in triangle is your screen, the colors it knows how to mix. The rings around it are fancier screens. The whole horseshoe is the set of colors a real eye can have. Every display ever built reaches into that horseshoe and grabs a triangle. None of them get the rest.
Three primaries, three corners. The screen has a red pixel, a green pixel, and a blue pixel, and everything it ever shows you is a mix of those three. Anything outside the triangle is a color a real eye can have that the screen literally can't make.
sRGB is what most monitors are doing. DCI-P3 is what newer phones and recent Apple laptops do. Rec.2020 is what high-end TV manufacturers gesture at and almost nobody owns. Bigger triangle, bigger triangle, bigger triangle. Still a triangle. Still missing the rim.
That X is sitting at a real wavelength: a deep spectral red, around 700 nanometers. Your eye can see it, a sunset is partly made of it, and no screen in your life is going to render it accurately. I marked it with a wide-gamut color request, so on a fancier display it might look a touch more saturated than its surroundings. On a normal display it gets clamped down to the closest red the monitor has, which is probably what you're looking at.
And the whole diagram is trichromat. The map of what your screen can't reach was itself drawn to be drawable by your screen. The horseshoe you're looking at is already a compromise.
Language carves it up
OK so cones cut up the wavelengths. Then language comes in and cuts up the cones, and different languages cut them in completely different places. The line your language drew feels obvious to you and can be invisible to someone whose language drew it somewhere else.
How many words does a language need for color? Up to the language. English commits to eleven basic ones: red, orange, yellow, green, blue, purple, pink, brown, black, white, grey. Some languages get by with two: one warm word, one cool word. Both work fine for the people speaking them, and both sets of speakers are looking at the same wavelengths. Each one thinks its own partition is the obvious one.
the chips
- siyó
- sitá
- rosá
- sawaró
- chó
- lá
- barósa
- lamá
- rosabó(chami)
Real World Color Survey fieldwork: 40 hues x 8 lightnesses, each chip carrying the modal term and the fraction of speakers who agreed. Aggregated offline, then generated into an Elixir module rather than queried at runtime. -> Timbre
Each chip up there is painted with whichever term most speakers reached for; the opacity is how often they agreed on it. The faded chips are the ones the speakers argued about, the places where the language hasn't settled.
The toggle cycles four languages from the survey, and none of them carve it the way English does. Nafaanra runs the whole grid on three words. Tarahumara has one word, siyó, stretched across green and blue together, a single color where English insists on two. Whether the seam between green and blue is one thing or two isn't in the chips; it's in the speaker. English speakers tell two chips apart faster when a name-boundary falls between them, so the boundary did some actual work inside the head. The chip on the chart didn't change; you did, when you learned the word for it.
Hand-curated boundaries, unlike the chip grid above. Each language is a list of cut points along one spectrum, which is the honest way to show a split nobody has surveyed at chip resolution. -> splashes.ex
Russian splits blue in two: синий (siniy), голубой (goluboy). Mongolian splits it more dramatically: хөх (khökh) for winter ice, цэнхэр (tsenkher) for summer sky. Hungarian goes the other direction and splits red instead. None of these are translation problems. They're different cuts of the same continuous ribbon, and every cut goes all the way down. It changes how fast the speaker can tell two chips apart, which is wild if you sit with it.
Some languages don't even cut along hue. Zulu -mnyama can cover black, dark blue, and dark green together; the partition is lightness, not position on the ribbon.
And then, across hundreds of languages, there's a rough order things show up in. A language with three basic color words always uses black, white, and red. Add a fourth and you get green or yellow. Add a fifth and you get the other one. Blue shows up late, possibly because blue is uncommon in nature outside the sky, and even that took a while for various languages to commit to as a separate thing.
Some languages skip abstract color words entirely. Yélî Dnye, on Rossel Island, names colors by what they remind you of: the night sky, ripe pandanus, burned wood, water at dusk. The comparison does the work the abstract word would do, and it carries more with it; "burned wood" tells you more than "brown" does, assuming you've seen burned wood. Whose system is the weird one.
And new color words are still being made up, right now. Crayola named Macaroni and Cheese, Razzmatazz, Outer Space. Pantone declared Living Coral the Color of the Year in 2019, like an emperor naming a province. A few of these stick and most of them don't, and the list of basic terms is still being argued over.
I learned the word "red" before I figured out I wasn't seeing whatever the word was pointing at. The word still works fine for me. I can usually buy red sweaters on the second try. Some of the lines on that chart above are real to their speakers and invisible to me. I'm trusting the chart.
What I can't show you
Everything so far had a number on it. This part doesn't.
One pair from section 3, pinned. Both patches run through the Machado severity-1.0 protanope matrix and land within 2 RGB units of each other. -> daltonize.ex
Look at those patches. Two patches, one color, to anyone looking at this page. (To me, this is a paragraph about two grey patches.) That simulation up there is a trichromat's guess at what dichromat experience is like, calculated in trichromat math and rendered on a trichromat screen. Nobody who built it has seen the thing it's trying to show you.
And it goes the other direction too. You can measure the wavelength coming off a tomato, model the cones that catch it, characterize the screen, name the word your language drops it into. All of that is on the table. The seeing of it, while you're inside your seeing of it, isn't.
There's a smaller problem and a bigger one. The smaller one is that the simulation can't show you what I see. The bigger one is that nothing on this page can show you what you see. Your seeing is happening somewhere this page doesn't reach.
There's a thought experiment about a scientist who learns everything there is to know about red and then sees it for the first time. I've been running it backwards my whole life.
After
The same wavelength-to-sRGB table as the opener, run back at a coarser step. Each band is a specific wavelength rather than an interpolation between two of them. -> spectrum.ex
The same spectrum, back where it started.
You can probably play Lite Brite without consulting anyone, and read a stoplight from a block away without checking which lamp is lit. Those events land inside you differently than they'd land inside me. What it's like for them to land at all was never going to fit on this page.