Please show off what crt shaders can do!

It makes these old games look so good. Cant imagine what they would look like on a real crt monitor if it looks this good on my lcd.

Screenshots from differents presets.

Tight diffusion :

https://pasteboard.co/JpHCewZ.png

https://pasteboard.co/JpHBCrA.png

https://pasteboard.co/JpHAixX.png

https://pasteboard.co/JpHBSjV.png

Sharp :

https://pasteboard.co/JpHzviz.png

https://pasteboard.co/JpHB20P.png

Gaussian shape :

https://pasteboard.co/JpHy8D3.png

https://pasteboard.co/JpHyXv2.png

https://pasteboard.co/JpHA1Wr.png

https://pasteboard.co/JpHAwIu.png

Also 4k users,if your OS uses 150% zoom, press ctrl - (minus) in your browser to have correct aspect ratio ( for me it’s 67%) .

7 Likes

That’s what I’m going for in the MaxDR preset as well. Maximum scanlines while maximizing the dynamic range and keeping brightness within the specification for SD CRTs. Brightness has to come up a lot after applying “max” scanlines (where the gaps between visible lines are 100% black, or as close as possible to black while still having adequate brightness and DR).

I found that raising gamma in/out to 3.50 and bright boost at 1.20 - 1.30 for dark/bright pixel boost resulted in the brightest image without crushing any blacks or clipping. Grade’s gamma should be kept at 2.50 most of the time.

If you can find a way to make this brighter without introducing clipping or lowering the scanline strength, please let me know. I posted my most recent settings in the previous post. The preset is in the /presets/ directory but the update is still pending, afaik (haven’t tried it today, though).

It’s been so long since I’ve had a CRT I can’t recall scanlines being that harsh in contrast. On my 500 nit laptop it looks to dim. I really need to get a CRT someday just to recall how it actually was.

There’s a lot of variety among different models. Some, like 31 khz monitors and professional video monitors, have stark gaps between the scanlines, while consumer sets usually don’t.

1 Like

It shouldn’t be too dim if you max out the backlight setting on the display. I’m using a 400 nit display and it’s plenty bright. I think you need to keep some bloom/glow though, definitely. If you want 0 bloom/glow I think you need at least 500 nits maxed out. Shouldn’t be harsh, either, if you’re sitting a proper distance from the display (maybe 2-3x the width of the display).

These are supposed to be xVM or 31kHz-grade scanlines, not average TV scanlines. Not saying it’s objectively better or anything, that’s just what I’m doing here.

Also, be sure to download the images to view them at original size.

Current settings:

All bloom removed, with clipping (adjust scanline bright to 1.25 - 1.30):

All bloom removed, no clipping (adjust scanline bright to 1.25 - 1.30, lower bright boost dark/bright pixel to 1.25/1.25):

2 Likes

These look really good. Have you posted these presets anywhere?

3 Likes

Thanks,yes here’s the link with the files (expires in 29 days). Copy paste everything or you can rename folders and also directories inside presets too if you want to keep CRT-Royale vanilla.

Link : https://easyupload.io/787vsa

Edit: Do not use with directx 10,11,12 drivers,it will work but you will have SRGB forced. Looks best on Vulkan and Glcore.

4 Likes

Here I’ve reduced beam shape high to 80.00, which adds some additional bloom to highlights. This is probably the sweet spot for beam shape high at this level of brightness. If you go much lower than this you need to lower bright boost in order to avoid clipping.

2 Likes

You can also change glow strength to 0.01 to make things even brighter, although I wouldn’t go higher than that because it can look pretty unnatural at higher settings, IMO.

glow 0.00

glow 0.01

3 Likes

Some mid-combo screenshots:

2 Likes

Hey all I wanted to get some feedback on an idea for a retroarch shader loading feature:

@hunterk and I have chatted about this a bit, and the idea for the feature is to have replaceable text in the preset files which would be replaced when the preset is loaded.

@Duimon, @ArsInvictus, @PapaShine, @BendBombBoom, I thought you might be interested in this as well.

We could do things like change textures based on game or core, like

"/shaders/my_backgrounds/##gamename##_Backdrop.png"

