This is an NTSC color wheel, in SVG.

I'm contemplating a chapter on composite artifact color. The problem is I have to teach the material to myself first.

#retrocomputing

You can't actually make a gradient like this in SVG, but there's a trick.

Just arrange a bunch of colored circles so they overlap, then gaussian-blur the shit out of them.

So this isn't like, strictly correct in the way it would be if you rendered in in Mathematica, but uh, I guess don't cite this in your doctoral thesis, and we're all good here.

If you're an old fart, you might remember this.

This is the SMPTE test pattern. Well, one of them, anyway.

You might see this if you got drunk and stayed up to 2 AM watching PBS.

It's weird explaining to people that like TV channels used to just ... go to bed. Imagine YouTube being like aight it's 2 AM we're kinda eepy over here , see you tomorrow at 8

To create the color bars at the top of the SMPTE test pattern we follow a particular trail across the color wheel.

Start at yellow on the left, then head to cyan, and just follow the lines, you'll reproduce the pattern.

As much as I generally feel naked and vulnerable when discussing anything analog, there's a certain beauty to it. These colors aren't defined by some RGB triplet. They're encoded via motion in a mathematical space all their own, and I gotta admit that's pretty cool.

The CGA's dot clock is exactly 4x the NTSC color carrier clock. That means four pixels can fit into one revolution of the NTSC color wheel, but they take their own particular path.

If I show you these pixels relative to the color carrier, can you guess what color pixels they'll turn into on a composite display?

I you guessed red and blue, I'm sorry but you are wrong. The real answer is Bordeaux and American Flag blue, to be specific.
It's Space Quest, by Sierra On-Line, which supported 16 colors on a CGA - as long as you had a composite monitor.
It's fairly easy to wrap your head around this when a game is emitting what are essentially the primary composite colors - when more than one pixel in a color cycle shows up, they mix, but since this is composite they also contribute to luma, making the color brighter. And if you actually send color as well - well, lets just say shit gets a little more complicated than makes me comfy.

The Apple II is another system with artifact color, but it looks very different than the CGA.

The Apple II is well known for four primary artifact colors: blue, orange, green and purple.

Let's plot out two additional axes, and call them I and Q.

Now what's on either end of these axes?

That's sum Apple II shit.

Welcome to the YIQ color space!

https://en.wikipedia.org/wiki/YIQ

Besides the I and Q components, we have Y, which stands for Yo, what the shit is this stuff so complicated for

YIQ - Wikipedia

@lritter @gloriouscow hmm thanks 🙏 that’s a better link to theoretical basis than I’ve usually seen

It’s usually this sort of “magic number” guff that I see

https://media.geeksforgeeks.org/wp-content/uploads/20211110163719/Screenshot2459-300x267.png

@whophd @gloriouscow yes, that's YIQ, which is, at least on the grayscale axis, closer to perceptual equivalence of colors. YCoCg is an approximation, but less costly. crytek used it for framebuffer compression: store Y in one channel, and checkered Co or Cg in the other. then later reconstruct one of the missing two color channels from neighbors. so, full rez Y, half rez color.

@lritter @gloriouscow Lossy compression, even if you hate it, provides a fascinating insight into your perceptual model and any flaws it has!

I was always fascinated how, in standard def days, red chroma was so sensitive to 4:2:0 subsampling (especially within interlaced sources). This had nothing to do with your bitrate or codec, since 4:2:0 was to blame.

But of course that’s disingenuous — any aliased upsampling (back to 4:4:4) of the subsampled 4:2:0, should have been replaced with a gradiated upsample — smooth scaling, right?

But that’s STILL not the full story! Why was red so susceptible? Green and blue, when ramping to and from black, never suffered this way. But WHY?

And the uncomfortable truth emerges … we’re doing colours wrong. We’re even just NUMBERING it all in a way that we shouldn’t be.

And it slowly dawns on you that adding up R+G+B can never be optimised. And that splitting luma and chrominance is The Way.

But that way lies mathematical pain.

So I like your YCoCg. I only knew about YCrCb versus YPrPb.

And of course CIE. But I’d love to define the units on the 1931 diagram 😝 it’s a good test to measure the model size of an LLM, actually.