Real GBA and DS-Phat colors

Hi, i’m the developer of open_agb_firm and i would like to ask for a bit of clarification on the usage of your shaders/LUTs. My goal is to have the most accurate colors and until now i have only been using the shader with the colorspace conversion. Do i understand correctly that for the best results i need a combination of that shader and a LUT? This is what i had implemented so far and an extended version with saturation, contrast and brightness is in the works:

As for 3DS LCDs i can tell you it’s a very deep rabbit hole. There are a bunch of different LCDs used by Nintendo and whenever they are calibrated or well calibrated is a literal lottery. We call it LCD lottery for a reason. Some LCDs look very warm and others very cold. And IPS has issues with the gamma curve near black. It’s an absolute mess. What we found out so far is that Nintendo intended LCDs to have a deviation from standard 2.2 gamma like this (top curves). Sorry can’t post more than 2 links with a new account: ht_tps://github.com/profi200/open_agb_firm/discussions/192#discussioncomment-10171955

Example of the difference: ht_tps://github.com/profi200/open_agb_firm/releases/tag/beta_2024-07-30

I tried to compensate for this by applying the curves at the bottom and that already helps a lot but nothing is perfect with Nintendos LCD lottery. Anyway, if you want to discuss technical details of the 3DS hardware i would recommend you to join the GodMode9 Discord or IRC (your choice, they are bridged).

Thanks for adding more info on the 3DS gamma curves and its graph. Yep I’m very aware of 3DS having different type of LCDs as well as rare IPS lottery, to which I don’t plan to review on due to rarity. But since it’s in Pure Power Gamma 2.2 rather than sRGB curve, you don’t really need the LUT shader that comes bundled from the handheld shader that corrects to near pure power gamma that was made for sRGB curve. And also, I assume the 3DS greyscale with those TN LCDs are often cold, which not even GBA’s cold LUT texture is needed either. So I’d say go with just the shader alone, to which your code of it looks pretty good to match our slang shaders of it. I do suggest adding in more options like GBA, GBA-Micro, NDS, or even VBA, since they have different colorspace on the RGB primaries appearance, along with the gamma for user’s choice.

Btw, what does the 3DS color gamut look like in your community posts?

It depends. I have a New 3DS XL with top IPS panel and bottom TN. The IPS panel is quite neutral in color temperature but the bottom LCD is quite warm. Yep, they literally mix and match everything they could get ahold off. They don’t give a sh*t if the LCDs look totally different. The situation improved a lot with the Switch. https://www.neogaf.com/threads/detailed-review-of-switch-screen-quality-and-compared-to-3ds-by-erica-griffin.1369087/

Good to know that i only need the regular shader. I will update it with the latest values later. That reminds me i always assumed the alpha channel doesn’t matter in your shaders but it looked like it’s also affected in the matrix multiplication by the luminance value. Do you override alpha somewhere to fix that? And another thing i noticed is that reds look very dull with your GBA color shader in comparison to my GBA SP (AGS-001). It has noticeably stronger reds. Is that a result of clamping on the color space?

As for color gamut i don’t have the means of measuring that right now but the LCDs are off in various ways. IPS for example sucks badly at displaying purple. And TN often looks way too washed out (mostly because of the weird gamma curves but it’s not the only factor).

Thanks for your help.

This looks like the new 3DS with IPS colorspace looks much similar to my results to GBA-SP AGS-101 and the DS-Lite, which I’m guessing that colorspace has been very similar across from DS-Lite to New 3DS, until the switch got a major difference. It’s no wonder their purple/magenta matrix has less saturation than actual sRGB colorspace. As for TN panels, yep a lot of them have wild greyscale color temperature that are more inconsistent than an IPS panel.

As for the alpha value, yeah I lowered it because since the blue color is out of gamut, I have to subtract the red color on blue matrix, and to have the white color be completely balanced, I also have to increase the red color value on either the red or green, to see where it fits. The only matrix that clips out if alpha/luminance isn’t lower, is the yellow matrix, since it takes only the red and green colors, and both would have a clipping red color, which would change the hue on the yellow. Because of that, I have to lower the alpha a little bit to show proper yellow color. Well, we do get a slightly darker image overall due to it, but still far brighter than what 3DS GBA default brightness looks.

