Please show off what crt shaders can do!


yes I use shaders but I find it really hard to get the same result as the crt. Currently using a customized NEC XM37 shader (part of the Analog Shader Pack version 3). _shado12

^That does not looks as I want when using shaders. Also the hardest thing most likely is the RGB dots. On crt u can see then when you are very close to the screen (very close) but on lcd/led is almost impossible to do it because is not how lcd/led works. Setting the opacity too high > u get to see them from far away (which is wrong)… setting it lower u won’t get the same pixel effect.

Nevertheless I prefer High end tv look (rgb) and not PVM/BVM because it looks too perfect, too close to lcd/led look.

Current progress with my customization


That looks awesome ryuuji89!

Will try to share some screens once I get home.


aa-shader-4.0-level2-pass2 - is really cool. Thou 0.25 is the lowest value allowed. But it looks fine to me. What I can’t get to work is “crt-easymode-halation”. It just ruins brightness and gamma. What settings do you use to fix it?

As for my current preferences I use this great shader combo for all 240p games except arcade. You have to have this shader pack 3 to be able to use that shader preset above.

Lightweight LUT-Based Scanline Glow Concept + Prototype GLSL

The one I use for 320px content - “crt-royale-tvout+image-adjustment”.


@ryuuji89 - nice, but a bit too sharp I think, compare it to your own SoR screen. Is it even linear filtered? And yeah the mask is hard to replicate, but look at the castlevania close up I posted. It’s alright I believe. @embe’s shot has some blur, it looks more natural imo.

@Great_Dragon - Yeah you have to edit the AAoffset manually using a text editor. I will post some easymode parameters. The other one you posted would look fine… with some scanlines, I can’t see them, only the mask grid.


This is my favorite. It’s the S-video Slotmask Sharp preset from @solid12345 Analog Shader Pack 3. Looks so close to the original look, ESPECIALLY if you play on an OLED TV.image


I prefer shadow mask over scanlines as my TV didn’t have one back then.


I will add, part of the reason I love it so much is that it has some of the signal loss look from an S-Video signal (what I used back in the day on the original system), and the color space looks like analog YUV instead of RGB (the shader is actually doing the color conversion. I know because I painstakingly ported the whole shader to GLSL so I could use it on my iPad :P)


Sorry for the spam, but here’s a native resolution image of that same picture, so you can appreciate the detail.


Well, this comparison with the Link pictures is unfair really, because the “PVM” picture is obviously an RGB mod, whereas the “What retro games actually looked like” on the right is obviously a composite output capture, which is the best the NES ever did natively.

I do think that for console games made around the 80s, like the NES, composite or a composite-like look is most suitable, since sprites where designed with the blended picture quality of composite in mind. But PVMs and BVMs can be used with composite too, with the same “intended” effects plus a much sharper image and better colors than on a consumer TV, so you can have the best of both worlds. We luckily have shaders that provide a similar experience.

“Retro games” is a big label though. Consoles made in the 90s were almost all designed with native RGB output, though most people didn’t make use of it, but clearly the developers at least expected the possibility of greater adoption in the future. For those consoles and later, RGB through a high-end monitor is suitable. The only fringe case may be the Sega Genesis/Mega Drive with its heavy use of dithering and color blending achieved through composite only (though personally I can give this up in exchange for a much cleaner and colorful picture through RGB).

Also, your old childhood TVs did have what we call “scanlines”, it’s just that they were less prominent than on higher quality sets, you were too into the games to even notice/remember them, and perhaps with the good advice of your parents did not sit too close to the screen to make them obvious :slight_smile:


Been tryin to get a nice look without needing really high resolutions, what do y’all think of this 720p shot?

The idea is more to convey the texture of the shadow mask, rather than have a fully visible shadow mask that needs high resolutions like 1440p or more. I’m also utilizing subpixel offsets and gray-normalized areas in the shadow mask texture so it should convey a sharp pattern that doesn’t impact the perceived color much.


