My favorite shader for Arcade too!
So I was watching My Life in Gaming’s video on the Master System (check the channel out, it’s really cool) and there’s this CRT shot from the game Ys, via composhit.
I immediately noticed that it looked nothing like what one gets from emulators. So using hunter’s color mangler shader I tried to replicate those colours and kind of succeeded, noting interesting stuff in the process. The most obvious finding was that CRT greens are quite cold. It’s usually not as dramatic as in this particular case, but many games benefit from adjustments to that channel (green). Cooling it down makes things look way more natural to me.
Some images:
Capture from My Life in Gaming.
Default colour from Genesis Plus.
After color mangling.
That definitely looks a lot more like the photograph. However, in my experience, photographs of CRTs look unnaturally cool vs seeing them in person (not really sure why that is).
OTOH, there’s long been a debate over purple sky in SMB1 and green/purple water in Secret of Mana. Perhaps it’s related to white point calibration (i.e., warmer D50 vs cooler D65)? If you’re using crt-guest-dr-venom, you can try setting the D50 to D65 parameter to +100 to see if that looks more like it should to you.
This is a gif, so it looks like crap, but nevertheless, you can clearly see how the water from the waterfall actually matches the water in the pool in the D65 shot, while the normal D50 shot has purple waterfalls and green pools:
It also has a pretty significant effect on the rocks and vegetation.
The shift to a cooler temperature really makes it look much more CRT-like. I think I will run some tests.
On another note I replicated the antialiasing tip on the Twinaphex blog post for Beetle PSX HW but applied to the Kronos core instead. The change is subtle but more pleasing, Saturn needs a fix for floating point calculations like the PSX core has.
Yeah and as you can clearly see in Mana’s gif, the overall temperature of the image depends almost exclusively on the green channel! Very often, emulated games look quite warm, they have this yellow cast to them. My theory is that CRT greens are “cold”, so developers had to crank up yellows to compensate. I have traditionally tried to neutralize that by de-saturating a bit and shifting the white balance towards blue, but that makes reds turn magenta and dull, which is problematic of course. Modifying only the green channel gets you those cooler tones but still preserving the reds : )
Going back to Ys, I believe that the girl’s skin in the title screen is supposed to look like skin, not gold.
Also @hunterk, would it be possible to implement gamma adjustments per channel in the color mangler shader? And considering how much that one and image adjustment have in common, would it make sense to you to somehow merge them? A few redundancies occur when using both of them in the same chain.
@Dogway - link to that AA tip, please? There’s always some antialiasing in my presets. As you said, it makes games (both 3D and 2D) look more pleasant.
Here’s the link. Since Kronos doesn’t have a MSAA option I explicitly downscaled to 240px high in the crt-royale-ntsc-256px shader. Now I don’t know if I should have used the 320px version. Saturn emulation looks solid these days, Mednafen plays all 2D games even Astal, Super Tempo and Nanatsu Kaze no Shima Monogatari. For 3D I use Kronos with the above technique.
Ah, the SSAA post, I thought you meant something else or more recent. Thank you anyway!
Yeah, good times for Saturn games! Also, have you noticed that there’s a new yabaSanshiro core? It’s similar to Kronos (which makes sense being yabause forks). The latter is much more developed and configurable of course, but I remember YabaSanshiro standalone having very responsive controls. Single frame advance is not working properly at the moment in the new core, so I can’t test it properly, but maybe that’s why it’s here. The input lag is strong with Saturn (on average 4 frames Beetle, 5 frames Kronos).
Yes, I was in doubt on which one to use Yabasanshiro or Kronos, but found the latter being more up-to-date. What I discovered is a PP filter that applies a good antialias to polygon jaggies, but it has to be ported. For now I don’t find any other use than for parallel(?). Systems above N64 generation do well as HD games in my opinion…
As for input lag, I tried run-ahead but whatever frame number I chose it resulted in audio crackling. I did the P+K test though.
I don’t understand the nomenclature for these mods. D50 should appear yellowish on a D65 calibrated screen. Why would D65 appear like 9300K on a D65 calibrated screen? IMO it’s incorrectly labeled. That said, I think 9300K is great for NES/SNES era games since, AFAIK, NTSC-J had a cool white-point in mind.
Is already fixed in the upcomming version. It will be labeled “Color Temperature”, to make it more understandable. Although it’s referring to “Warmer Colors” and “Cooler Colors”, not color temperature in K. Ultimately, the slider will work…
This is interesting; do you have a source for this?
I’ve also noticed this. It’s just inherently really difficult to capture what a CRT looks like in person with a photograph.
Anyway, I pulled out my iPhone camera and took some shots of SoM running on my CRT monitor with a color temp of 5500K. The shots all came out looking like the D65 example in the gif.
Maybe I’ve been playing with the wrong colors all these years but a warmer temperature just looks better to me, and easier on the eyes for periods of extended viewing.
This is supposedly 5500K:
I’ve come around to this conclusion as well, at least as it applies to static image quality, but finding the right balance can be tricky. IMO the right balance avoids blending the pixels, but softens the pixel edges just enough so that they no longer appear perfectly square when seen at a normal viewing distance.
On an LCD, however, adding any amount of blur/AA just compounds the problem of motion blur, so I still prefer to keep things as sharp as possible on an LCD and just add scanlines, since I play a lot of games with fast scrolling objects and/or backgrounds. With RPGs or strategy games it’s not as big of a deal.
With a high-end monitor, you could add some blur and/or AA and use black frame insertion for reducing motion blur, and still have enough brightness to add scanlines and have a reasonably bright image and good motion clarity. To accomplish this, you would need to spend upwards of $500 on a new gaming display, though. That’s why it’s still totally worth it to have a CRT in 2019.
Sure, Wikipedia is the easiest source I can provide and also most arcade machines used it. Remember red-push from Sony TVs? This was so that red would look nice @ 9300k
The more you know
Indeed!
Guess I’ve been doing it wrong this whole time, lol. I’m going to try playing with 9300K for a while, see how it looks after my eyes adjust. It does seem to make certain colors appear more vibrant, but it’s almost too harsh coming from a warm color temp. I lowered brightness from 50% down to 40%, which helped a bit.
Yes, reading around it seems 9300K was the standard for CRT. I would say it wasn’t set in stone so a temperature on the 9000s would be ok. What I would need is a matrix transform from D65 to D93 or something like that I guess?
So here is a snapshot at D93. I reused the crt-venom to apply the matrix transform, view in fullscreen.
That’s a pretty nice looking image! Kind of reminds me of a 20" Trinitron from the early 90s.
I made a battery of screenshots in different systems and games with D93 illuminant. Most of them ranging from 50% to 70% so more like a kelvin range in the 8000s. I’m not saying this is accurate or anything but how I remember colors. For instance the 3DS version of Ocarina of Time uses the untouched palette.
those OoT shots look a lot better. Skies and foliage look much more lush with the cooler shift.
I’ve been playing SoM with crt-guest with the white point parameter at 75 and I think it makes a big difference for the better. I would say for anyone else that tries it: don’t try to do A/B testing because it’s going to look too blue after you look at the normal warm image. Instead, set it before you start playing and you won’t even notice how cool it is, just how vibrant certain colors look.
Yeah this feedback supports my idea that emulated games on lcds look quite a bit warmer than what they were meant to. I have ran more tests and am now pretty sure that it mostly resides in the temperature of the green channel (which “coincidentally”, the human eye is more sensitive to).
In the field of digital imaging, spatial resolution is mostly perceived via luminance, and the G channel contributes more than 70% to the luminance signal. Videogames are different of course but at the end of the day it all comes down to the same basic principles, we are dealing with video signals after all. So it makes sense that properly balanced greens (i.e. less yellow in this case) result in an output that is perceived as “better”.
I’m also not sure that modifying the overall white balance is the best solution for this because it will make violets, blues and purples a tad too strong, shift reds towards magenta and blue-tint whites, greys and maybe even blacks (see Shenmue and Astal shots from Dogway’s post). What I’m doing is
gr = “0.030000” gb = “0.150000”
with the color mangler shader. I guess what that does is make 15% of the green signal blue (shifting greens towards cyan), and 3% of that same green signal red. All this also depends on game, emulated system, display + calibration, etc… so those values will never be let’s say universal.
At any rate, whatever method we choose will result in gamma shifts (again, see Shenmue’s shots from Dogway). And that’s why I requested (and still do haha) per channel gamma adjustmens in your shaders, @hunterk