Also, I do get comments about the red color a lot, due to the red color having a colder tint, making almost pinkish. Although my recent update from two weeks ago tried my best to have the red color be truly accurate, but that’s the exact color you see from the original GBA I used with complete flashed to 6500k and matched my monitor on the white. I thought the colorspace from the first SP models are the same as the GBA, until I thought now, maybe the colorspace changed during GBA’s life when they switched from 40 pin Sharp LCD to 32 pin Panasonic LCD? That’s when I decide to investigate of this was true given a lot of posts I’ve seen relating to GBA’s red matrix when using my color shader. I assume all GBA-SP AGS-001 models use panasonic since they have 32 pins. If you use the screen’s frontlight, or flash with a lightbulb (not flashlight since it causes rainbowing and less saturation), does the red color look like the NDS shader, or Gameboy Micro? If so, maybe it’s the reason some had noted about the pinkish red matrix.

Yeah the GBA I used for the shader is a Sharp 40 pin LCD, as the numbers on the back is 02. Sharp did the entire GBC revisions on the LCD, which explains why both GBC and GBA that I have, very same colorspace. Although I hear 32pin GBAs have darker gamma, but I have yet to see deep details on it. I also tried to see which manufacturer made the LCDs for NDS if it was panasonic or not, if the red color is the same as your GBA SP.

I should maybe mention that i have 2 GBA SP and both are AGS-001. One of them has much weaker colors. The one i mentioned is a new one i bought a few years ago and i think it’s a newer 001 model than the old one. For the new one i calibrated the contrast via the potentiometer under the battery. I did the same many years ago for the old one. My train of thought was that the old one maybe has weaker colors because it’s older and has been abused much more than the new one for example with sun light. It didn’t occur to me that we may have 2 different LCD types for the 001 models. I should see if i can make a picture.

That reminds me i made a tool to do the conversion for screenshots a good while ago.

Result with this tool (uses the shader values from before your latest release):

And i also made a whole bunch of screenshots which are all hardware accurate/lossless (the bmp files contain the raw 15 bit RGB). Beware some programs use inaccurate rounding when converting them to 24 bit. GIMP i found does it accurately. https://www.dropbox.com/scl/fi/b8b0u5hyo403fqtz3vzxk/oaf_test_shots.7z?rlkey=ds2tvrs989zf1x27esn5u0avu&st=0kse54o2&dl=1

Interesting. I only hear original GBA has two different LCD revisions, but not sure about GBA-SP 001 to my knowledge. I did hear some screens suffer from UV sunlight damage for really long periods of use. Although the GBA and GBC I have laying around didn’t have any damage, and neither the NDS Phat, and never had yellowing on my DS Lite or 3DS.

Nice tool! Since I got rid of the white balance due to variance on the white balance between units, I only have it as one color per screen colorspace. Interesting you have two versions for GBA colorspace that I made before! lol

Man, it’s absolutely impossible to capture the true look of the 001 LCDs with my very old camera. It doesn’t even capture the ThinkPad LCD correctly. :rofl: In person the SPs look much better. The left one is the oldest SP and it has slightly weaker colors but red stands out the most. Looks like the SPs are rotated on the picture but i’m 100% sure they were not. It’s the cameras optics i think. Also note that my ~10 years old ThinkPad LCD only has 75% sRGB coverage even with ICC profile. You can’t polish a turd.

Interesting! So does it look a lot like the VBA one and NDS colorspace? If so, this may be the reason a lot aren’t used to expecting the Sharp’s LCD colorspace.

Also yeah, camera, even my flagship Galaxy S23 Ultra can’t capture the screens completely well for those screens. Better presented with its contrast, but doesn’t have accurate colors completely, so I only see the red colors slightly less cold. Plus the interlacing flicker that makes it look like lines that is hard to capture due to those LCD designs.

Unfortunately i don’t have a DS phat for reference but comparing with your DS phat shaders the newer SP still has slightly weaker reds and deeper blues. The reds from your DS phat shaders are closer to my SP and the blues of your GBA Color shader are closer than the DS phat ones. But since blue is clamped i assume it it’s not an apples to apples comparison. It’s not a very good comparison anyway on a 75% sRGB display. I don’t own anything better except for a Nintendo Switch.

That’s what I’m guessing. Yeah the blue color is very much challenging even for my DCI-P3 monitor that covers more blue color. So I had to resort on relying on luminance on the white, red, and green color, which brings in the blue color. I was able to match the yellow, cyan, and magenta quite well. But yeah for any display, the hue on the red color to compare my NDS with two of your GBA SP AGS-001 would clearly show a difference more.

