2025-03-27
This is my latest NTSC CRT color emulation setup, which tries to approximate the following CRTs: Toshiba FST Blackstripe CF2005 (1985), RCA ColorTrak Remote E13169GM (1989), Sony Trinitron KV-20S11/KV-20M10 (plus at least one unknown Japanese variant with slightly different settings) (1994), and Panasonic CT-36D30B (2000) with its “Normal” color temperature setting. The non-Sony ones are based on data that I sampled myself, while the Sony ones are from data found online.
The catch: The resulting images are much darker than they need to be. If you try using it with a CRT shader, it’ll become even darker. For this reason, I’ve been using a basic bilinear filter lately.
Pay special attention to the US Sony one. My previous shaders have attempted to emulate that specific CRT’s colors, but this new implementation is much more accurate.
Note: For Genesis, you must use the BlastEm core with this shader. That emulator outputs the original hardware’s RGB levels. Some of my previous shaders allow you to correct Genesis Plus GX’s output, but I forgot to include that this time.
Download and installation
Download here: https://www.mediafire.com/file/1gmfye6js9t5gtv/crt_color_2025_03_26.zip/file
Unzip into any folder, preferrably the “shaders” folder in your RetroArch directory.
Move the .pal files into your RetroArch system directory. These are NES color palettes. To use one, make three copies of it called “nes.pal”, “custom.pal”, and “MesenPalette.pal”. Then, in the emulators FCEUmm, Nestopia, and Mesen, change the color palette to “Custom”. To use with a standalone NES emulator, look up that emulator’s own instructions.
The following instructions are for consoles OTHER THAN NES ONLY:
In RetroArch, make sure your driver for video is “vulkan” or any driver that is able to run slang shaders. Changing this setting requires a restart. Most recent PC should be capable of this. Most console ports of RetroArch are not able to run slang shaders, so they’re not able to use my shaders at all. (My NES palettes will still work; in fact, they work on emulators outside RetroArch too.)
Load any game as usual. (Note: For Genesis, you must use BlastEm with this shader. That’s my mistake.) In the Quick Menu, choose “Shaders”, and choose “Load Preset”. Navigate to wherever you unzipped crt_color_2025_03_06, and you should now see the files starting with “P68k” which each correspond to a different CRT. Pick whichever one you like–I recommend starting with P68k_SonyJP_1994. After loading it, go to “Shader parameters”, and feel free to change only these four settings to whatever you like best:
You are recommended to change ONLY these four settings
-
Enable NTSC color correction (a.k.a. red push) – Turning this off is equivalent to RGB-modding a CRT or using YPbPr Component (if available), which bypasses the NTSC color corrections.
- You may only disable this on the 2000 Panasonic CT-36D30B. This is the only CRT where you can bypass the “red push” on the real hardware because it has a YPbPr Component input, which the other CRTs don’t have.
- (Default=0.0) End-user Tint knob rotation – You are very highly encouraged to change this to whatever you like best.
- (Default=1.0) End-user Color knob rotation – You are very highly encouraged to change this to whatever you like best.
- Prior to the late 90s, everyone always had to mess with the Tint and Color settings on their TVs to make the image look acceptable, but it never would look perfect. Everyone was happy that their TV just worked.
- The defaults in my shader approximate the broadcast standard, but consumer TVs before the late 90s often had totally wrong defaults.
- In addition, game developers often didn’t have the best defaults either. In fact, many developers used RGB (except for the NES).
- Approx. Gamma (recommend 2.2) – This is the “Brightness” knob in disguise. You are very highly encouraged to change this to whatever you like best.
- “2.2” is the actual NTSC standard, but 2.0 gives the best detail in dark areas, while 2.4 later appears in the BT.1886 standard. In general, I recommend 2.2.
- Note: Do not confuse this with the other setting called “(Dual) CRT’s actual gamma”. This is best left at 2.0.
More details about how this works
The most important part of this by far is the improved KV-20S11/KV-20M10 approximation. Unlike the other CRTs here, I have never owned either of these Trinitrons, so they are being approximated solely using information from a few different sources on the internet. All my previous uploads, from before I owned a colorimeter, assumed these CRTs used illuminant C, the standard whitepoint for NTSC broadcasts. I have since discovered that the correct whitepoint is most likely 9300K+8MPCD, the standard whitepoint for Japanese broadcasts, even though the CRT is manufactured in the USA. In fact, most CRT TVs have much higher color temperatures than the standard. (More details here.)
That means, my releases from before December 2024 (which feature signal artifacts and “sanitized” presets) need their whitepoint changed to a “custom x, y” with x=0.2838, y=0.2981 (shown as 2.84 and 2.98 in the settings). That fixes the issue with them being extremely pink. While you’re at it, you should fix the demodulation settings: change the R-Y/G-Y/B-Y auto-sync to “off” (or -1), and change Color/Saturation to 0.975 and Tint/Hue Rotation to either positive 9 or negative 9, whichever one looks correct. Feel free to adjust these two Color/Tint settings to your liking, but know that these are the defaults for US NTSC.
For the other CRTs, these are ones I currently own in real life, and I have used an X-Rite i1Display 2 colorimeter to measure them. I have completely re-sampled the Toshiba CF2005, RCA ColorTrak Remote, and Panasonic CT-36D30B, and I’ve done it more accurately and carefully this time. (Note: The CF2005’s white balance couldn’t be taken directly because of its poor condition, so I had to make an educated guess: The red and green color channels both are very closely in-sync, but the blue channel is out of sync. That means the correct whitepoint must be close to this specific red/green ratio. Assuming that point is on the daylight locus, it’s about 8300K.)
Another improvement is that the Contrast, Brightness, Color, and Tint knobs are automatically calibrated for you. By default, the shader approximates the 1953 NTSC standard in the CRT’s intended region. You are still allowed (and encouraged) to adjust the Tint and Color knobs by yourself easily. Brightness is adjusted using a different setting called “Approximate gamma”, which is really a brightness setting. (That’s not to be confused with “Actual gamma”, which is the CRT’s real gamma constant–Don’t adjust “Actual gamma” unless you know what you’re doing.)
I have improved the EOTF too. When looking at sampled data, it’s easy to fool yourself into thinking your CRT is around 2.4 gamma, or that something is wrong with your setup. What seems more likely to me, just based on the data from my colorimeter, is that CRTs tend to have a gamma somewhere between 1.9 and 2.1, and that the brightness tends to be lower than the standard black level to approximate the standard 2.2 gamma. Hence, for this CRT emulation, I’ve set a gamma of 2.0 and a brightness of about -0.08 for all CRTs. In the shader’s settings, you can set the CRT’s real gamma and the desired gamma yourself.
I’m using ChthonVII’s program called gamutthingy for simulating the phosphor gamuts with state-of-the-art gamut compression mapping. For more information on that, see https://github.com/ChthonVII/gamutthingy
Something not emulated is how the 1980s CRTs have very reflective screens. Even when powered off, the screen is still a light gray. This will have to be added in an update. This also isn’t emulating these CRTs’ uncalibrated grayscales either; the white balance is constant throughout the grayscale in this shader.
NES palettes for all models except the Sony Trinitrons have been included. The Toshiba 1985 and RCA ColorTrak 1989 ones are improved, but the Panasonic 2000 ones are the same ones that I’ve already posted.
As a final note: I still apologize for not posting any video signal improvements, after months of promising.