@Pokefan531 When I was doing the PSP shader as a basic and new one back in 2015, I had some feedback here that states the whites are too bluish, preferring perfect whites.
I can partly agree with this statement; however, in my opinion, this approach undermines the main purpose for which the shaders were created. Ultimately, you could consider keeping both options available so that everyone can choose the one they prefer.
@Pokefan531 the overall white balance do vary between screens of the same console and model.
This is a good point; however, before calculating a simple average of the measurements, we should probably check the screen vendor. It’s possible that color differences occur between different manufacturers, but may be minimal when comparing screens from the same one. For instance, the DS Lite has two known screen suppliers - Hitachi and Sharp. This could also explain why @pica200 is noticing varying tints across his units.
@pica200 And my 2 DS lites have very noticeably different LCDs. One has a red/pink’ish tint. The other looks neutral white
The challenge here would be determining how to obtain the screen manufacturer info and how difficult it is.
@Pokefan531 Also a random fact that you may agree or not, but when I play my NDS Phat or GBA SP, when playing for quite a while, my eyes may adjust its color temps to match the display’s color temps, which had me see how the screen looks without paying attention the display’s actual white balance.
Yes, I’ve also experienced this phenomenon while experimenting with the shaders that produced a red tint. I believe I’ve seen this phenomenon documented in some Color Appearance Models (CAM) as well.
@Pokefan531 Btw, I’m not sure if any tools I have uses CIELAB, but you can be the judge of that.
I’m honestly not sure. If we’re referring to a professional or specialized tool, it’s likely that they do, but I can’t say with complete certainty.
@Pokefan531 Btw, does that code automatically adjust gamma correction to any shader? When I used the colorimetry shader for the first time, it lacked any linearization or gamma corrected adjustments, so I somehow included to be gamma corrected in the process.
Talking about the “colorimetry” shader in retroarch, I think there’s a lot to say.
I’m not entirely sure what was its original intent, but considering our use case, yes, it does come with a number of issues.
First, as you also pointed out, it lacks essential steps such as the linearization and delinearization of RGB values. Additionally, it doesn’t account for chromatic adaptation, which is necessary when the source and target color spaces have different white points like in our case.
The shader also applies some questionable color compression techniques. While the functions are labeled as “hue preserving,” what they actually do is simply scale down the RGB values. Since RGB is not a perceptually uniform color space like CIELAB, this approach is suboptimal and it likely doesn’t preserve hue as claimed. For this reason, if accuracy is a priority and you are not working with very large gamuts exceeding sRGB, I think it’s probably a good idea to look for other solutions.
Lastly, I would personally recommend precomputing the RGB to XYZ transformation matrix to remove unnecessary overhead from the shader and use double-precision floating point values to achieve better accuracy. You can also use this website https://www.russellcottrell.com/photo/matrixCalculator.htm (i don’t know if they uses double precision but at least it’s quite simple and you can also compute the chromatic adaptation matrix)
If you are interested, I updated the 3DS top screen shader which handles both linearization / de-linearization and chromatic adaptation so you can take inspiration: 3DS Top screen shader
@Pokefan531 I had worked with Spotread app on Linux where it can read Colormunki Photo’s spectophotometer to see color that is non backlit. I had mixed results for GBC and GBA, as I have less saturation than what I see from those displays. That’s because both handhelds have extra layer of glass in front, so the colormunki photo has to be closer to the display to get more accurate readings. I did use the SP-001 and since the glass layer is thinner, I get a bit brighter results, and colorspace data be more closer to how I see the display’s colors.
At this point, we are entering a territory where my knowledge is limited. One thing I can say with some confidence is that, for reflective screens, color depends on the ambient light source. Unlike emissive displays, the colors can vary significantly depending on the light frequencies illuminating the screen.
I’m also unsure whether measuring very close to the screen is advisable, since the meter could block incoming light. However, I don’t own any of these consoles, nor do I have a meter, so I can’t make a definitive judgment.
Despite these limitations, I’m very interested in the results. If they are reasonably accurate, they are certainly better than having no data at all. I’m not sure if you can generate an HCFR CHC file using the spectrophotometer, but even raw data in a text file would be very helpful.
@Lorenzooone I’d like to know, from @pica200 ‘s files, how could I get the values needed for a shader to recreate the colors of the 3DS’ screens? Thanks a ton for any answer!
If you’re interested, I’ve created a 3DS shader based on @pica200’s CHC files. You can find the shader here:
3DS Top Screen Shader
If you want to extract the data yourself, you’ll first need to install the HCFR software. You should obtain:
-
XYZ coordinates of Red, Green, Blue, and White: You can get these directly from HCFR, but note that they are approximated values. For more accurate data, export the measurement report (available in my GitHub repository here). Once you have the coordinates, you can convert them into xyY and create an RGB → XYZ matrix. Bruce Lindbloom’s website (link) is a helpful reference for all the math involved.
-
Gamma values for Red, Green, and Blue channels: Open the “Gamma” tab and enable individual channels; by default, only the average gamma is displayed. These values are also included in the shader linked above.