New CRT shader from Guest + CRT Guest Advanced updates

What about something like Samsung Q80? I know they’re brighter and can max out mask effect more…but I don’t want to fry my eyes with extreme blue light. Plus I think the refresh rate on the OLED would be faster.

2 Likes

OLED TVs have a latency of less than 0.1 ms, where the best QLED TVs have a response time of 2 to 5 ms. OLED technology therefore displays smoother images and better definition on moving images, without ever blurring. This is especially nice when watching sports on TV.

3 Likes

It’s all trade-offs. Motion handling is better on OLED, but max brightness is higher on QLED and QLED has a more mask-friendly subpixel structure.

3 Likes

Most of us use Windows and it is not color managed. For example, I use Adobe RGB monitors on my PC and this means that colors are oversaturated. If you know you have a wide gamut Adobe RGB or even DCI-P3 monitor, you can set this as a base – it’s a starting point.

To clarify, some apps are color managed like chrome and photoshop.

4 Likes

@trnzaddict

OLED in the living room for watching TV/movies

QLED in the MAME cab, viewing angles don’t matter, better for CRT emulation

3 Likes

17 posts were merged into an existing topic: CRT Squabblin

Thanks guest for the answer. :slight_smile: makes it quite clear to me

2 Likes

The png size could be 2x1 or 4x4…doesn’t really matter, since the pattern is tiled over the output resolution. As i remember to have read royale also uses lanczos mask resampling for different situations. It should work better and better as viewport increases.

2 Likes

Hi all I moved the posts debating about display panel types to CRT Squabblin as this thread is supposed to be for Guest’s amazing shaders.

11 Likes

Guest.r: can you add a mask that simply darkens every 2nd/3rd/4th etc (with choice) pixel (a simple vertical gray line)?

PS the guest-advanced-fast is stunning on 1080p cellphone snapdragon 835, especially when I use it for rotated screen games, I also use an adjustable gamepad so I can use it on portrait mode.

4 Likes

I’ve mentioned something like this a couple times. At 1080p scales, darkening every 3rd line can look quite nice with the right scanline settings. Not sure if there’s enough demand for it or if it’s feasible, though.

2 Likes

Release version is almost ready. I’m adding 2 new BW masks along with some minor fixes. I guess it’s a viable option for ordinary displays and best one for plasma / rgbw (low (ips) and high quality (oled) white pixel implementations).

Best viewed with dpi scaling at 100%.

10 Likes

New Release Version (2021-10-10-r1):

Notable changes:

  • 2 more 3-size BW masks added, 8 and 9.
  • Interlace params (intera, linearize pass) fixed back, as it affects brightboost with interlaced situations.
  • Mask parameter descriptions adjusted accordingly.

Download link:

https://mega.nz/file/J4A1GYLb#4kSV_mJy0p9zdWB6r0shOGpBo4tlt--oOS-atilNX_0

13 Likes

That slotmask looks so sexy. Please post up the settings you used for that Castlevania pic.

2 Likes

It’s a 'laced ntsc preset for the newest shader version, the mask settings go like this:

  • mask 9.0
  • slotmask width 3.0
  • double slot set to 4x1

Otherwise to use this preset the new version is to be copied into the crt folder properly. It’s set to work best with something like PSX games at 2x resolution.

shaders = "17"
shader0 = "shaders_slang/stock.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/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/ntsc/shaders/ntsc-adaptive/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/ntsc/shaders/ntsc-adaptive/ntsc-pass2.slang"
filter_linear5 = "true"
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/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"
ntsc_scale = "0.450000"
interm = "5.000000"
downsample_levelx = "0.500000"
prescalex = "2.000000"
bloom = "0.500000"
halation = "0.200000"
h_sharp = "3.000001"
shadowMask = "9.000000"
maskstr = "0.500000"
slotmask = "0.500000"
slotmask1 = "0.850000"
slotwidth = "3.000000"
double_slot = "2.000000"
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"
5 Likes

Do you think we can get a more prominent slotmask pattern with Guest Advanced someday at 4K or even 2k? I mean like this:

I understand that close-up-level details are not possible but can we get the details of, what can be observed from a 1920x1440 photo of an actual CRT screen? :stuck_out_tongue:

2 Likes

I did just a quick check, mask 8 darkens every 3rd pixel, looks cool. Mask 9 not showing anything (?). Mask 10 adds 4 stripes red-yellow-cyan-blue. Mask 11 adds 4 stripes red-magenda-cyan-green

mask 8:

2 Likes

Slotmask is as good as it gets atm, up to a 4k resolution. The reason, as usual, is plain output display pixel size and that you more or less want a symmetric pattern.

If the same code works differently on different adapters, then it’s probably some ‘rounding issue’, since i’m getting different results here. Will see if it’s fixable, but atm. you can just think out the mask you don’t like and use mask 7 and 8 for example. For same results i use mask 7 and 9…

4 Likes

I tried out these settings and even though the NTSC pass was added in the mix, I can’t get the slotmask to look like that castlevania pic for some reason. Can you post the settings you used in for that pic without the NTSC pass?

1 Like

You should probably use mask 8.0 though. The main problem is that “double_slot” at 2.0 slotmask needs like 4k with scanlines enabled.

2 Likes