So here are settings that go well with most if not all 240p content. Note it is using the old image adjustment shader, it will be very easy to switch to the new one if you need to (which I will be doing with all my presets soon enough). Integer scaling is not required with this shader, which I think is one of its major strengths (i.e. you can stretch at will and do whatever the heck you want with aspect ratios).

shaders = "7"
feedback_pass = "0"
shader0 = "...\RetroArch\shaders\shaders_glsl\anti-aliasing\shaders\aa-shader-4.0-level2\aa-shader-4.0-level2-pass2.glsl"
filter_linear0 = "true"
wrap_mode0 = "clamp_to_border"
mipmap_input0 = "false"
alias0 = ""
float_framebuffer0 = "false"
srgb_framebuffer0 = "false"
shader1 = "...\RetroArch\shaders\shaders_glsl\misc\image-adjustment.glsl"
filter_linear1 = "false"
wrap_mode1 = "clamp_to_border"
mipmap_input1 = "false"
alias1 = ""
float_framebuffer1 = "false"
srgb_framebuffer1 = "false"
scale_type_x1 = "source"
scale_x1 = "1.000000"
scale_type_y1 = "source"
scale_y1 = "1.000000"
shader2 = "...\RetroArch\shaders\shaders_glsl\crt\shaders\crt-easymode-halation\linearize.glsl"
filter_linear2 = "false"
wrap_mode2 = "clamp_to_border"
mipmap_input2 = "false"
alias2 = ""
float_framebuffer2 = "false"
srgb_framebuffer2 = "false"
scale_type_x2 = "source"
scale_x2 = "1.000000"
scale_type_y2 = "source"
scale_y2 = "1.000000"
shader3 = "...\RetroArch\shaders\shaders_glsl\crt\shaders\crt-easymode-halation\blur_horiz.glsl"
filter_linear3 = "false"
wrap_mode3 = "clamp_to_border"
mipmap_input3 = "false"
alias3 = ""
float_framebuffer3 = "false"
srgb_framebuffer3 = "false"
scale_type_x3 = "source"
scale_x3 = "1.000000"
scale_type_y3 = "source"
scale_y3 = "1.000000"
shader4 = "...\RetroArch\shaders\shaders_glsl\crt\shaders\crt-easymode-halation\blur_vert.glsl"
filter_linear4 = "false"
wrap_mode4 = "clamp_to_border"
mipmap_input4 = "false"
alias4 = ""
float_framebuffer4 = "false"
srgb_framebuffer4 = "false"
scale_type_x4 = "source"
scale_x4 = "1.000000"
scale_type_y4 = "source"
scale_y4 = "1.000000"
shader5 = "...\RetroArch\shaders\shaders_glsl\crt\shaders\crt-easymode-halation\threshold.glsl"
filter_linear5 = "false"
wrap_mode5 = "clamp_to_border"
mipmap_input5 = "false"
alias5 = ""
float_framebuffer5 = "false"
srgb_framebuffer5 = "false"
scale_type_x5 = "source"
scale_x5 = "1.000000"
scale_type_y5 = "source"
scale_y5 = "1.000000"
shader6 = "...\RetroArch\shaders\shaders_glsl\crt\shaders\crt-easymode-halation\crt-easymode-halation.glsl"
filter_linear6 = "true"
wrap_mode6 = "clamp_to_border"
mipmap_input6 = "false"
alias6 = ""
float_framebuffer6 = "false"
srgb_framebuffer6 = "false"
AAOFFSET2 = "0.100000"
target_gamma = "2.200000"
monitor_gamma = "2.200000"
overscan_percent_x = "0.000000"
overscan_percent_y = "0.000000"
saturation = "0.870000"
contrast = "1.000000"
luminance = "1.000000"
black_level = "-0.030000"
bright_boost = "0.000000"
R = "1.000000"
G = "1.000000"
B = "1.030000"
ZOOM = "1.000000"
XPOS = "0.000000"
YPOS = "0.000000"
V_OSMASK = "0.000000"
H_OSMASK = "0.000000"
GAMMA_INPUT = "2.400000"
GAMMA_OUTPUT = "2.200000"
SHARPNESS_H = "0.100000"
SHARPNESS_V = "0.100000"
MASK_TYPE = "1.000000"
MASK_STRENGTH_MIN = "0.200000"
MASK_STRENGTH_MAX = "0.200000"
MASK_SIZE = "1.000000"
SCANLINE_BEAM_MIN = "1.000000"
SCANLINE_BEAM_MAX = "1.000000"
GEOM_CURVATURE = "0.000000"
GEOM_WARP = "0.020000"
GEOM_CORNER_SIZE = "0.030000"
GEOM_CORNER_SMOOTH = "150.000000"
HALATION = "0.100000"
DIFFUSION = "0.100000"
BRIGHTNESS = "1.100000"