If you had loaded Discs of Tron this would become:

"/shaders/my_backgrounds/dot_Backdrop.png"

This means that we could have one preset which could be reused and swap out textures for each game used, instead of having to have a preset for each different texture (which is not very fun or manageable).

We could probably also do this for the core’s name


We could also do it for the shader extension so we could have only one shaders_common folder, instead of having them always be in separate directories like shader_slang, shader_glsl, so especially for newer users they could just open shaders from here regardless of what video driver they are using.

for a path to a shader we could put in:

 "../shaders_##shadertype##/crt/AwesomeCRTShader.##shadertype##" 

then when this was loaded it could resolve to

"../shaders_slang/crt/AwesomeCRTShader.slang" 

if you are in a video driver using slang.

Any thoughts? Anything else you would want to swap out on loading a preset?

5 Likes

@HyperspaceMadness Sounds awesome. Is this something that could be made for any variable? (I’m guessing it would link to a text files with a name and numerical values.)

For example if I have a background for Mario that is bright and colorful and a background for Metroid that is dark and muted I might need different border hue/brightness settings. Perhaps I could just set it to always take the background color as it’s border.

Also is there a default texture that will load if no texture is found?

A great idea that I would use for my shenanigans.

2 Likes

This would be great! So much simpler to configure, we could just have one entry per core for the overlay setup and the right image would load automatically.

One thing I was wondering about. The way MAME works with LAY files, is that it looks for a directory with the base game name, while in RetroArch, it looks for a preset with the full ROM file name, such as rtypeu.cfg. If we were to do something like this, where the ##gamename## is replaced, could it be the root gamename of rtype, rather than rtypeu? This would greatly simplify the setup, as I could just have one config and image regardless of what regional variation someone loaded for a particular rom.

I’ll give some thought as to other things that could be swapped out dynamically.

2 Likes

Max-dr has a strange green tint on my monitor, at least it’s not clear white.

I think the first version of this would probably only be replacing hardcoded tags, like replacing ##gamename## with the value Retroarch has for this.

For replacing arbitrary user defined text we would have to see how to do this with an extra file, perhaps a my_preset.replace to go along with my_preset.slangp, but this file would also need to be automatically found by retroarch so we’d need to figure out where it’s supposed to be loaded from.

We could have a number of arbitrary replacements, like ##text_replace01##

It is just a straight text replacement without any additional safety features, so it would do whatever Retroarch does now when it can’t find a texture. So this means that the shader would just not load :(.

Yeah this is kind of what I’m hoping for too :slightly_smiling_face:

I’m not sure if this is possible right now, I’m not sure if retroarch knows what the root game name is, it’s likely it only knows the region name, so this might be something that would require the core to notify retroarch and have retroarch supply this.

1 Like

@HyperspaceMadness

I think this some serious possibilities! :grin:

I am guessing that this would be an optional feature and not actually replace the way RA saves game or content directory presets?

1 Like

Yes totally optional, and only implemented by opening a preset and pasting in the bits with the ## on them to be replaced

It would function by just doing a text replace of these when the file is read before the shader is loaded. Basically the same as if you did search and replace all on the file.

1 Like

Do you think this could also work with coordinates? So we can set the screen location and screen scale? So if you have a larger screen overlay version or overlay with different position it will update the game in one file. As mama keeps all that info in the one file, retroarchhas it split over 3. @hunterk it would be nice to have a one option to change overlay, as some like dark or night versions, large screen and so on.

Right now I’m really only looking at doing replacement in the shader loading rather than general config loading. HunterK and I have talked a bit about possibly being able to set video aspect ratio in the shader preset so that when the preset loads the video aspect ratio is set, and I think the screen coordinates might fit into that feature.

In terms how we could currently do scale and position in a shader like the Mega Bezel where the top image can be applied in the shader, it might be better to derive scaling and position from this image directly in the shader. We would do this by finding the center of the hole in the image in the shader code. Then have some scaling and position could offset from this baseline.

So if the general scaling was derived from the top image, then all we need to do is have the top image change per game and the screen would scale relative to this.

I’ll see if I can add a feature in the Mega Bezel to auto-set base scaling from the top image.