CRT Shader Showcase for RetroArch

In the early days of Emulation, simulating CRT characteristics was achieved by filters that manipulated the produced game image before showing on the screen. However, the result was not very accurate and often quite taxing on the CPU. With the advent of Shaders, this problem was solved.

Skip to Side by Side section

Skip to Full Sized section

We have come far when it comes to accurately emulating classic game consoles and computer systems. But there is a missing piece in that equation: the output to a screen device. Games on a CRT TVs and monitors just look drastically different than on modern LCD or LED screens with fixed pixel sizes. This aspect has to be simulated in a different way. Shaders are much more sophisticated and allow realistic and complex filters rendered on the graphics card. Nowadays we have a lot to choose from advanced solutions. Thanks to the integration into RetroArch, Shaders can be utilized by most, if not all, cores. This article is about CRT based Shaders only, ignoring handheld or other types such as painted look.

My setup and what has been compared

My resolution setup

  • My desktop and emulation resolution is set to 2560 x 1440, which allows me to use basically any Shader. Some Shader require high resolution and won’t work on lower. 4k is probably the optimal resolution, but I don’t have such a screen.
  • The image scaling of the cores are all set to integer type, which means that no uneven number of pixels are added and depends on the original resolution.
  • The output image of the core is set to 4:3, because CRTs had this format. This will stretch the image generated by the core, which is what happened on real machines connected to the TV.
  • Bilinear filtering is disabled globally and no other filter is used in the core settings.

As a consequence of these resolution settings some black borders on top-bottom and left-right on the screen will be visible, because the image is not stretched to fill entire screen.

Early concept art sketch
of the Midgar Town Square
in Final Fantasy 7

What has not been compared

  • no other type of Shaders: only CRT type of Shaders that come as a default with RetroArch are included
  • no overlays or borders: Shader with borders are ignored
  • no configuration tweaking: only default settings for the Shaders from RetroArch are used
  • no performance test: some are slow and may require a modern pc, others are very fast and optimized for low power devices
  • no motion: some Shader properties such as flicker or motionblur are not optimally pictured in still images
  • no other resolution: some Shader require high resolution to look great, others are designed for low resolution in mind too
  • no combination: some Shader are designed to be combined with others in mind and don’t look good on their own
  • no other systems tested: different systems like vertical arcade or monochrome vector games and even handhelds require special treatment
  • no other format of Shaders: on my PC the Shader formats that offered to me are in the .slang format only

List of included Shaders (28+2)

Nearest and Bilinear filtering aren’t actually CRT Shaders, but are included as a reference. I got most of the description from Libretro Docs: Shaders, Libretro Docs: CRT Royale, Emulation General Wiki: CRT shaders and Hunter K’s Filthy Pants Blog: More CRT Shaders.

