Please show off what crt shaders can do!

One more, no glow.

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/stock.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 = "true"
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_signal_type = "0.000000"
g_crtgamut = "0.000000"
g_vignette = "0.000000"
glow = "0.000000"
brightboost = "1.200000"
brightboost1 = "1.200000"
gsl = "1.000000"
beam_max = "1.300000"
scans = "2.000000"
shadowMask = "2.000000"
maskDark = "0.000000"
maskLight = "1.000000"
mask_layout = "1.000000"
mclip = "0.000000"
gamma_out = "2.200000"
post_br = "1.400000"
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"

And here’s a close up of white taken with my phone:

The black lines between triads are a bit annoying, it’s not something that would be solved with brighter “phosphors” either because the green has no space to glow/bloom into. It would just wind up being blue cyan yellow red.

4 Likes

Otoh, getting mask 0 bright enough is a breeze, even at 100% strength. Same settings as a above, just changed the mask and increased scanline shape bright/dark by a couple notches each.

5 Likes

Why don’t you try bumping Bloom instead of Glow? Bloom has recently been overhauled so that it doesn’t wash out the mask anymore while Glow does that grey halo thing.

Keep Glow and Halation at 0 and just bump Bloom a bit, no more than 0.15. It actually enhances the saturation and vibrance of the colours while adding brightness.

In addition to that, if your mask happened to get washed out Mask Gamma can bring it back. Even that can allow you to have a brighter image with full strength Mask but it may not be necessary.

After that you can use your Horizontal Sharpness and Subtractive Sharpness to dial in your crispness and perception of resolution. I’ve been playing with Blargg and it is possible to get some of the NTSC effects dialed in while not making things blurry by increasing the resolution parameter.

You can probably enable Blargg NTSC RGB or S-Video in your NES Emulator for that nice final post processing element. Or you can use the NTSC Shaders, but less really is more here, you can’t really push artifacting, fringing and bleeding without introducing other unwanted elements so just use it lightly.

I’ve found that in Nestopia, using Blargg NTSC Composite or S-Video improves the colours, especially on Ryu in Ninja Gaiden. I’ve seen you complain about getting NES colour right.

The only thing is the default Composite is too heavy on the blur and unwanted artifacts, while S-Video is still a bit soft but improves the colour.

RGB on the other hand doesn’t really improve the colour like the other 2.

This has been my experience using the Blargg NTSC Filter with my presets. My presets based on the Blargg NTSC SNES video filter don’t look the same as the built in Genesis Plus GX Blargg filter, even if I set both to use Composite. The built-in filter does the rainbow effect when set to composite, while the Blargg SNES video filter from RetroArch doesn’t.

I wish we had all the Blargg DLLs for the different systems not just SNES or maybe even the same DLLs and settings from Genesis Plus GX and Nestopia so we could tweak those as well. Is it possible for these to be added @hunterk?

3 Likes

Here are some pictures of Sony MegaTron Colour Video Monitor in action.

By the way MegaTron plays very nicely with Blargg NTSC Filters. I see you’ve combined them with the NTSC Shaders as well. @Nesguy

2 Likes

Not by me. They would have to be ported to RetroArch’s filter format (i.e., aside from just copying them out of the respective core’s source trees), which I’ve tried and failed to do for the Mega Drive version before. Anyone else is welcome to try it, though.

4 Likes

Actually that’s @MajorPainTheCactus’s own “crt-sony-megatron-aeg-CTV-4800-VT-hdr” preset, just in SDR mode and with a 1080p mask.

I’m using GDV to get a target for the Megatron CVM in SDR mode.

Here’s GDV with just a notch of bloom. It does brighten things up quite a bit. It doesn’t do anything to solve the black lines between triads problem, but maybe I’m making too big a deal out of this, since at least some aperture grilles appear to have the black lines, such as in this photo from wikipedia:

https://commons.wikimedia.org/wiki/File:CRT_Phosphors.jpg#/media/File:CRT_Phosphors.jpg

4 Likes

Is this the HDR version? Something seems off, it doesn’t look like other photos/videos I’ve seen.

2 Likes

@cyber are you sure that bloom doesn’t wash out the mask? This is with bloom at 0.50. It’s looking pretty weird here, I specifically don’t like how there’s clipping in the middle of the scanline.

I tried bloom 0.10 and the effect is barely noticeable, at 0.05 I can’t detect it in a closeup. So I think if bloom is going to be used at all it should be limited to just a notch. I’m on the fence about it though.

3 Likes

Looking good @Cyber something is wrong in the second picture down though and possibly other images in that each double set of pixels representing a phosphor should be the same length and they aren’t in your images. That’s either a bug in the shader - I do know of a problem I need to fix where I potentially sample two different source pixels for each side of the phosphor which is wrong. However the problem above seems to be a little more extreme than that would produce. So possibly something up with your display chain on top of the shader bug? It’s strange as I don’t see the problem in the blues everywhere.

