Please show off what crt shaders can do!

Thank you glad you like it. I cranked the saturation up as I just like to make the colors pop out more. If it’s too much for you or anyone you can bring colors back to default by hitting start on both Display Color Space and Saturation in the parameters settings. I also gave the overall image a “cool” look where whites give off a blueish hue to copy the standard Japanese tv, if you want the “warm” look just hit start on White Point as well. If it’s too much “noise” I’d also bring it down to -30

6 Likes

What’s the purpose of composite.slang? Just wondering why you used that and not ntsc-guest.

1 Like

I just like using it ever since someone here posted one of their settings with that composite pass attached to it, it looked unique so I just ran with it ever since. I’ve yet to play around with the NTSC pass, who knows maybe I’ll come up with something nice and crazy enough when I get around to it.

2 Likes

I think I’ve gotten this to the point where ringing is only noticeable if you’re really looking for it. edit: gamma out should probably be raised to 2.90, or fiddle with bright boost some more.

shaders = "12"
shader0 = "shaders_slang/misc/grade.slang"
filter_linear0 = "false"
wrap_mode0 = "clamp_to_border"
mipmap_input0 = "false"
alias0 = ""
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/guest/advanced/custom-fast-sharpen.slang"
filter_linear1 = "false"
wrap_mode1 = "clamp_to_border"
mipmap_input1 = "false"
alias1 = "StockPass"
float_framebuffer1 = "false"
srgb_framebuffer1 = "false"
scale_type_x1 = "source"
scale_x1 = "1.000000"
scale_type_y1 = "source"
scale_y1 = "1.000000"
shader2 = "shaders_slang/crt/shaders/guest/advanced/afterglow0.slang"
filter_linear2 = "false"
wrap_mode2 = "clamp_to_border"
mipmap_input2 = "false"
alias2 = "AfterglowPass"
float_framebuffer2 = "false"
srgb_framebuffer2 = "false"
scale_type_x2 = "source"
scale_x2 = "1.000000"
scale_type_y2 = "source"
scale_y2 = "1.000000"
shader3 = "shaders_slang/crt/shaders/guest/advanced/pre-shaders-afterglow.slang"
filter_linear3 = "false"
wrap_mode3 = "clamp_to_border"
mipmap_input3 = "true"
alias3 = "PrePass"
float_framebuffer3 = "false"
srgb_framebuffer3 = "false"
scale_type_x3 = "source"
scale_x3 = "1.000000"
scale_type_y3 = "source"
scale_y3 = "1.000000"
shader4 = "shaders_slang/crt/shaders/guest/advanced/avg-lum.slang"
filter_linear4 = "true"
wrap_mode4 = "clamp_to_border"
mipmap_input4 = "true"
alias4 = "AvgLumPass"
float_framebuffer4 = "false"
srgb_framebuffer4 = "false"
scale_type_x4 = "source"
scale_x4 = "1.000000"
scale_type_y4 = "source"
scale_y4 = "1.000000"
shader5 = "shaders_slang/crt/shaders/guest/advanced/linearize.slang"
filter_linear5 = "true"
wrap_mode5 = "clamp_to_border"
mipmap_input5 = "false"
alias5 = "LinearizePass"
float_framebuffer5 = "true"
srgb_framebuffer5 = "false"
scale_type_x5 = "source"
scale_x5 = "1.000000"
scale_type_y5 = "source"
scale_y5 = "1.000000"
shader6 = "shaders_slang/crt/shaders/guest/advanced/gaussian_horizontal.slang"
filter_linear6 = "true"
wrap_mode6 = "clamp_to_border"
mipmap_input6 = "false"
alias6 = ""
float_framebuffer6 = "true"
srgb_framebuffer6 = "false"
scale_type_x6 = "absolute"
scale_x6 = "800"
scale_type_y6 = "source"
scale_y6 = "1.000000"
shader7 = "shaders_slang/crt/shaders/guest/advanced/gaussian_vertical.slang"
filter_linear7 = "true"
wrap_mode7 = "clamp_to_border"
mipmap_input7 = "false"
alias7 = "GlowPass"
float_framebuffer7 = "true"
srgb_framebuffer7 = "false"
scale_type_x7 = "absolute"
scale_x7 = "800"
scale_type_y7 = "absolute"
scale_y7 = "600"
shader8 = "shaders_slang/crt/shaders/guest/advanced/bloom_horizontal.slang"
filter_linear8 = "true"
wrap_mode8 = "clamp_to_border"
mipmap_input8 = "false"
alias8 = ""
float_framebuffer8 = "true"
srgb_framebuffer8 = "false"
scale_type_x8 = "absolute"
scale_x8 = "800"
scale_type_y8 = "absolute"
scale_y8 = "600"
shader9 = "shaders_slang/crt/shaders/guest/advanced/bloom_vertical.slang"
filter_linear9 = "true"
wrap_mode9 = "clamp_to_border"
mipmap_input9 = "false"
alias9 = "BloomPass"
float_framebuffer9 = "true"
srgb_framebuffer9 = "false"
scale_type_x9 = "source"
scale_x9 = "1.000000"
scale_type_y9 = "source"
scale_y9 = "1.000000"
shader10 = "shaders_slang/crt/shaders/guest/advanced/crt-guest-advanced.slang"
filter_linear10 = "true"
wrap_mode10 = "clamp_to_border"
mipmap_input10 = "false"
alias10 = ""
float_framebuffer10 = "false"
srgb_framebuffer10 = "false"
scale_type_x10 = "viewport"
scale_x10 = "1.000000"
scale_type_y10 = "viewport"
scale_y10 = "1.000000"
shader11 = "shaders_slang/crt/shaders/guest/advanced/deconvergence.slang"
filter_linear11 = "true"
wrap_mode11 = "clamp_to_border"
mipmap_input11 = "false"
alias11 = ""
float_framebuffer11 = "false"
srgb_framebuffer11 = "false"
scale_type_x11 = "viewport"
scale_x11 = "1.000000"
scale_type_y11 = "viewport"
scale_y11 = "1.000000"
g_crtgamut = "0.000000"
g_vignette = "0.000000"
SHARPEN = "0.100000"
CONTR = "0.100000"
WP = "-100.000000"
glow = "0.000000"
brightboost = "2.750000"
brightboost1 = "2.750003"
gsl = "2.000000"
scanline1 = "12.000000"
scanline2 = "14.000000"
beam_max = "1.100000"
beam_size = "0.000000"
scans = "1.000000"
spike = "0.000000"
h_sharp = "3.000002"
s_sharp = "1.000000"
maskstr = "0.750000"
mcut = "0.750000"
mclip = "0.000000"
gamma_out = "2.799998"
textures = "SamplerLUT1;SamplerLUT2;SamplerLUT3;SamplerLUT4"
SamplerLUT1 = "shaders_slang/crt/shaders/guest/advanced/lut/trinitron-lut.png"
SamplerLUT1_linear = "true"
SamplerLUT1_wrap_mode = "clamp_to_border"
SamplerLUT1_mipmap = "false"
SamplerLUT2 = "shaders_slang/crt/shaders/guest/advanced/lut/inv-trinitron-lut.png"
SamplerLUT2_linear = "true"
SamplerLUT2_wrap_mode = "clamp_to_border"
SamplerLUT2_mipmap = "false"
SamplerLUT3 = "shaders_slang/crt/shaders/guest/advanced/lut/nec-lut.png"
SamplerLUT3_linear = "true"
SamplerLUT3_wrap_mode = "clamp_to_border"
SamplerLUT3_mipmap = "false"
SamplerLUT4 = "shaders_slang/crt/shaders/guest/advanced/lut/ntsc-lut.png"
SamplerLUT4_linear = "true"
SamplerLUT4_wrap_mode = "clamp_to_border"
SamplerLUT4_mipmap = "false"
4 Likes

