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.
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:
- It works in log2 exposure rather than on linear values, so the curve's shape is expressed in stops. That is mostly a convenience of authoring.
- It rotates into a different basis first, compresses there, and rotates back. The inset matrix mixes some of each channel into the others before the curve, which means a channel being compressed drags its neighbors with it. Colors approach white by desaturating instead of by rotating.
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
- Neon, practicals, magic, anything saturated and bright: AgX. This is most of the work in a stylized field renderer, and hue stability is what you are buying.
- Photographic or filmic content in a broadly natural palette: ACES is fine, familiar, and the skew rarely has anything saturated enough to act on.
- A specific film look: neither. Both are picture-formation defaults, and a look goes on top as a grade.
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
- A per-channel curve cannot preserve hue. The channels have no way to know about each other.
- The skew scales with saturation, so it is invisible on a gray chart and worst on exactly the content you care about.
- AgX trades saturation for hue stability. That is a real cost, not a free win.
- Hue skew is not clipping and lowering exposure does not fix it.
- Test with a six-stop ramp of a color that has a dominant and a secondary channel. Pure primaries show nothing.
One email when something new goes up. No newsletter, no schedule, nothing else.
Double opt-in, so watch for a confirmation email. Unsubscribe any time.