I made a conversion list for developers who are implementing color correction to their software. This is specifically about how the GBA-Color shaders or Color-Mangler shader performs. Most of the color shaders are based on Color-Mangler shader.
The top one shows how it’s converted correctly. The conversion is explained.
Color-Mangler has multiple conversions.
First, it changes the gamma to 2.2 on the image, so it is darker. It is from Target_Gamma command that darkens it.
Then, we have the color values, RGB ones, luminance, saturation, and contrast applied before reversing the gamma on the next step. It is set on a dark image from the first step.
Finally, we have Display_Gamma command that does the gamma conversion on the processed image. It does reverse the gamma, so it does divide 1 with whatever the number it is set on Display_Gamma, like 2.2. (½.2) = 0.4545…
This is a similar process that the .icc profiles do on applications to have correct brightness on the colors with color correction on the image. As you can see on the final image, the color primaries have better luma levels. As you can see on the final and right image, that’s how the GBA looks when I used the actual hardware.
So here are the wrong process ones:
1. On the middle of the photo, it only does color correction with the same RGB values from the shaders above, but without gamma conversion involved. It is the same effect if you set both Target_Gamma and Display_Gamma to 1.0 to not have any gamma conversion.
It causes darker colors overall, and it is more noticable on the primary colors such as pure red, green, and blue. I’ve seen this conversion on apps like Gambatte and Sameboy where the converted colors are darker on colors. The latter has darker greens and yellows, making them more noticably dark. The Zelda image may not look as dark, but that’s because the colors on those snapshots are not originally showing pure RGB colors.
2. For color conversion, if you want to bring the primary colors to have the exact colors from the correct solution without using gamma conversion, you would have to put different values on each color values to have it exactly on the primary colors only.
However, because of that, along with the lack of gamma conversion, it causes unstable image. It looks too bright that clips through. Also, the greyscale are not grey at all, so colors are all over the place. This is even worse solution overall.
I know by doing color conversion with gamma involved, the color primaries change because it is supposed to look darker on the process in order to look great on the image overall. The gamma conversion is needed to retain both luminance and saturation from the original display to emulate well. .icc profiles does this approach since most displays only have gamma at 2.2, so it is needed.
More info about Color Conversion: