Please show off what crt shaders can do!

what is the purpose of increasing gamma like this?

yeeahhh I don’t recommend it, here are some more reasonable settings.

 shaders = "17"
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 = "true"
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 = "true"
wrap_mode3 = "clamp_to_border"
mipmap_input3 = "false"
alias3 = "PrePass0"
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/ntsc/ntsc-pass1.slang"
filter_linear4 = "false"
wrap_mode4 = "clamp_to_border"
frame_count_mod4 = "2"
mipmap_input4 = "false"
alias4 = ""
float_framebuffer4 = "true"
srgb_framebuffer4 = "false"
scale_type_x4 = "source"
scale_x4 = "4.000000"
scale_type_y4 = "source"
scale_y4 = "1.000000"
shader5 = "shaders_slang/crt/shaders/guest/advanced/ntsc/ntsc-pass2.slang"
filter_linear5 = "false"
wrap_mode5 = "clamp_to_border"
mipmap_input5 = "false"
alias5 = ""
float_framebuffer5 = "false"
srgb_framebuffer5 = "false"
scale_type_x5 = "source"
scale_x5 = "0.500000"
scale_type_y5 = "source"
scale_y5 = "1.000000"
shader6 = "shaders_slang/crt/shaders/guest/advanced/custom-fast-sharpen.slang"
filter_linear6 = "true"
wrap_mode6 = "clamp_to_border"
mipmap_input6 = "false"
alias6 = "NtscPass"
float_framebuffer6 = "false"
srgb_framebuffer6 = "false"
scale_type_x6 = "source"
scale_x6 = "1.000000"
scale_type_y6 = "source"
scale_y6 = "1.000000"
shader7 = "shaders_slang/crt/shaders/guest/advanced/convert-ntsc.slang"
filter_linear7 = "true"
wrap_mode7 = "clamp_to_border"
mipmap_input7 = "false"
alias7 = ""
float_framebuffer7 = "false"
srgb_framebuffer7 = "false"
scale_type_x7 = "source"
scale_x7 = "0.500000"
scale_type_y7 = "source"
scale_y7 = "1.000000"
shader8 = "shaders_slang/crt/shaders/guest/advanced/stock.slang"
filter_linear8 = "true"
wrap_mode8 = "clamp_to_border"
mipmap_input8 = "true"
alias8 = "PrePass"
float_framebuffer8 = "false"
srgb_framebuffer8 = "false"
scale_type_x8 = "source"
scale_x8 = "1.000000"
scale_type_y8 = "source"
scale_y8 = "1.000000"
shader9 = "shaders_slang/crt/shaders/guest/advanced/avg-lum-ntsc.slang"
filter_linear9 = "true"
wrap_mode9 = "clamp_to_border"
mipmap_input9 = "true"
alias9 = "AvgLumPass"
float_framebuffer9 = "false"
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/linearize-ntsc.slang"
filter_linear10 = "true"
wrap_mode10 = "clamp_to_border"
mipmap_input10 = "false"
alias10 = "LinearizePass"
float_framebuffer10 = "true"
srgb_framebuffer10 = "false"
scale_type_x10 = "source"
scale_x10 = "1.000000"
scale_type_y10 = "source"
scale_y10 = "1.000000"
shader11 = "shaders_slang/crt/shaders/guest/advanced/gaussian_horizontal.slang"
filter_linear11 = "true"
wrap_mode11 = "clamp_to_border"
mipmap_input11 = "false"
alias11 = ""
float_framebuffer11 = "true"
srgb_framebuffer11 = "false"
scale_type_x11 = "absolute"
scale_x11 = "640"
scale_type_y11 = "source"
scale_y11 = "1.000000"
shader12 = "shaders_slang/crt/shaders/guest/advanced/gaussian_vertical.slang"
filter_linear12 = "true"
wrap_mode12 = "clamp_to_border"
mipmap_input12 = "false"
alias12 = "GlowPass"
float_framebuffer12 = "true"
srgb_framebuffer12 = "false"
scale_type_x12 = "absolute"
scale_x12 = "640"
scale_type_y12 = "absolute"
scale_y12 = "480"
shader13 = "shaders_slang/crt/shaders/guest/advanced/bloom_horizontal.slang"
filter_linear13 = "true"
wrap_mode13 = "clamp_to_border"
mipmap_input13 = "false"
alias13 = ""
float_framebuffer13 = "true"
srgb_framebuffer13 = "false"
scale_type_x13 = "absolute"
scale_x13 = "640"
scale_type_y13 = "absolute"
scale_y13 = "480"
shader14 = "shaders_slang/crt/shaders/guest/advanced/bloom_vertical.slang"
filter_linear14 = "true"
wrap_mode14 = "clamp_to_border"
mipmap_input14 = "false"
alias14 = "BloomPass"
float_framebuffer14 = "true"
srgb_framebuffer14 = "false"
scale_type_x14 = "absolute"
scale_x14 = "640"
scale_type_y14 = "absolute"
scale_y14 = "480"
shader15 = "shaders_slang/crt/shaders/guest/advanced/crt-guest-advanced-ntsc.slang"
filter_linear15 = "true"
wrap_mode15 = "clamp_to_border"
mipmap_input15 = "false"
alias15 = ""
float_framebuffer15 = "false"
srgb_framebuffer15 = "false"
scale_type_x15 = "viewport"
scale_x15 = "1.000000"
scale_type_y15 = "viewport"
scale_y15 = "1.000000"
shader16 = "shaders_slang/crt/shaders/guest/advanced/deconvergence.slang"
filter_linear16 = "true"
wrap_mode16 = "clamp_to_border"
mipmap_input16 = "false"
alias16 = ""
float_framebuffer16 = "false"
srgb_framebuffer16 = "false"
scale_type_x16 = "viewport"
scale_x16 = "1.000000"
scale_type_y16 = "viewport"
scale_y16 = "1.000000"
g_crtgamut = "0.000000"
g_vignette = "0.000000"
PR = "0.000000"
WP = "-100.000000"
wp_saturation = "1.100000"
SHARPEN = "1.000000"
CONTR = "0.250000"
GAMMA_INPUT = "2.400000"
glow = "0.000000"
gamma_c = "1.080000"
brightboost = "1.999999"
brightboost1 = "1.999996"
bogus_scanline = "1.000000"
gsl = "1.000000"
beam_max = "1.100000"
beam_size = "0.000000"
scans = "1.000000"
spike = "1.000000"
h_sharp = "3.999998"
s_sharp = "1.000000"
shadowMask = "3.000000"
maskstr = "0.500000"
mcut = "0.500000"
maskDark = "0.300000"
maskLight = "1.000000"
slotwidth = "3.000000"
mclip = "0.700000"
gamma_out = "2.400001"
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"
3 Likes