There’s more of mentions about the 40 pin and 32 pin display that I found. Although they say the Sharp 40 pin has brighter yellow hues, but I couldn’t clearly see how they look due to the camera not capturing the screen completely well.

Also you can question the color calibration reproduction variability of different units of the same model.

https://www.reddit.com/r/NintendoDS/comments/tqo5tt/deleted_by_user/

Now that you say it i have the impression pure white also looks warmer on the new SP despite the blueish front light. I actually have the new one half assembled so i can take it apart and see how many pins it has.

Nice! I noticed each can vary. I hear the erista Switch model has at least three LCD manufacturers, with only the white balance differing from each revision or same panel, but notably revisions. Although my Switch has InnoLux P062CCA-AZ1 lcd panel, but haven’t mesaured the white balance as of yet.

Also, someone has another screenshot of the GBA-SP 001 on same game you tested. https://www.reddit.com/r/Gameboy/comments/1doo7jm/screen_help_dust_or_dead_pixels/

I assume the red on the bottom-left is exactly what you see in your SP in person, right? Yep that does look like the NDS phat shader the more screencaps I see from Super Circuit. And also, I’m tempted to get the 001 model, but will think about it this month or so lol.

I checked hekate and it says my Erista Switch LCD panel is a JDI LAM062M109A. I think it’s the same as the one in the neogaf thread because it has a cold color temperature but very accurate colors.

I checked my 2 SPs against the reddit post you linked and i think that SP has the same LCD as my old SP. Even more interesting was the result when i used a flashlight (with bad CRI, 4500K if i remember correctly) to illuminate the LCDs. The old SP LCD gives a more washed out look with weak colors but the new SP reflects with a crystal clear and and colorful image. I did not expect such a big difference. Another observation is that the LCD in the new SP does not reflect as well when the light comes from an angle from the top. The old one is also bad but not nearly as dark. This time the old SP looks warmer than the new SP and i think i know why the old SP played the Uno reverse card :grinning:. The front light of the old SP is slightly colder than the new SP and darker which i didn’t notice at first because the difference is very small. However the LCD makes by far the biggest difference here.

I tried to aim the light as best as i can but reflections kept ruining it. This time the color difference is better visible despite the shitty camera. Also sorry again. The forum limitations are driving me crazy and the 24h wait just to get 1 post approved :skull:. I can’t upload more than 1 pic so i just packed them as archive. https://www.dropbox.com/scl/fi/j5st5h67kge97anqkrbin/gba_sp_lcd_difference.7z?rlkey=1twdqis48ibwlwill1ze58fob&st=pttucps2&dl=1

edit: Small correction but checking the pictures again i think the new SP is closer than the old to the reddit post. But it’s quite hard to tell.

Interesting! Yeah that’s what I’m guessing as well as the colorspace. The glass in the new one seems to be completely stable, but I can see how the LCD seems clearer. As for the top flashing, that’s the flaw of GBA with darker gamma even on the OG model. The GBC does the opposite with the screen having brighter gamma. My speculation with the reverse effect is because GBA uses BGR subpixels and GBC uses RGB subpixels. Yeah the screens in GBA and SP are reversed, rotated 180 degree completely, with the same subpixel look, with GBA having its tail be completely rotated, which tells me that GBA or the screen flips the screen to display well since it’s BGR. GB Micro uses RGB. But yeah, there’s an indication why GBA gamma looks darker. Well, when shot in the middle, GBA’s gamma was already low, 3.0. With the light on top, it gets darker, which most people play GBA with the lights above. If GBA uses RGB like GBC, the screen’s gamma would’ve been brighter. Yep I had to shoot the light from the bottom angle to look around 2.2. Yeah, that’s the mystery I discovered. Also, my NDS Phat uses RGB on top screen, and BGR on bottom screen, and when tilting the angle on those TN panels, one looks brighter gamma, and the other one looks darker, showing the difference on how RGB and BGR works.

That reminds me how do you handle measurements for external LCDs with the colorimeter? DisplayCal needs to control the LCD directly but that obviously doesn’t work for the 3DS or other handhelds. Is that what you use HCFR for? Problem for me is it appears HCFR is only available for Windows. I would like to do everything under Linux.