New CRT shader from Guest + CRT Guest Advanced updates

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

Sorry, guest.r but I haven’t been able to look at the whole thread. I do recall you mentioning somewhere that you made an effort to account for the WRGB pixel format on OLEDs. Which masks are these? Sorry if my question makes no sense.

2 Likes

These masks are 7 - 9 (BW masks), although masks 8 and 9 seem to be handled differently on AMD and nVidia HW for some reason. If you want some ‘colorplay’ then they are best used with deconvergence options or the NTSC version.

5 Likes

HI, always thanks for your work. I got a question about color thing.

Is it still hard to get the color like crt TV or monitors? I heard that LCD had a narrower color gamut compared to crt, and that’s the main reason why it is impossible to implement. But now there’s a lot of wide gamut monitors came out. things would be different.

So I recently bought LG-27GP850 monitor, but the result was different from what I expected. I tried using the color gamut and color profile options from shader provided, but The color is not like the real crt monitor. (when It compared to my PVM-14L2, SONY CPD-G200J monitor)

It would be foolish to expect them to be exactly the same. But it’s disappointing that it’s not even similar. Something seems overly dark and dull… I want to know which setting I’m doing wrong. or this LCD monitor’s wide gamut still isn’t enough?

※ LG-27GP850

  • Gamut Coverage - sRGB : 100%, AdobeRGB : 88%, P3 : 96%
  • I Calibrated to 6500K, 2.2 Gamma
2 Likes

The dark part can mainly be corrected by increasing the overall brightness setting of your LCD, it’s more or less a HW issue. If you crank up brightness within the shader then you basically don’t increase peak brightness but will have color clipping issues.

If the colors seem dull then you can increase saturation and play with color temperature, to match your appearance. Ofc. there are plenty of brightness correcting parameters within the shader to tune the brightness curve too.

I like to mention that the vanilla setting shader output is quite neutral regarding what the core/emulator provides. So just do the steps in your preferred visual direction.

4 Likes

Well I think the shaders are as good as it gets on this type of display that emmits much less light.

1 Like

If you’re having a hard time getting things to look the way you want then perhaps you can try my presets available at this link. They aren’t perfect and are not even trying to be accurate simulations but you may or may not like them. There are video clips available so you can see before you try them. Note that I’m in the process of updating them so what you see there today may not be the same tomorrow.

Another thing. It’s one thing to calibrate a monitor for work and another for play. I use my eyes to calibrate my monitors as well as Windows built in display calibration tool. Maybe you might get better results out of your games if you set your gamma and colour temperature the way it looks best to you and not necessarily to particular numbers.

3 Likes

Hello, I’m trying to play with colors. At this point I have the following question:

Are the crt-color-profiles to be used “together” with the lut-color options or only one at a time? Is it for example intended to use the trinitron option on the lut-color option and on the crt-color-profile at the same time?

I’m sorry if this has been answered in the past.

1 Like

Lut colors are basically ‘more’ color profiles. They can be used together with standard profiles for any reason, but the preferred way is to chose one option.

As a remark, trinitron LUT profiles are calibrated to D65 color temperature, for better authenticity color temperature option is best adjusted to cooler/blueish colors.

4 Likes

Thanks for the quick answer. Makes it clear. I’ll try the trinitron-lut further editing… Will post something then. I have to admit the venom shaders are addictive :slight_smile:

Not the first to say that I guess. More addictive then all the others ahhahah I explicitly wanted to know if one makes the screen more trinitron by using color-profile and lut on trinitron setting but know I know.

Would it make “sense” in terms of accuracy to put lut on ntsc and color profile on trinitron?

Isn’t it a viable thought, that ntsc is the region and trinitron the tv-model?

1 Like

It doesn’t sum up in this specific case for accuracy’s sake. :wink: The ntsc LUT colors apply to an earlier standard with different phosphors, similar to the ntsc colors shader (found in the misc folder).

It should work better with the P22 color profile, trinitron LUT and color temperature set to ‘coolish’. The trinitron color profile is also a good option as a standalone choice.

Ofc. you can get the most accurate result if you set/calibrate your primary display to sRGB and don’t approximate your display gamut within the shader.

2 Likes

This. Using the color profiles (in my case Adobe RGB) prevents me from having to inject with Reshade the calibrated LUT for my PC monitors to look like SRGB. These are an approximation for the display standard. One of my monitors is 98% AdobeRGB so I have no qualms about using it (they are also calibrated). The other is 78% so my expectations are lower. My OLED is 98% Display P-3 so I also feel comfortable selecting that option since it too is calibrated.

3 Likes

@guest.r, there are green and magenta in your Mask 5.

5

And the RGB is seen in Mask 2 (it’s Aperture Grille too, isn’t it?).

2

Is the Mask 5 displaying correct?

1 Like

Yeah, mask 5 is the trinitron version of the mask 0 (subpixel correct spacing, mask width of 2). Mask 2 is the lottes rgb mask (mask width of 3).

3 Likes