@Great_Dragon yeah like Umwelt said, the scanlines were there for sure, only you couldn’t see them due to the tv not having enough lines. First screen I had on which they were obvious was a 21" Grundig set that a friend gave me. Finally I was playing on a tv that looked like the arcade monitors I was so fond of. I didn’t really know what I liked so much about it though. Good times.

@Umwelt - yeah I generally I agree with you, but even the sharpest BVMs are not as sharp as LCD. Like, not at all. They were still analog devices and of course they look fantastic. The problem (first world problem lol) is that people are trying to replicate that look using shaders on LCDs with extreme sharpness in mind and often the end result is that dry, overly digital image I mentioned before.

This is a PVM, and it looks superb. It’s sharp from a distance but smooth up close, and you can’t see any pixels, nor hard angles/edges nor any artifacting. Also the scanlines are prominent but translucent, and not that thick.

That DracX shot that I posted doesn’t look quite as good, but it’s a decent counterfeit. And I wasn’t even trying to achieve the PVM look because I’m not so much into it when it comes to actually playing games; I think I could in fact get quite close to it, using the very same tools. Pitch glow would be hard to achieve though. Royale is better equipped for stuff like that, but it’s really demanding and I can’t run it well on my computer. I will try still.

@vinikun + @torridgristle - those actually seem pretty good to me! But again: can’t see any scanlines. What’s wrong with you people? :stuck_out_tongue:


I didn’t see those scanlines on my TV even up close. So even if they were there I don’t remember them as they weren’t that obvious to me. I like that shadow mask look thou as it hides all pixelation very well and deal with flat textures in NES games.

That DraculaX shot looks like on trinitron (aperture grill) TV. Try “CRT_Lottes” shader with different shadow mask types. You can get the same look with type2. I prefer type4 though.


vinikun! That slotmask shader looks awesome, I would love to try it out. If you don’t mind sharing the glsl, I’ll appreciate it :slight_smile:


My different setups for messy rgb/rf/composite


Still tweaking it (not yet happy with the final result). It is an NTSC filtered Lottes (composite):

Here is a NTSC filtered Easymode Halation (composite):

EDIT: Only looks good when seeing it in 100% size.


@Great_Dragon - yes exacty, it’s a simulation of an aperture grill, which is my favourite type of crt. I find the more obvious shadow masks distracting. And again yes, I like Trinitrons as well! More than PVMs/BVMs (which I think have become a bit of a meme, since no one used them back then and produce an overly dark image at 240p) when it comes to games.

My reference is in fact the smooth yet detailed look of a high end, aperture grille consumer crt from the 90s through rgb. Trinitrons were exactly that. No composhit artifacts, no excessive sharpness, no pixels, no ringing artifacts, no excessive scanline darkness devouring the lovely pixel art.


Well certain games on Sega Genesis were designed with composite output and its blurriness in mind.

Just check Pitfall or any other dithering heavy game like Aladdin.

Death-to-pixels (CRT-Lottes)

Your shader chain



found this and … One of the reasons why people hate(d) composite ,other than lack of clarity, is the flicker. But that is not a problem when using shaders.


My goodness that’s one dark game… yeah, composite could manage dithering more or less well, that’s probably its only virtue. But here’s a better looking (imo) alternative using the crt_squalo :sweat_smile: preset.

And for the sake of curiosity, one of my favourite MegaDrive games, Treasure’s Light Crusader, which uses copious amounts of dithering, with and without: