This is an excellent question and I’m sorry my reply is very late. But I think I found an excellent image to illustrate this on.
This is an edit with sigmoid from an experimental build of mine. As of currently, sigmoid doesn’t have a similar gamut mapping as filmic v6 does. Sigmoid does its processing in Rec.2020 primaries which have a wider footprint than most displays (which are usually closer to sRGB / Rec.709 primaries).
I went pretty over the top with the contrast to illustrate these things better.
Notice the rose seems really bright and very much like the monitor primary red. There are two kinds of clipping going on here:
- When the Rec.2020 RGB values are projected to Rec.709, there might be negative RGB values introduced. The display can’t represent those, so they get clipped of. If we have a red slightly bending towards magenta but it’s out of the destination gamut, the RGB triplet might be something like RGB = (0.6, -0.1, 0.1). The negative green component is decreasing the luminance (but that’s correct since luminance stays invariant in the projection). If it’s clipped to zero, the luminance increases. Hence the rose looks so bright. Clipping of negatives like this also causes a skew towards the primaries: red, green and blue.
- There clearly is also a clipped area in the foremost petals where the reds are too bright to be displayed. The triplet might be something like RGB = (1.1, 0.0, 0.2). In the output stage, the value above 1 gets clipped to 1, so we have RGB = (1.0, 0.0, 0.2). Notice that the red and blue component got closer to each other, so the color is skewed towards magenta. This is exactly what I see going on in this image. In general this “upper side” clipping causes skews to the secondaries: yellow, magenta and cyan.
Here I added proper handling of negative destination gamut RGB values such that the luminance is preserved.
Notice that the rose got quite a bit darker and IMO looks a bit more realistic now. The “upper side” clipping issue in the foremost petals is still present. There’s also a horrible skew of the background greens toward yellow.
Here the “higher side” compensation is implemented to avoid the skew to magenta. I didn’t implement it exactly like in filmic which does it at constant luminance but aimed a bit lower.
The front petal doesn’t look magenta anymore and there’s now something that resembles its shape despite me trying hard to destroy it by cranking the contrast so high.
When one bypasses the gamut_check_RGB() call in filmic, similar things might happen. The issue causing too much desaturation (and the resulting perceived skew toward salmon) might be because the chromaticity angle preservation is so strict, while people might actually expect to see a slight skew toward yellow in these areas. So a complete removal of the gamut check isn’t a good solution in the long term, but perhaps aiming at relaxing the gamut mapping a bit would do.
(Ps. @jandren some gamut mapping experiments with sigmoid here. A bit simpler than in filmic. Works well with experimental custom primaries.)


