Sharp-Bilinear Shaders for Retroarch
github.com
github.com
You start to realize that these artists not only crafted sprites specifically for the resolution and color constraints of console, but also for the unique display characteristics of the CRTs that were used at the time.
Here are a couple of my favorites:
https://twitter.com/CRTpixels/status/1461432490636234756
https://twitter.com/CRTpixels/status/1484553881329745925
Sharp pixels are fine for modern pixel art, but some of the old stuff looks much better using a CRT or CRT-shader (and sometimes even NTSC color effects matter).
Yes, I built a custom MAME cabinet around a 27-inch Wells-Gardner multi-scanning arcade CRT with authentic arcade buttons, sticks, trackball and spinner for this reason. Although some advanced shader emulators are recently getting closer in some games, there's still usually a visible difference with a real CRT. Whether that difference matters to you in the games you play is up to you.
If you get a CRT for emulation of classic arcade machines, look into GroovyMAME, which is a dedicated, synced fork of MAME with changes under the hood specifically to support accurate CRT display. Arcade machines often had different, non-standard resolutions, frame rates and scanning frequencies which makes visually accurate emulation even more challenging than emulating home game consoles like Nintendo. For accurate appearance, some arcade games require tweaking the config file to ensure the correct resolution and scanning frequency are sent to the CRT but once you've set these, with a multi-scanning CRT it's possible to achieve essentially perfect emulation of a wide variety of raster CRT originals.
I certainly don't tweak the config file for each of the thousands of games emulated by MAME. For most, I just go with the defaults which are usually close enough. However, for a few dozen games that I played the most back in the day (and a couple of which I actually owned a cabinet), it makes a noticeable difference to me.
There are dedicated scan converters to adapt HDMI to composite, S-Video or analog component but they come with various quality or accuracy trade-offs. The best way to output analog to a CRT is to instead use an older graphics card with native analog VGA output (usually on a 15 pin connector). The last widely distributed PC graphics cards with native analog out were circa roughly 2014, so many HN readers probably have a few kicking around in a parts bin. Emulation is a great way to put these older cards back into useful service as their 3D capabilities and memory sizes are inadequate for modern gaming but still exceed the requirements for emulating most 90s and earlier arcade machines and 16-bit era home game consoles. I'm currently using a Radeon 3850 in my dedicated cabinet. With a fast enough CPU (circa 2016-17) and recent emulator improvements, now home consoles such as most PS1 and even many PS2 and Gamecube titles can be fully emulated. All out of parts bin and thrift store grade components.
People who see my MAME cab are often impressed by how great the games look when properly emulated and displayed through a quality analog signal chain. The best part is that now new generations of players who've never seen these games are discovering just how fantastic they are. While modern AAA games certainly have spectacular visuals and scope, the harsh constraints imposed by 8 and 16-bit era hardware forced the best games to really nail the game play and feel in ways modern games rarely do.
I'm constantly switching back and forth between real hardware and consoles with an ossc (upscaler device). No doubt CRTs look better for these games.
However if you are stuck with LCD, N64 and playstation games look better on an emulator rather than through a hardware upscaler.
Same with wipeout 2097 on PS1 emulator.
However Ive noticed played 1080 snowboarding on real hardware is way way more responsive. So it's a tough call. Also emulators have bugs, like Mario's triple jump not working etc. It's all trade offs really.
There's no fundamental reason emulators need to have lots of lag. Often the culprit is a controller or controller converter that has a inherent input lag. Also your video / audio output configuration (triple buffering etc.) can introduce lag. And of course your choice of display. There are also emulation features like run-ahead, frame delay etc. unique to software emulation that can even reduce the latency below original hardware or FPGA recreations in some circumstances.
Many systems have basically perfect emulators. For some we even have emulators where there should be no known deviations whatsoever (pretty sure bsnes/higan are at that stage). I think N64/PS1 are not quite there yet, but certainly nothing game breaking like a triple jump not working.
I think it's fun to just keep trying different setups. Playing retro games on a giant 2020 TV can be just as fun as using an ancient CRT. Emulation can allow for fun things like higher resolution, endless controller options and rewind/save-state, but original hardware also has its charms.
But yes, RetroArch emulation cores, the Analogue FPGA systems and IIRC even replacement IPS screens for GameBoys address this particular issue. I can't really tell you how good of a job they do, I mostly play GB(C) on my unmodded GBC. But I also run GB games on my CRT emulation setup through RA and I definitively played some of the problematic games that use the slow display response for additional shades or fake transparency and I can't say I noticed anything wrong. There are options to control frameblending etc. in the emulator specific options, but I haven't spend any time tweaking them.
https://github.com/blitzcode/crt-240p-scale-shader/
For what it's worth I'm still using this pretty much daily a year after I wrote it. Experiencing your favorite 'content' on different displays, speakers, formats etc. is like a cheat to get excited about the same-old again.
As other commenters mentioned, "perfect" scaling is all personal preference. In my experience it does a good job with the usual jutter of 24fps on a 60FPS monitor. Never as impressive of the smooth motion of 60Hz video on a strobed 60Hz display.
[0]https://github.com/mpv-player/mpv/wiki/Interpolation#smoothm...
Thankfully, these days there is a community of emulator authors, console modders, FPGA developers, shader writers, YouTube creators and preservationists that have really dug deep into these kinds of issues and more and more implementations get it right out of the box.
Sadly not every VC game supports this feature. It's also hidden behind an undocumented button ritual to enable tje first time.
3DS VC improved things a bit with each colour palettes tuned for each game, though it brought it's own weirdness.
For pretty CRT gaming, I still recommend the Wii. It's straightforward to hack and install retroarch on and you can benefit from the component video out with many cheap and nice TVs. RetroArch can still be a bear to configure for novices, and the Wii can be a tad underpowered, but the good IO makes up for it. It also has oodles of plug and play controller options.
Sadly there's not too many other ways to take advantage of the 240p Y/Pb/Pr on consumer TVs with emulation.
OG XBox is also an option for hacking. I think the Wii is a great platform as it's relatively cheap, but following the hacking guide correctly (https://wii.guide/) and configuring RetroArch is so complicated you might as well get a more powerful solution. Raspberry Pi + one of the various analog output options with CRTPi or my more minimalist shader solution or MiSTer with the analog board / direct video are really good.
IMHO worst part of the out-of-the-box experience with RetroPie is that everything is configured for maximum performance, which kinda means worst latency. The input lag is astronomical if you're used to original hardware / FPGA emulation / CRTs or zero-lag scalers etc. You can get it to very acceptable levels for many systems, but you have to know which settings to change.
Here are the notes I took when configuring and tuning my setup:
https://github.com/blitzcode/retropie-setup-notes/blob/maste...
They're for a Pi 3B that's setup for output on a CRT TV, but like 90% should apply to a Pi4 on an HDTV.
Shaders are always a personal taste thing. Those posted here certainly get the as sharp as possible without shimmering, blurring, borders or wrong aspect look right, but there are other options if you want the CRT look.