ACES skews hue on saturated neon

The ACES fit everyone uses is three curves applied to three channels with no knowledge of each other. On a gray that is fine. On a saturated color being pushed hard, which is the entire subject of neon work, it rotates the hue.

Five saturated colors, exposure ramping from 0 stops at the bottom to 6 at the top. Left: ACES (Narkowicz). Right: AgX.

Read each column bottom to top. Two things are happening and they are worth separating, because only one of them is the headline.

The obvious difference is saturation. The left half stays vivid much further up the ramp; the right half desaturates steadily toward white. That is AgX doing exactly what it is designed to do, and it is a real cost, not a bug.

The subtler difference is hue, and it is the one that matters. Compare the top of the two red columns: the ACES one has walked to a warm cream that is closer to yellow than to the red it started as, while the AgX one is a pale version of the same red. The magenta column does the same thing toward peach. The blue and green columns barely move under either, which is honest and worth knowing: the skew scales with how far apart the channels start, so a color already near a primary has less to lose.

Why per-channel rotates hue

Take a neon red, roughly (1.0, 0.14, 0.06), and raise the exposure. Red is already near the top of the curve, so it compresses hard and barely moves. Green and blue are near the bottom, where the curve is close to linear, so they climb almost freely. The ratio between the channels closes, and the ratio between the channels is the hue.

So the color walks from red toward orange toward yellow toward white. Nothing is broken. It is the exact arithmetic consequence of compressing three numbers independently, and it is the reason a scene lit by saturated practicals tends to go warm and creamy when someone turns the lights up.

What AgX does differently

Two things, and the second is the important one:

That is the trade being made, and it should be stated plainly: AgX gives up saturation to keep hue. A very bright saturated color will look less saturated under AgX than under ACES. What it will not do is become a different color.

Which to use

Note that the fix is not "clamp less" or "reduce the exposure". Hue skew is not clipping. It happens well below the point where anything clips, which is why it reads as a color choice nobody made rather than as an error.

The cheap diagnostic

Ramp one saturated swatch through six stops and look at it. If the hue at the top is not the hue at the bottom, the tonemapper is rotating it. This takes a minute and it is worth doing on whatever pipeline you already have, because the answer is usually yes and almost nobody has checked.

Rules of thumb

  1. A per-channel curve cannot preserve hue. The channels have no way to know about each other.
  2. The skew scales with saturation, so it is invisible on a gray chart and worst on exactly the content you care about.
  3. AgX trades saturation for hue stability. That is a real cost, not a free win.
  4. Hue skew is not clipping and lowering exposure does not fix it.
  5. Test with a six-stop ramp of a color that has a dominant and a secondary channel. Pure primaries show nothing.

All 61 notes How to use them Credits