just want to bump this. @Hyllian crt-super-xbr looks awesome and i really want to try it, but all his links are down. does anybody still have the files and could reupload. that would make my day!

1 Like

Have you checked here?

Or perhaps @Hyllian might be able to assist?

In the meantime, I have some shader presets that you might like. You can take a look here:

1 Like

thanks for the reply @Cyber . yes, i checked both glsl and slang shader directories and the only preset that looks similar (with some tweaking) is the ‘crt-fast-bilateral-super-xbr’ one. however from the looks of it its not quite the same. also its missing glow and ntsc variants. mega bezel is awesome, but way too heavy for the android phone i want to run it on. @Hyllian didn’t post here anymore since his latest release of the shader in january. hopefully he (or somebody else) can reupload the files! cheers

1 Like

Perhaps if you posted some example screenshots of what you’re looking for someone here might be able to replicate it using other shader packages and presets. Post some close-ups as well as full frame. I’m almost certain you can at least get something close if not better in this way.

Did a little tweak to my last shader post, I put the color space back to default and turned the saturation all the way down so that colors appear more natural. These are my definite settings for the time being:

shaders = "10"
shader0 = "shaders_slang/crt/shaders/crtsim/composite.slang"
filter_linear0 = "true"
wrap_mode0 = "clamp_to_border"
mipmap_input0 = "false"
alias0 = ""
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/misc/grade.slang"
filter_linear1 = "true"
wrap_mode1 = "clamp_to_border"
mipmap_input1 = "false"
alias1 = "PrePass"
float_framebuffer1 = "false"
srgb_framebuffer1 = "false"
scale_type_x1 = "source"
scale_x1 = "1.000000"
scale_type_y1 = "source"
scale_y1 = "1.000000"
shader2 = "shaders_slang/crt/shaders/guest/advanced/avg-lum.slang"
filter_linear2 = "true"
wrap_mode2 = "clamp_to_border"
mipmap_input2 = "true"
alias2 = "AvgLumPass"
float_framebuffer2 = "false"
srgb_framebuffer2 = "false"
scale_type_x2 = "source"
scale_x2 = "1.000000"
scale_type_y2 = "source"
scale_y2 = "1.000000"
shader3 = "shaders_slang/crt/shaders/guest/advanced/linearize.slang"
filter_linear3 = "true"
wrap_mode3 = "clamp_to_border"
mipmap_input3 = "false"
alias3 = "LinearizePass"
float_framebuffer3 = "true"
srgb_framebuffer3 = "false"
scale_type_x3 = "source"
scale_x3 = "1.000000"
scale_type_y3 = "source"
scale_y3 = "1.000000"
shader4 = "shaders_slang/crt/shaders/guest/advanced/gaussian_horizontal.slang"
filter_linear4 = "true"
wrap_mode4 = "clamp_to_border"
mipmap_input4 = "false"
alias4 = ""
float_framebuffer4 = "true"
srgb_framebuffer4 = "false"
scale_type_x4 = "absolute"
scale_x4 = "800"
scale_type_y4 = "source"
scale_y4 = "1.000000"
shader5 = "shaders_slang/crt/shaders/guest/advanced/gaussian_vertical.slang"
filter_linear5 = "true"
wrap_mode5 = "clamp_to_border"
mipmap_input5 = "false"
alias5 = "GlowPass"
float_framebuffer5 = "true"
srgb_framebuffer5 = "false"
scale_type_x5 = "absolute"
scale_x5 = "800"
scale_type_y5 = "absolute"
scale_y5 = "600"
shader6 = "shaders_slang/crt/shaders/guest/advanced/bloom_horizontal.slang"
filter_linear6 = "true"
wrap_mode6 = "clamp_to_border"
mipmap_input6 = "false"
alias6 = ""
float_framebuffer6 = "true"
srgb_framebuffer6 = "false"
scale_type_x6 = "absolute"
scale_x6 = "800"
scale_type_y6 = "absolute"
scale_y6 = "600"
shader7 = "shaders_slang/crt/shaders/guest/advanced/bloom_vertical.slang"
filter_linear7 = "true"
wrap_mode7 = "clamp_to_border"
mipmap_input7 = "false"
alias7 = "BloomPass"
float_framebuffer7 = "true"
srgb_framebuffer7 = "false"
scale_type_x7 = "source"
scale_x7 = "1.000000"
scale_type_y7 = "source"
scale_y7 = "1.000000"
shader8 = "shaders_slang/crt/shaders/guest/advanced/crt-guest-advanced.slang"
filter_linear8 = "true"
wrap_mode8 = "clamp_to_border"
mipmap_input8 = "false"
alias8 = ""
float_framebuffer8 = "false"
srgb_framebuffer8 = "false"
scale_type_x8 = "viewport"
scale_x8 = "1.000000"
scale_type_y8 = "viewport"
scale_y8 = "1.000000"
shader9 = "shaders_slang/crt/shaders/guest/advanced/deconvergence.slang"
filter_linear9 = "true"
wrap_mode9 = "clamp_to_border"
mipmap_input9 = "false"
alias9 = ""
float_framebuffer9 = "false"
srgb_framebuffer9 = "false"
scale_type_x9 = "viewport"
scale_x9 = "1.000000"
scale_type_y9 = "viewport"
scale_y9 = "1.000000"
NTSCArtifactScale = "0.000000"
wp_temperature = "8004.000000"
interm = "5.000000"
bloom = "0.900000"
halation = "0.400000"
gsl = "-1.000000"
h_sharp = "3.000002"
s_sharp = "0.200000"
BLOOM = "1.000000"
csize = "0.030000"
barspeed = "200.000000"
barintensity = "0.010000"
warpX = "0.040000"
warpY = "0.050000"
c_shape = "0.600000"
shadowMask = "8.000000"
maskstr = "1.000000"
slotmask = "0.500000"
slotmask1 = "0.850000"
slotwidth = "3.000000"
double_slot = "2.000000"
deconrr = "0.750000"
deconrb = "-0.750000"
deconrry = "1.500000"
deconrby = "-1.500000"
decons = "-2.000002"
addnoised = "-0.300000"
textures = "MaskTexture;NTSCArtifactSampler;shadowMaskSampler;SamplerLUT1;SamplerLUT2;SamplerLUT3;SamplerLUT4"
MaskTexture = "shaders_slang/crt/shaders/mame_hlsl/resources/aperture-grille.png"
MaskTexture_wrap_mode = "clamp_to_border"
MaskTexture_mipmap = "false"
NTSCArtifactSampler = "shaders_slang/crt/shaders/crtsim/artifacts.png"
NTSCArtifactSampler_linear = "true"
NTSCArtifactSampler_wrap_mode = "clamp_to_border"
NTSCArtifactSampler_mipmap = "false"
shadowMaskSampler = "shaders_slang/crt/shaders/crtsim/mask.png"
shadowMaskSampler_linear = "true"
shadowMaskSampler_wrap_mode = "clamp_to_border"
shadowMaskSampler_mipmap = "false"
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"
5 Likes

I can’t load your preset, it seems that the new guest doesn’t have this other1.png and custom_lut.png (Or maybe it’s something else, I don’t know, I have all the slang files (grade, guest, etc.) in the respective folders, and I put your preset at Retroarch “shaders” directory.

Edit: I fixed it, just had to update shader within Retroarch then put the new guest and overwrite the files (I was deleting guest folder before).

3 Likes

That’s strange. The most I can say is make sure you’re using the newest guest version (2021-10-10-r1) as I believe that version has not been updated in the crt folders yet.

1 Like

Why are the graphics like the power bars and stuff like that bent so much? I remember long ago, when gaming on CRT, the screens were curved but the image on the screen, while not perfectly square or straight appeared a lot straighter than in these screenshots. There was also a lot that could be done (at least on monitors) to adjust the geometry and final dimensions of the picture on the screen.

Is this the way you remember it?

The main reason I curve it that much is simply to fit the whole image into the bezels I use (I use bezels pretty much for all my games) and those curvature settings fit the whole image into the bezel perfectly. As far as if that’s how I remember it, my memory is so jaded that I wouldn’t be able to give you a clear answer lol, haven’t gamed on a crt in years so I’m just going off what I think looks ok to me. I would love to see you or anyone take these settings and tweak them and repost it in their vision, I always get ideas from everyone here when they post something up.

1 Like

What used to happen on older screens was instead of the image in the corners and edges bending and conforming to fit the curve of the bezel, sometimes a portion just got cropped off and was off screen. This is all subjective though. Everyone is free to set and use things in the way that they like.

As for me personally, I’ve tried different curvature settings and algorithms and I’ve decided that I prefer the modern benefits of perfect geometry.

Most of the time when I see screenshots featuring curvature, they seem a bit exaggerated. It’s like back in the day, you didn’t really notice that things looked curved. To me it was so subtle that things didn’t really look curved even though the outside of the glass was definitely not flat. That could also be due to the possibility that our brains might have been so accustomed to curvature that we adjusted to compensate and now that we’re used to seeing things straight, they look exaggerated. However, in the not too distant past when I’ve used CRTs I still didn’t notice any curvature of the image on the screen.

3 Likes

To tell the truth if I could get all the bezels I have pretty much without the bezel and just the two images on the side I would be more than happy to get rid of the curvature forever. I tried what you were talking about once where some of the image gets cut off but then I remember every crt I had in the past always use to cut some of the image off so now I don’t want to ever go through that again, I want to see everything now lol. I guess I’m just use to it so it doesn’t bother me at all and I like it now actually even if it does appear exaggerated.

4 Likes

I’m definitely with you on that one.

2 Likes

There is a “crt-fast-bilateral-super-xbr” in the “denoisers” folder in both slang and glsl.

3 Likes

I hacked an old version of Guest.r shader to pieces lol, removed masks, inserted others, removed some pieces and in the end it run 85 fps on old Snapdragon 600 cellphone (guest-sm runs only 25 fps there). As a comparison fake-lottes runs around 150 but the guest.r shader looks a lot better. I have much stronger hardware like gtx 1070 & 1060 & snapdragon 835 but is always fun doing things like these lol.

grab it here, maybe it runs on your old hardware

https://mega.nz/file/u3xEwDTD#udetJUFA-rvQZO8Nsvd3THh040YGuERy71UIlbQ6yTA

5 Likes

Looking through this thread, I noticed there is very little discussion of PC CRT emulation through shaders. I realize this is because the vast majority of emulated content is 240p, but let us not forget two paragons of 400/480p content: The Dreamcast, and VGA DOS games (you could also make a strong argument for the GameCube and Wii, of course). If we’re about authenticity, I would think having shaders that properly emulate 31KHz resolutions would also be a priority for these!

Long ago, I attempted to modify CRT-Geom to output 480p-esque scanlines for use with DOSBox, along with a few others over at VOGONS. We had some success, but the result was imperfect. Nowadays we have much more advanced shaders to work with, so I set about to see if any of them were able to deliver out of the box.

It turns out a fair bit of them are! Well, to an extent, at least. It depends on how the shader deals with 400+ line content. Some, such as CRT-Easymode, show no scanlines of any kind with such content, even after disabling interlacing, so that and a few others were a no-go as they are. However, others, such as CRT-Royale, scale their scanlines accordingly when fed such “hi-res” content. The scanlines are half as thin as in regular 240p, as you would expect. My favorite so far for this kind of content is CRT-Guest-SM. For some reason, it’s the only variation of the Guest family that has no issues displaying scanlines in 480p, and it has tons of options to tweak.

So how do you go about testing this? Well, as you would expect, the easiest way would be to load a 480p game, such as anything on the Dreamcast. However, the other big category of 31KHz content is VGA DOS games. As many of you probably know, VGA DOS games internally ran at 320x200 for the most part, but in order to actually display them on VGA PC monitors, which did not accept such low-res signals (at least not at 60/70 Hz), they were line-doubled. This gave VGA DOS games their distinctive blocky, pixelated look. Of course, this was also done to CGA and EGA games running on VGA-era hardware for backwards-compatibility purposes, though that is not how they originally looked. However, by default DOSBox does not actually do this. Thus, you must first enable the normal2x scaler in the DOSBox core options. By pre-scaling the game this way, the shader will see it as 400-line content, and the scanlines will scale accordingly. Of course, you can do something similar with any other 240p content if you so wish by, for example, loading the corresponding video filter under Video settings, or perhaps by adding a simple 2x scaling shader pass.

However, there is a catch: if emulating 240p faithfully is already a challenge, how much more so 480p is, especially without a 4K+ display! On my 1080p monitor, the issue is the scanlines darken the image a good bit. I toyed with the settings on CRT-Guest-SM for a while, but in the end, the result I liked most actually had no scanlines to speak of:

Basically, I set the scanline type to 3, which effectively erases the scanlines at that scale, and the mask type to 1, which emulates the dot triad mask of a PC CRT. The image remains quite sharp, but softens the edges just enough to more or less reproduce the look of an older VGA CRT, which actually did not produce noticeable scanlines.

Maybe I need to mess with it more. I have not messed around too much with the newest shaders, after all. But I can tell you this much: I tried the same setup on my laptop with a 4K display, and the results are MUCH better! Definitely more room to work with there. Shame my graphics card is barely able to handle shaders at that resolution.

This is definitely a topic that I think warrants more discussion and exploration, particularly when it comes to DOS games. Sure, lots of people just “240p-ify” them with the current shaders, and it CAN look good, but I prefer to get closer to how they ACTUALLY looked. :slightly_smiling_face:

6 Likes

You’ll need to view this on a 4K monitor at full screen.

I am using Guest ADV in the Mega Bezel with a fine shadow mask and scanline direction multiplier increased horizontally.

To look perfect it would need at least 8K I think.

The dot pitch was so small on those high res monitors, maybe even 8K wouldn’t show the individual triads. :worried:

5 Likes