Please show off what crt shaders can do!

That’s for sure. As I see, you’re using a 720p display, which means you can only scale at most by 3x. It’s not enough for crt shaders. A 1080p display is the minimum you can benefit from characteristics of crt shaders.

2 Likes

It is a 1080 tv. However I have to run Retroarch in 1024*768 because that is the only resolution where my tv dont tries to autoscale the image, making the scanlines uneven. I have a more modern projektor(1080p) with wich I can play in 1080, but I cant see much of a difference between that and the tv. I think I need 4k and hdr for bigger improvements.

Blazing Chrome (CRT-Guest-Dr-Venom-Kurozumi) :

4 Likes

That looks amazing. I have to admit I never have any luck with any of the reshade CRT shaders. They just never look right for me.

1 Like

Here is a CRT Configuration I made using CRT Hyllian Sinc, used with Grade in the first pass. I couldn’t find a mask with a one-pixel wide RGB aperture grill like in GDV so I resorted to using Mask 9, which even then on my 1440p monitor is a bit intense for my liking.

Here are the settings (Grade adjusted for NTSC-J).

shaders = "2"
shader0 = "shaders_slang/misc/grade.slang"
filter_linear0 = "false"
wrap_mode0 = "clamp_to_border"
mipmap_input0 = "false"
alias0 = "StockPass"
float_framebuffer0 = "false"
srgb_framebuffer0 = "false"
scale_type_x0 = "source"
scale_x0 = "1.000000"
scale_type_y0 = "source"
scale_y0 = "1.000000"
shader1 = "shaders_slang/crt/shaders/crt-hyllian-sinc.slang"
filter_linear1 = "false"
wrap_mode1 = "clamp_to_border"
mipmap_input1 = "false"
alias1 = ""
float_framebuffer1 = "false"
srgb_framebuffer1 = "false"
parameters = "g_gamma_in;g_gamma_out;g_signal_type;g_crtgamut;g_space_out;g_hue_degrees;g_I_SHIFT;g_Q_SHIFT;g_I_MUL;g_Q_MUL;g_lum_fix;g_vignette;g_vstr;g_vpower;g_lum;g_cntrst;g_mid;wp_temperature;g_sat;g_vibr;g_satr;g_satg;g_satb;g_lift;blr;blg;blb;wlr;wlg;wlb;rg;rb;gr;gb;br;bg;LUT_Size1;LUT1_toggle;LUT_Size2;LUT2_toggle;BEAM_PROFILE;BEAM_MIN_WIDTH;BEAM_MAX_WIDTH;SCANLINES_STRENGTH;COLOR_BOOST;HFILTER_SHARPNESS;PHOSPHOR_LAYOUT;MASK_INTENSITY;CRT_ANTI_RINGING;InputGamma;OutputGamma;VSCANLINES"
g_gamma_in = "2.222000"
g_gamma_out = "2.500000"
g_signal_type = "0.000000"
g_crtgamut = "2.000000"
g_space_out = "0.000000"
g_hue_degrees = "0.000000"
g_I_SHIFT = "0.000000"
g_Q_SHIFT = "0.000000"
g_I_MUL = "1.000000"
g_Q_MUL = "1.000000"
g_lum_fix = "0.000000"
g_vignette = "0.000000"
g_vstr = "40.000000"
g_vpower = "0.200000"
g_lum = "0.000000"
g_cntrst = "0.000000"
g_mid = "0.500000"
wp_temperature = "7504.000000"
g_sat = "0.150000"
g_vibr = "0.000000"
g_satr = "0.000000"
g_satg = "0.000000"
g_satb = "0.000000"
g_lift = "0.000000"
blr = "0.000000"
blg = "0.000000"
blb = "0.000000"
wlr = "1.000000"
wlg = "1.000000"
wlb = "1.000000"
rg = "0.000000"
rb = "0.000000"
gr = "0.000000"
gb = "0.000000"
br = "0.000000"
bg = "0.000000"
LUT_Size1 = "16.000000"
LUT1_toggle = "0.000000"
LUT_Size2 = "64.000000"
LUT2_toggle = "0.000000"
BEAM_PROFILE = "0.000000"
BEAM_MIN_WIDTH = "0.920000"
BEAM_MAX_WIDTH = "0.760000"
SCANLINES_STRENGTH = "0.800000"
COLOR_BOOST = "1.250000"
HFILTER_SHARPNESS = "1.000000"
PHOSPHOR_LAYOUT = "9.000000"
MASK_INTENSITY = "0.600000"
CRT_ANTI_RINGING = "1.000000"
InputGamma = "2.400000"
OutputGamma = "2.200000"
VSCANLINES = "0.000000"
textures = "SamplerLUT1;SamplerLUT2;SamplerLUT3;SamplerLUT4"
SamplerLUT1 = "shaders_slang/crt/shaders/guest/lut/sony_trinitron1.png"
SamplerLUT1_linear = "true"
SamplerLUT1_wrap_mode = "clamp_to_border"
SamplerLUT1_mipmap = "false"
SamplerLUT2 = "shaders_slang/crt/shaders/guest/lut/sony_trinitron2.png"
SamplerLUT2_linear = "true"
SamplerLUT2_wrap_mode = "clamp_to_border"
SamplerLUT2_mipmap = "false"
SamplerLUT3 = "shaders_slang/crt/shaders/guest/lut/other1.png"
SamplerLUT3_linear = "true"
SamplerLUT3_wrap_mode = "clamp_to_border"
SamplerLUT3_mipmap = "false"
SamplerLUT4 = "shaders_slang/crt/shaders/guest/lut/custom_lut.png"
SamplerLUT4_linear = "true"
SamplerLUT4_wrap_mode = "clamp_to_border"
SamplerLUT4_mipmap = "false"
3 Likes

Thank you. And if you didn’t know I did a port of Guest-Dr-Venom to ReShade. You can get it here :

(Those screenshots in my last post are from the same ReShade port!)

2 Likes

Wow, the “Normal CRT style” shots look very similar to the way arcade game screenshots looked in 1980s game magazines like Computer & Video Games.

When you actually play a game with the Zombs Neuromancer shader, it reminds me of playing on a slightly shabby and neglected cabinet in a Midlands fish and chip shop circa 1990!

2 Likes

Some years ago i played an old cabinet of pacman, absolute rubbish screen with washed out colors etc and scanlines were very clear and quite big, monitor was some 26-28". Scanlines were not so obvious on old TVs with composite signal C64 etc.

Thanks for the work! How can i use these shaders in my nvidia Shield with Vulkan driver? I am downloading and unzipping to my shaders_slang folder but cant load it. Sorry for my poor english… Great work mate

Go to Retroarch configuration menu and enter drivers menu. If your device suports, choose vulkan as video driver.


BTW, here’s a small update to crt-hyllian (glsl and slang). I tweaked scanlines a bit and now crt-hyllian default is on par with sinc version.

crt-hyllian and variants (glsl and slang) (updated at 21-01-12)

Screenshots using crt-hyllian-glow preset:

The default configuration is recomended for 1080p displays.

If your display is 4k, change the mask from 4 to 9 (or 10) and increase mask_intensity to 0.70.

10 Likes

Hey this looks amazing. Thanks for your hard work :+1:

3 Likes

Hyllian, can you take a look at this PR I made to add your GLSL shaders to the repo? I moved a few things around and put all of your CRT shaders into a single directory and then put the NTSC and sgenpt presets into the presets dir.

I’m not sure if it was a result of merging things into the repo and getting mixed up with existing files or something, but I was getting a double-mask on your glow preset (1 from crt-hyllian and 1 from the resolve pass), so I changed the name of the mask intensity parameter in the resolve pass to GLOW_MASK_INTENSITY and then set the regular MASK_INTENSITY to 0.0 in the preset to get rid of it.

1 Like

Ok, I’ll look at it later.

1 Like

I think I know what is wrong.

Inside crt-hyllian-glow.glslp you probably replaced the shader1 from crt-hyllian-glow.glsl to crt-hyllian.glsl.

crt-hyllian-glow.glsl doesn’t have any mask code.

crt-hyllian.glsl has its own mask code. That’s why it was duplicated.

2 Likes

Hello. Shader newb here. For a several weeks now I’ve been reading through threads like this, trying different shaders, and tweaking the settings. At the end of it all I feel completely lost and overwhelmed. I think the biggest reason I get confused is because there are SO MANY shaders to choose from, and they don’t come with any explanations as to why they were created or what their use cases are supposed to be.

Here’s what I’m working with. I play using RetroArch, and I have my file sharing setup so I can seamlessly switch back and forth between my PC and my phone. My PC monitor is an LG 27GN850 (1440p), and my phone is a Samsung Galaxy Note 20 Ultra (2316 x 1080). I prefer to keep integer scaling off and allow the core to provide the correct aspect ratio. This way I get the largest image possible upsized to the top/bottom of the screen with black bars on the left/right.

Some of the bigger questions I have:

  1. What shaders should I use for my screens and their resolutions? Which ones should I avoid?

  2. Should I turn on integer scaling? What are the significant benefits/drawbacks if I do?

  3. I see crt-guest-dr-venom come up a lot as a popular choice, but I don’t understand WHY it’s popular.

  4. Some shaders have several versions. Some differences are obvious such as crt-hyllian vs crt-hyllian-glow. Others I have no clue what the differences are, and they are not explained anywhere such as crt-guest-dr-venom vs crt-guest-dr-venom-fast.

  5. I’m drawn to the hyllian shaders because I see that @Hyllian continues to update them. Will I have those updates if I update my slang shaders through RetroArch’s Online Updater, or will I have to use the links in this forum thread?

As far as personal preferences go, I only really know a couple of things. I don’t like the look of thick, heavy, horizontal scan lines. A little bit is fine since that’s what CRTs looked like back in the day, but I like things to look more consistent along both axes. I also know I don’t like the “cartoony” look of shaders like scalefx and xbrz. I did find Hyllian’s crt-super-xbr as a “best of both worlds” shader. I’m very close to just slapping it on everything and calling it a day, but I can’t get over how some of the finer details are still lost in the pixel blending. For example, in the Legend of Zelda for the NES, the cross on Link’s shield ends up looking like a concave diamond.

Any help or advice will be greatly appreciated.

3 Likes

Getting into CRT Shaders as a newcomer can be initially overwhelming, so here is some advice I have on how to get started.

There isn’t really a specific CRT shader to use for a certain kind of display. This is because CRT Shaders are more geared towards achieving a certain aesthetic and look as opposed to being built for use on a certain display. There isn’t a specific shader that I would say to avoid, but for the time being, I would stay away from CRT-Royale. This isn’t because it is a bad shader or that you shouldn’t use it, but because it’s a very, very complex shader and has a huge amount of parameters involved, so being a newcomer you will be easily overwhelmed by it. It is for those who want to get very technical with the little bits and details of CRT emulation.

I do recommend leaving integer scaling ON. This is because CRT shaders are aimed at emulating the individual scanlines on a CRT display that are drawn when the image is rendered. Without integer scaling, you can run into issues where you see visible artifacts on screen that are a result of uneven scanlines due to non-integer based resolutions. This is why when you see screenshots of these shaders online, you can see ripple patterns and other artifacts when you are not viewing them in full-screen or viewing the image at its full size.

An integer-based resolution is one that is a multiple of the said horizontal and vertical resolution. For example, PS1 games in Retroarch are emulated and displayed with a 240-pixel vertical height. Therefore a 2x integer of 240 is 480, a 3x integer of 240 is 720, a 4x integer of 240 is 960, and so forth.

Unfortunately, this will shrink or expand the size of the screen in Retroarch, depending on if you want to have overscan and want to cut out the outsides of the image to fit the whole screen, or you will have pillar boxing on all sides if you want to see all of the content being displayed.

With your 1440p monitor, even with integer scaling turned on, you can mitigate the amount of pillar boxing excessively since 240 is a 6x integer of 1440. You can leave integer scaling turned on and set the aspect ratio to 4:3 so you can have the proper aspect ratio and games won’t look stretched. However, some consoles such as the Sega Genesis and the SNES use a vertical resolution of 224 pixels, which means that it isn’t a complete integer of 1440, and therefore with integer scaling, you will have some pillar boxing on the top and bottom. It isn’t too severe, however.

With your Galaxy Note 20, on the other hand, and its 1080p vertical resolution, you, unfortunately, will have pillar boxing on all sides because 1080 isn’t an integer of 240 or 224. You can find this out with any resolution by taking the vertical resolution of the display and diving it by the vertical resolution of the console you are emulating (for example, 1440/240=6 which makes it a 6x integer. However, 1080/240=4.5, which isn’t an integer multiple and therefore will result in uneven scanlines without integer scaling).

