Background: I’m a game dev, graphic engineer, new to ACES (not even know about it few month ago), have some superficial knowledge about spectrum, color space and so.
Several month ago, as Unity3D with Universal rendering pipeline begin to offer ACES tone mapping option, and our game look MUCH better with it, we decide to switch to ACES. Our artists soon discover that bright blue turn magenta with ACES tone mapping on. Just like sphere and crystal on robot’s fingers and arms in following image.
With some days of head scratching googling, I manage to find high light fix matrix from Scott Dyer. With the high light fix matrix, magenta artefacts are gone, and over all picture looks much better, everyone in our team was happy.
After several month of developing and assets creating, our visual effect artist told me that they find out that they lose access to high saturate color. I first respond with my gut and tell them this is by design, bright light saturate all cone cells, wash out and desaturate, this behavior mimic human vision. Until they show me an example that even sRGB linear value lower than 1 still desaturate heavily, like the sphere below, my shader simply output #0000FF in sRGB color space, it became #0056d0 after tone mapping.
More head scratching, googling, trial and error, I find out it’s the highlight fix make color with luminance around 1 desaturate premature. But this time I can’t find any solution from internet, except an open issue and a post it mentions.
Desperately, my poor programmer’s choice is to lerp the result from high light fix and original color like this with a _HighLightFix around 0.35 and add some contrast and saturation with color adjustment post process.
aces = lerp(aces, ACES_highlight_fix(aces), _HighLightFix)
These voodoo works, I can now produce very saturate color without those magenta artefacts, just like this:
Our artists accept this happily, but I’m still with little confidence: What if something else look wrong several month later? Will this trick broke at some edge case?
My question is now, why the highlight fix will lead to premature desaturation? Is it related to the issue ? Will the lerping trick shot on my toes sometimes later? Is there any more elegant solution to this kind of problem?
Thank you very much for reading such a long post, and any advice would be appreciate!