NameFilenameNotes
Nearest
nearest.slangpNone. Shader disabled.
Bilinear
bilinear.slangpResampling based on simple linear interpolation.
Aperture
crt/crt-aperture.slangpHigh quality aperture grille look, like a PVM. Still looks good at non-integer scales.
Easymode
crt/crt-easymode.slangpLightweight, but good looking, even at non-integer scales. Easy to understand settings.
Frutbunn
crt/crt-frutbunn.slangpPort of “Another CRT Shader” at shadertoy. Includes scanlines, curvature and vignette.
Geom
crt/crt-geom.slangpOne of the first popular Shaders by cgwg. Has many options and variations and simulates an aperture grille display. Still looks good and is even usable at non integer scales.
Guest Advanced
crt/crt-guest-advanced.slangpGood looking and very advanced. Has ton of options to tweak and comes in many variations. Requires strong hardware. Formerly known as Guest Dr Venom
Hyllian
crt/crt-hyllian.slangpFast and nice looking one, with only a few options. Does not try to degrade image quality and comes in a few variations. Runs very well on low end hardware.
Lottes
crt/crt-lottes.slangpAims to look like “a really good CGA arcade monitor with RGB input”. Uses horizontal shadow mask with bloom, but has not many options and is a bit slow. Faster variants are available.
NES Mini
crt/crt-nes-mini.slangpImitates the TV-style Shader from Nintendos NES Classic Mini console. Basically just some light scanlines, nothing fancy. Therefore runs on anything.
Pi
crt/crt-pi.slangpDesigned to run full speed on older Raspberry Pi models at 4:3 aspect ratio and 1080p resolution. Looks good for it’s performance and can be used on any weak hardware.
Potato warm
crt/crt-potato-warm.slangpTries to imitate in a very simple and fast way the popular Royale Kurozumi Shader. Runs very fast on anything, but does not look as good.
Royale
crt/crt-royale.slangpA very advanced Shader that simulates almost every aspect of a CRT screen. It looks very good and has ton of options to tweak and set, even changing the phosphor type is possible. While it can look fine on 1080p resolution, it requires at least 1440p or higher to make it truly shine. This one is slow and requires strong hardware. Comes in many variants too.
Torridgristle
crt/crt-torridgristle.slangpVery fast and high contrast CRT style, with a strong phosphor effect.
yo6-KV-M1420B
crt/crt-yo6-KV-M1420B.slangpThis Shader is based on data from a specific real model and size of a CRT display. The final image looks quite realistic.
CRTGlow Gauss
crt/crtglow_gauss.slangpEmphasizes the rounded edges of scanlines and has a strong look to it. There are a few variants available.
GTU v050
crt/gtu-v050.slangpFocuses on blurring the image in a convincing way, ignoring scanlines, phosphor effects or any curvature. Highly configurable and can be set anything between sharp to very blurry.
MAME HLSL
crt/mame_hlsl.slangpPort of the MAME’s built-in HLSL shader. Looks fine and comes with a variety of options.
NewPixie
crt/newpixie-crt.slangpBased on and an extended variant of Mattias Shader. Notable for it’s crawling/scrolling scanlines.
Yeetron
crt/yeetron.slangpImitates the CRT effect from the Sonic Mania PC game. Looks good for it’s performance and runs well on weaker hardware.
ZFast
crt/zfast-crt.slangpRuns fast on weak hardware and looks fine at the same time.
C64 Monitor
presets/c64-monitor.slangpTries to simulate a typical Commodore 64 monitor. Uses Lottes and adds some artifacts to it.
Geom Deluxe NTSC Adaptive
presets/crt-geom-deluxe-ntsc-adaptive.slangpAn upgraded version of the regular Geom Shader, but slower and packed with much more options. This is the variant with typical NTSC artifacts.
Guest Dr Venom Kurozumi
presets/crt-guest-dr-venom-kurozumi.slangpBased on an older version of Guest Advanced, but a variant that adds the popular Kurozumi effect, to look like a professional CRT PVM/BVM.
Guest Dr Venom MaxDR
presets/crt-guest-dr-venom-maxDR.slangpBased on an older version of Guest Advanced, but a variant that tries to simulate a PVM/BVM and the goal of maximizing the dynamic range of the image. For best results, set your LCD backlight to 100%.
Hyllian Curvature NTSC
presets/crt-hyllian-curvature-ntsc.slangpBased on regular Hyllian, but a variant that adds curvature and typical NTSC artifacts.
Royale Kurozumi
presets/crt-royale-kurozumi.slangpBased on regular Royale, but a variant that adds the popular Kurozumi effect, to look like a professional CRT PVM/BVM.
Royale NTSC SVideo
presets/crt-royale-ntsc-svideo.slangpBased on regular Royale, but a variant that adds the effect of typical NTSC colors and a degraded Super Video connection.
Royale PAL r57shell
presets/crt-royale-pal-r57shell.slangpBased on regular Royale and combines it with the standalone PAL r57shell, which simulates a NES PAL composite signal.
Royale xm29plus
presets/crt-royale-xm29plus.slangpBased on regular Royale, but a variant that simulates characteristics of a specific real PVM CRT, the NEC XM 29 Plus. A high-end arcade and PC monitor.
The paths are relative to the standard “shaders/shaders_slang” directory of RetroArch.

Let’s we go: Side by Side

The meat of this article. Use the slider to overlap and view parts of the comparing images. There are so many screenshots, so I chose a few (5 to be exact) different Shader per game and compare their 100% crops. Nearest is basically the look without any Shader or filter, Royale is my favorite and one that is very popular. It will be compared at first in all games for base reference. Have fun.

Overview of included games and cores (2*5)

Note: Click the game title in the table to jump directly to corresponding section.

GameSystemCoreLibretro Filename
👇 Super Mario WorldSuper NintendoMesen-Smesen-s_libretro.so
👇 Chrono TriggerSuper NintendoMesen-Smesen-s_libretro.so
👇 SonicMega DriveGenesis Plus GXgenesis_plus_gx_libretro.so
👇 Streets of Rage 2Mega DriveGenesis Plus GXgenesis_plus_gx_libretro.so
👇 Super Street Fighter 2ArcadeFinalBurn Neofbneo_libretro.so
👇 SimpsonsArcadeFinalBurn Neofbneo_libretro.so
👇 Final Fantasy 7PlaystationBeetle PSX HWmednafen_psx_hw_libretro.so
👇 Gran Turismo 2PlaystationBeetle PSX HWmednafen_psx_hw_libretro.so
👇 Zelda – Ocarina of TimeNintendo 64Mupen64Plus-Nextmupen64plus_next_libretro.so
👇 Conker’s Bad Fur DayNintendo 64Mupen64Plus-Nextmupen64plus_next_libretro.so
The filenames are on Linux found in the “cores” directory of RetroArch and may differ depending on your OS.

Side by Side Crops: Super Mario World

☝ Back to games overview

Nearest VS Royale
Royale VS Geom
Geom VS Guest Advanced
Guest Advanced VS GTU v050
GTU v050 VS Nearest

Side by Side Crops: Chrono Trigger

☝ Back to games overview

Nearest VS Royale
Royale VS Aperture
Aperture VS Zfast
Zfast VS Pi
Pi VS Nearest

Side by Side Crops: Sonic

☝ Back to games overview

Nearest VS Royale
Royale VS Royale NTSC SVideo
Royale NTSC SVideo VS Geom Deluxe NTSC Adaptive
Geom Deluxe NTSC Adaptive VS Yeetron
Yeetron VS Nearest

Side by Side Crops: Street of Rage 2

☝ Back to games overview

Nearest VS Royale
Royale VS GTU v050
GTU v050 VS Royale NTSC SVideo
Royale NTSC SVideo VS Lottes
Lottes VS Nearest

Side by Side Crops: Super Street Fighter 2

☝ Back to games overview

Nearest VS Royale
Royale VS Royale XM29Plus
Royale XM29Plus VS Hyllian
Hyllian VS MAME HLSL
MAME HLSL VS Nearest

Side by Side Crops: Simpsons

☝ Back to games overview

Nearest VS Royale
Royale VS Easymode
Easymode VS Torridgristle
Torridgristle VS Guest Dr Venom Kurozumi
Guest Dr Venom Kurozumi VS Nearest

Side by Side Crops: Final Fantasy 7

☝ Back to games overview

Nearest VS Royale
Royale VS yo6 KV M1420B
yo6 KV M1420B VS CRTGlow Gauss
CRTGlow Gauss VS C64 monitor
C64 monitor VS Nearest

Side by Side Crops: Gran Turismo 2

☝ Back to games overview

Nearest VS Royale
Royale VS Guest Dr Venom Max DR
Guest Dr Venom MaxDR VS Potato Warm
Potato Warm VS NewPixie
NewPixie VS Nearest

Side by Side Crops: Zelda – Ocarina of Time

☝ Back to games overview

Nearest VS Royale
Royale VS Royale PAL r57shell
Royale PAL r57shell VS Guest Advanced
Guest Advanced VS Bilinear
Bilinear VS Nearest

Side by Side Crops: Conker’s Bad Fur Day

☝ Back to games overview

Nearest VS Royale
Royale VS Royale Kurozumi
Royale Kurozumi VS Pi
Pi VS Lottes
Lottes VS Nearest

Full Sized Screenshots

In addition to the cropped images, some full sized screenshots available also. These are the files directly saved by RetroArch. Some hand picked selection:

Learn, Discuss and Share

This list is only the beginning, the real journey starts when you experiment with the settings. There are some places on this planet where you can discuss with others and share your own settings or ask related questions about RetroArch Shaders. One such place is the official Libreto RetroArch Shaders forum. Noteworthy threads are in example:

The resetera forum also has a few interesting threads:

If you need some newcomer tutorials on how to configure the Shader settings, then have a look at these posts and articles:

Learning by Watching

And as always, some interesting video material. The Street Fighter Alpha 3 video in particular is interesting to me, as it shows all CRT Shaders (from the date 06.08.2021) in motion, almost an hour long! Look in the description for named timestamps:

The following video shows in a few minutes how to use Shaders in RetroArch. It is a young channel dedicated to emulation and has nice and to the point short tutorials:

The last video I want to highlight is a longer tutorial video as a general guide for starters in RetroArch. It is not specifically dedicated about Shaders, but in the section “video settings” around after minute 25 he talks and shows some Shaders:

Advertisement

6 Comments

  1. thanks for the article, we finally have someone made this.
    anyway, i really new to these whole shader things. after i read this, i went to libretro doc site and apparently i found an interesting thing there. that is how hylian shader, the 3d variant, is actually did a good job on higher internal resolution(i tried 2x), and surprisingly really looks good on non-integer scale resolution too.

    i never really considered using internal resolution aside from 1x before, but some game just look bad with their 3d especially a detail one and i am playing it on laptop. so the image cant look that sharp because of the screen size of my laptop, and i cant really play it from afar. yeah it was quite bugging me. so, if you happen to know other shaders that have the capability to do the same without really tweaking much, please tell me. i love playing with hylian-3d, but having some options is never a bad thing.

    and, i dont know with other cores, but with swanstation, combining 1x res with anti-aliasing is screwing up things for me, like the font that has weird haziness to it, top screen that has this glitch that showing a bit of behind the transition scene in form of little line, and sometimes just darken random in game things. so a bit hard for me to consider this an option too.

    btw, i really like dr.guest-venom-maxdr one, i have never seen older games look that good. but it is quite a demanding one, i can imagine how taxing it is if it compatible with higher internal resolution.

    and sorry for my english, if it went too horrible.

    Liked by 1 person

    1. Thank you for the reply. Your English is fine, I had no problem in reading and understanding. Me not a native English speaker here too. 🙂

      As for my personal preference and the focus of this post is really Shader that tries to replicate CRT characteristics at 4:3 format in combination with original game or engine resolution and no texture corrections and such. I personally have not much experience and not that big interested into higher internal resolutions, but I see why others and you possibly are. But that does not mean that I didn’t try out and experiment a little.

      From the replies text, your focus is on 3D vector graphics it seems, such as Playstation. This is a bit hard to decide, because the graphics are no longer pixel perfect graphics with predefined set of tiles. And therefore upscaling is often something you can do and get good results. This is an area where I need to investigate more. I have tried the 3D version of Hylian, but not sure what to think of right now and therefore can’t really comment much.

      For the image of your laptop screen, it depends on the reason why it can’t look sharp. If you scale the output image (not internal resolution!) to fit to the screen size, then it will most probably look garbled. That is because your screen is not an exact multiplier of the original game screen. You can set to not fill the screen and the image would be a more true to the original game pixels, but you would get black bars on all sides and the game screen could get really small (depending on the resolutions). This is all a topic on its own.

      I am also not that of an expert or so and “relatively” new to Shaders as a whole. This article was also written for myself, or better the comparisons shots, but then decided to make an article for others. Trying to figure out what is the best for me was the main goal. And it worked, because I have a different favorite now (not that different, it is a preset of Royale). I can easily create more comparison shots, as this is automated. But the amount of data and files is huuuge and was not an option for this post or website.

      Like

  2. ah, i see.
    i think what i want to say in the previous comment is that, the game looks more blockier (it is not “sharp”, somehow i just thought that they are the same) when i play it on bigger screen due to its 3d, even after i used shader and yeah, i did use integer scale with core provided aspect ratio. that, compare to when i played on handheld device obviously due to its smaller screen size.

    it just never look the same the way it does on my old tv back then. which is technically even has larger screen size than the screen scaling the emulator provide in native resolution. its a bummer, because i dont own neither of these device now, except my old laptop.

    yeah, i dont realize that this comment quite stretch from the topic here :v.
    sorry about that.

    Like

  3. oh right, do you have any shader recommendations for 720p display? i think my laptop screen is around that resolution (1366 x 768). because i believe that you mention about shader that optimize in certain resolution than others.

    and what do you think of shader for different consoles? because i think like, most of the shaders looks great on 16bit era, in my case snes, than it does in playstation. for example that, crt-aperture and easymod dont look as good as they are in snes when i use it on playstation (especially on games that use pre-rendered background). so far for me, the one that looks good on ps1 games is in the preset folder drvenom-kurozumi and maxdr.

    sorry again if my question is sound so basic and probably is basic. i just really new to these things and curious :v
    hopefully you dont mind it ^_^

    Like

    1. Let’s go from bottom up (your reply). I think your questions are fine. And it just so happens that I am questioning these myself too, as I am in the process to find the correct one for myself.

      Just a few days ago I decided to go through all my emulated systems and decide what shader to use and was thinking about making a post, but not sure about that one. It also depends on what type of connection and cable you was using, not just the CRT itself. In example it was and is possible to play on a CRT tv or monitor with RGB output, which is a clear image. But if you were living in the US in example and had the common connection of composite and the typical ntsc artefacts, then the image would look totally different even on the same CRT. That is why there are base CRT shaders that really only try to “emulate” the screen itself. Then there are presets in example, which takes the base shader and apply the connection and cable degradation to it.

      Now for the different systems, I have a few standard sets like 1 Arcade Shader, 1 NES Shader that I use on old systems with composite connection and SNES Shader with S-Video connection, which I use for SNES and Playstation in example (both CRT Royale NTSC SVideo). And for the first time I enabled curved screens too. Before this I didn’t like curved screen emulation. So there are classes of Shaders I choose and saved them as my own personal preset. Later I open a core and choose only one of these presets, which are renamed to reflect what I am using them for. And with over 50 cores, it was a bit tough. 😀

      As you said and mentioned by me, the look depends on the core resolution, internal upscaling and even output resolution. That is why we have all these discussions, because there is no definitive clear answer. And giving advice without seeing how it looks is also not easy, as my screen is 1440p. And I can see that you probably like strong scanlines effect, which you often get from these Kurozumi types. But that was not the typical CRT tv we had, these are more like the professional monitors who worked to edit videos in example. The Shaders from Guest seem to require stronger hardware, but I don’t know in what league we speak here. I have no idea if a laptop is enough. Speaking of laptop, I have an old one lying around, so maybe someday I could test there too. 🙂

      When I was playing on Raspberry Pi 3B years back at 720p, the Shader “Pi” was my default. But that is only recommended if you re on weak hardware. And you see, I did not test or list all variants here. There are faster versions of demanding shaders. But some don’t work well on smaller screens and even after tweaking settings, like Royale. If you like the Guest Venom, try out crt-guest-advanced-fastest.slangp and crt-guest-dr-venom-fast.slangp. Other than that, I can only recommend to try changing the Shader Parameters. They are not saved until you save, so it is save to test… (say once more save!).

      I am sorry, that I can’t give you definitive answer and ramble around. Don’t get me wrong with my recommendation now, but maybe asking the people at https://forums.libretro.com/c/retroarch-additions/retroarch-shaders holds more fruition. But I am glad to help as well, whenever I can!

      Like

      1. as i read your reply, i realize that, i dont think i remember enough how the looks on my old tv, i was still quite a kid when my brother own it. the thing that i vaguely remember is that ive notice less blockiness(? oh words…) compare to when i emulate things right now, probably because of the composite or svideo artifacts that make it feel like that. but when i tried shaders that trying to emulate those artifacts (mainly in presets folder, tvout interlaced), i feel like i dont love it as much as when i see it back then. i dont know, maybe this will change someday, i do feel some bits of nostalgia of it tho, not gonna lie :v

        for now tho, i just want the game to look less blocky without having too much blur and tv artifacts. and crt shaders that accomplished the most of it is these kurozumi shaders, at least from what i already tried so far. which is now that you mentioned it, that makes sense. i always feel pre-rendered backgrounds and into videos really look good with it, color transition looks smoother without it felt blurry.

        oh yeah, i think my hardware is in the weak side. my laptop is only gen3 i5 with integrated gpu, it is quite old.
        but i think its a bit better than pi3b, i think.

        and yeah, crt-pi does look quite nice on ps1 games on my laptop. i was surprised that one of the lightweight shaders actually feels good to me. for guest dr venom fast, i like it for 2d games (looks more sharp and clean), but i still prefer crt-pi to handle 3d models in ps1 (seems like they use a bit of blur there).

        i just tried guest advance fastest and i got a glitch. my game is immediately in a black screen, well most of it. the part that is not black screen tho, there is this thick line(or rectangular?) that blinks and just goes all the way through to the bottom and it repeatedly doing so. also, the other one that does not affect by it is somehow my character sprite. but, i hope i describe it properly, probably not. but yeah, i think this has to do with my video renderer which is dxd11. as swanstation cant use opengl and vulkan on my laptop, so i cant try both of them at the moment.

        anyway, dont feel sorry, your ramble is still somewhat informative to me (if that makes sense) ^_^
        and yeah, i’ll consider asking in libreto if there are more issues that i found. for now, i feel like there are still things that i could try myself.

        thanks for your article and replies. i patiently waiting for another beginner stuff like these in your site.

        Like

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.