If you do want to run without integer scaling, you can try CRT-Easymode and CRT-Lottes as they tend to be CRT shaders that tend to look the best with non-integer resolutions. CRT-Aperture, on the other hand, looks absolutely atrocious at non-integer based resolutions and must be run with integer scaling enabled.

There are different versions of CRT shaders made by various users that aim to accomplish different things. For example, shaders marked with “Halation” or “Glow” are made to emulate the CRT Phosphor glow of the display, and often appeal to people who like the “glow” of CRT displays. Others have very specific applications. For example, CRT-Royale-NTSC-Composite is a preset of CRT-Royale configured to emulate the look of a CRT display with a composite signal, same with CRT-Royale-NTSC-S-Video (which emulates S-Video signals). It would take me quite a long time, and it would be quite the long read to this already long response to go through every single one, so I would advise doing intensive research on the various versions of the shaders, or perhaps just testing them out and noting the differences between them.

I don’t know personally how the process for shaders being updated through Retroarch’s online updater works, so if you want to stay updated with the latest versions of these shaders being released, I would suggest using the links provided by the users and download them from there.

As a newcomer, I would say just experiment with different shaders. I find that learning more about the technical aspects of how CRT displays work actually helps me in learning how to better configure these shaders to work as I want them. CRT-Easymode, CRT-Lottes, CRT-Hyllian, and CRT-Geom are great CRT shaders to start with and mess around. They don’t have too many parameters to overwhelm you and are great for getting your feet wet. It all comes down to personal preference in the end though, and what kind of look you are after specifically.

I personally have been using CRT-Guest-Dr-Venom 2, as I find that it is the best shader for running games that run at 480i (interlaced mode games such as Tekken 3). I also has a lot of parameters for fine-tuning colors, adjusting scanline sizes and CRT mask intensity, and many other parameters. Here is a screenshot of the look I have achieved with that shader and my current configuration in Gran Turismo.

Of course, feel free to browse and experiment with what you find most appealing. There are lots of different things you can do and I’d say just start trying different shaders out, tweak various parameters, and see where you can go with it. I know this is a very long read, but hopefuly it will help you out in some way or another :slight_smile:

5 Likes

I think there’s a misconception floating around that consumer CRTs weren’t capable of thick scanlines. A well-tuned 27” Trinitron or later slotmask CRT could have scanlines as thick as those in guest-dr-venom with the scanlines maxed out, or even stronger (see: Sony FV310)

  1. I see crt-guest-dr-venom come up a lot as a popular choice, but I don’t understand WHY it’s popular.

It’s the most versatile and complete shader. It does pretty much anything you want. Naturally, with so much flexibility, there’s a pretty steep learning curve.

Hyllian’s shader is also excellent. It lacks some of the advanced options but it’s easy to use. I think if you want to avoid artifacts, use the vanilla version of the shader. No interpolation method is perfect, though. They all have pros/cons. I’ve spent far too much of my life on this, lol.

With most systems you can also use 5x scale at 1080p, cropping the image. The amount that gets cropped is outside of the safe area for CRTs.

Arcade games ignored the safe area, so you’re better off using a letterboxed resolution for those.

3 Likes

That’s because there’s no schedule or plan involved in these developments. They’re just experiments based on our child memories. My only advice to you is to try as many shaders as possible, learn how to change their parameters, and choose the ones that fill your needs. No one knows exactly what’s the best for you. And yet, we can suggest and help with more specific questions. Begin using simple shaders and then swap to more complex ones. Then, some day you’ll be dedicating 50% of your lifetime to crt shaders (like nesguy, :grin:).

Anyway, I think most of your questions are already addressed by other users.

5 Likes

Thank you. I don’t mind long posts. The more info the merrier! My initial post was almost going to be that long. Then I scrapped it and started over.

I’ve stayed away from the crt-royal shaders because they’re resource intensive. There’s always a 5-10 second pause whenever I apply one.

Information you said like easymode and lottes being good for non-integer while aperture is terrible is exactly the kind of information I’m talking about. It’s not documented anywhere, and tracking it down elsewhere on the internet is difficult and time-consuming. I wish every shader in RetroArch came bundled with a readme.txt file.

I don’t see crt-guest-dr-venom 2 in RetroArch. Just the regular crt-guest-dr-venom. Where do I get it from?

The integer scaling options seem to apply to all of RetroArch. Is there a way to set individual options per core?

2 Likes

You can find it dr venom 2 in this link:

1 Like