Bruh, the question was why with the gamma :joy:

@strawbrains It’s sorta to mess with the color range and contrast, super shitty inaccurate explanation but its an answer lol

Basically another idea that didn’t pan out, using high gamma with high brightboost values, moving on…

Yeah I think gamma is better left at defaults, or if a brighter image is desired then just raise output gamma and increase saturation as needed.

1 Like

Is there a way to make the ntsc stuff black and white? (guest-advanced-ntsc)

3 Likes

You can use the SVIDEO preset or 2-phase with merge. Or a custom NTSC preset (-1.0) with artifacting set to 0.0.

3 Likes

Thanks! I like the custom NTSC preset option.

4 Likes

Noise effect is kinda cool.

@guest.r I like how the noise effect looks in still shots. Is there a static mask effect that can look like this? Basically, noise without the motion?

3 Likes

You can add static noise too by using it with a negative parameter value. :grin:

4 Likes

Ik ik I’m constantly off-topic but just wanted to share this with you guys as I was super excited tbh.

Just ordered a MISTer!!

7 Likes

This is going to be awesome for shaders.

4 Likes

Should start a thread. I have a lot of questions, like, what does this offer that RA doesn’t, from an end user perspective? Looks cool, just wondering what the practical advantages are.

@Tatsuya79

I thought shaders were pretty limited on the Mister, what did you have in mind?

3 Likes

Ye I can start one after it arrives, and I figure out life :joy:

Honestly I thought Tatsuya was giving me crap for how off topic I was, with his shader comment. (If so that’s hilarious imho)

3 Likes

I was just joking about the mister limitations, as you keep hearing people everywhere saying it’s the ultimate machine for the “real retro gaming experience”.

3 Likes

Yeah, MiSTer’s great. I have one and love it. It makes a lot of stuff that’s hard to do in RetroArch trivial/easy (like connecting to a CRT, getting original/native refresh rates, etc.; from a developer standpoint, making the emu components run in lockstep+parallel is built-in/free vs needing expensive cooperative threading models, among other advantages). Their “shader” (not really shaders at all) support is extremely limited, but SoltanGris42 has done a really admirable job working with what it has.

The peanut gallery likes to try and stir up rivalry between software emus and FPGA, which is silly since the vast majority of FPGA implementations are based heavily on software emu code, documentation and RE work, and every software emu dev I know of is happy to see hardware implementations for a variety of reasons (another form of documentation, different bugs/issues are found and squashed, more smart people attacking the remaining black boxes, etc.).

That said, there is a lot of trash-talk of RetroArch, specifically, among MiSTer devs and enthusiasts, but whatever. I’m not into that kinda shit, so I just mute the channels where that tends to happen and let them have their fun.

6 Likes

People just like to stir the pot, some just are really invested in their platform either via money or time. 2¢

But yeah I agree with basically your whole PSA :joy:

Better hardware documentation is a no brainer in moving projects like these along, some people don’t seem to understand that this helps software emulation, and all those decades dumped into software emulation has helped MISTer.

Sometimes people just want a soapbox, I guess 🤷

The thing about the RA trash talk comes down to money invested and a diy mindset (from MISTer when was more “complicated” to set up, and the fact that you can diy add-on boards). Then you compare that to RA where it’s free works on your fridge, watch and toaster. Has fairly cake installs in most situations, just click a button lol, basically it’s nutshell elitism sorta.

RA is still my bae, even if MISTer is taking my money like we married or something :joy:

3 Likes

So it’s main advantages are ease of use (for some things but not all) and quality of life?

It’s definitely a cool toy but RA still has a huge advantage: you can slap a cheap new graphics card into any 10 year old workstation and run everything full speed w/hard gpu sync at 0 frames for a latency-free emulation. So for about $150 you’re getting performance on par with the MISTer. I understand it won’t be 100% cycle accurate, but that’s a level of pedantry that I personally don’t care about (99% is good enough for me).

Basically, I love RA. :smiley:

@guest.r Any idea if your shader could be ported to MISTer (or maybe a stripped-down version)?

2 Likes

My fastest shader is the glsl version of crt-guest-sm, but i doubt it would work at full speed with MISTer. I guess this is more crt-pi/zfast territory.

4 Likes

MiSTer has no GPU. It can’t run shaders at all.

4 Likes

Yeah looked at some filters used and they seem quite optimized, some sort of pixel weight coefficients.

Example of bi-linear upscaling:

# Bilinear

# horizontal coefficients
   0, 128,   0,   0
   0, 120,   8,   0
   0, 112,  16,   0
   0, 104,  24,   0
   0,  96,  32,   0
   0,  88,  40,   0
   0,  80,  48,   0
   0,  72,  56,   0
   0,  64,  64,   0
   0,  56,  72,   0
   0,  48,  80,   0
   0,  40,  88,   0
   0,  32,  96,   0
   0,  24, 104,   0
   0,  16, 112,   0
   0,   8, 120,   0

# vertical coefficients
   0, 128,   0,   0
   0, 120,   8,   0
   0, 112,  16,   0
   0, 104,  24,   0
   0,  96,  32,   0
   0,  88,  40,   0
   0,  80,  48,   0
   0,  72,  56,   0
   0,  64,  64,   0
   0,  56,  72,   0
   0,  48,  80,   0
   0,  40,  88,   0
   0,  32,  96,   0
   0,  24, 104,   0
   0,  16, 112,   0
   0,   8, 120,   0

Maybe this could be expanded into per-RGB-component handling, but nevertheless, very efficient.

2 Likes