Just as an example here the two green lines of pixels should be the same intensity and length same goes for the blues. Looks really wrong here:

1 Like

The phosphors don’t appear to be the same width and the scanlines are a bit weird too, the phosphor dynamics seem off.

1 Like

@Nesguy and @MajorPainTheCactus don’t pay too much mind to those screenshots as I can’t even remember which preset is that. I lost a preset I had where I had just found that things looked somewhat nice so I basically have to start over. I don’t even remember which of @MajorPainTheCactus’s presets it was based on. On my TV there’s a lot of variance in the output (including colour and brightness) depending on which TVL is selected and also which Type of mask. Shadow Mask seems to work the best as I can do all the TVLs and the colours look most accurate to me. If I switch to Aperture Grille then I can’t do 600 or 1000TVL. They look green. Slot Mask’s colours look weird.

I’ll have to go through the presets again until I find the one that looks best on my screen. I’m really looking for a nice Aperture Grille look with proper colours (to my eyes) with enough brightness, saturation and contrast.

My TV is SDR so those pics were taken in SDR mode. When viewed in the forum post on the same TV they look a lot darker than in real life. On my phone they looked okay.

So in time, probably when I get something that looks the way I like (again) I might report back with some more empirical findings but I do see the potential in the shader!

2 Likes

I appreciate the love and you’re welcome. Feels good when someone pops in that hasn’t posted in months just to show some love to my presets and I’m glad you like them, they just give off a nice retro feel doesn’t it? I’m working on another update, the preset you have looks like this:

I posted up another preset update not too long afterwards with mask settings given to me by the man guest himself which looks like this:

That’s the intended look the first preset was suppose to look like but ended up having the scanlines pretty much taken out due to it creating a nasty moire like pattern across the screen unless you enable integer scaling and lose some of the image from the top and bottom of the screen. I don’t like integer scaling so I’m working on my next update to get the image to look like the second pic but without having to use integer scaling so that you can still see everything on the screen and with no moire, so far I’m here with it:

Once I tweak it to where it looks like or close enough to the second pic I’ll post up another update asap

5 Likes

It is supposed to look like that if you use it at full strength. Of course mask 0 will be more bright, you use more pixels then, 18 subpixels vs 12 subpixels at mask 2 (50% more bright).

Imagine using B-G-R-X, or R-G-B-X that would be like playing Doom on N64 lol

1 Like

It’d be nice if we knew whether or not light bleeds into the vertical black lines on an aperture grille that has the vertical black lines. I imagine it would but it’d be nice to have empirical evidence. If so, using some bloom (just a notch or two) might actually be more accurate when using the three color aperture grille masks.

Does anyone know?

1 Like

Here’s an example of how mask detail can improve the image. Look at the bridge of the nose, the reflection in the eyes, the lips, etc.

First, default sharpness settings in guest-dr-venom combined with some other settings which I’ll post below.

horizontal sharpness adjusted to maximum

horizontal sharpness adjusted to maximum, remove the mask

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/stock.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 = "true"
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_signal_type = "0.000000"
g_crtgamut = "0.000000"
g_vignette = "0.000000"
glow = "0.000000"
bloom = "0.050000"
brightboost = "1.000000"
brightboost1 = "1.000000"
gsl = "1.000000"
beam_min = "1.700000"
beam_max = "1.600000"
beam_size = "0.000000"
scans = "2.500000"
shadowMask = "2.000000"
maskDark = "0.000000"
maskLight = "1.000000"
mask_layout = "1.000000"
mask_gamma = "5.000000"
mclip = "0.000000"
gamma_out = "2.100000"
post_br = "1.750000"
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"
1 Like

My recommendation was to go no higher than 0.15. My masks don’t look washed out in my presets that use full strength masks and bloom at 0.15. Like the Halation setting, it may not exactly be linear especially at lower settings. You might get a noticeable jump going from 0.10 to 0.15.

@Cyber I think the bloom washes out the phosphors pretty badly, actually, and it results in the center of the beam getting washed out even further, resulting in a tangible difference in beam shape that’s noticeable at normal viewing distances even if you can’t quite put your finger on it. Here’s a closeup of a white pixel showing the center of the beam.

No Bloom

image

Bloom 0.05

image

Bloom 0.10

image

Bloom 0.15

image

1 Like

@guest.r is 0.01 the smallest increment we can use for glow, now?

2 Likes

It’s a bit reduced down further to functional 0.005. 0.01 is just a parameter increment.

It’s similar to say that decreasing mask strength washes out the phosphors. Bloom has a property to induce a more bright pixel radial influence on mask strength and brightness. Currently it’s has still a bit saturating effect on the end image using very high mask strengths.

The effect is also somewhat scanline sensitive, so scanlines should maybe be adjusted if using bloom, maybe somewhat less scanline saturation looks better.

2 Likes

Yes, I was going to add that it’s not quite as bad as reducing the mask strength.

I was also thinking that something might be done with the beam shape controls to eliminate the mid-beam clipping.

2 Likes