Please show off what crt shaders can do!

…yeah you don’t increase it if you don’t need to. Otoh you can have nice filtering in the pixel resolution is doubled etc…which can happen to most amiga games if using hires.

2 Likes

Here is an example how to use the ‘internal resolution’ feature with the hd version. One of the benefits it has is also a fully capable vertical resampler.

Castlevania (PSX), 3x res, xbr texture filter:

https://screenshotcomparison.com/comparison/21688

4 Likes

My attempt on a Commodore 1084-S look, using Magenta-Green-Yellow-Blue mask and pushed by Guest.r slot-mask.

6 Likes

looking good! Would you please share this 1084-S preset? :grin:

1 Like

That’s a very strange mask, I’m not sure I understand the rationale behind it.

Do you have a good photo of a 1084-S for reference?

1 Like

Actually that mask was a mistake, but if you use mask 0 and slot mask width 2 height 2 iirc, should be about the same and integer 4 x so scanlines align correctly or height 1 to align always

Photo here

1 Like

Grab one using Guest.r-Dr.Venom that should be almost the same if not better at 4x integer

shaders = "11"
shader0 = "shaders_glsl/crt/shaders/guest/lut/lut.glsl"
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_glsl/crt/shaders/guest/color-profiles.glsl"
filter_linear1 = "false"
wrap_mode1 = "clamp_to_border"
mipmap_input1 = "false"
alias1 = ""
float_framebuffer1 = "false"
srgb_framebuffer1 = "false"
scale_type_x1 = "source"
scale_x1 = "1.000000"
scale_type_y1 = "source"
scale_y1 = "1.000000"
shader2 = "shaders_glsl/crt/shaders/guest/d65-d50.glsl"
filter_linear2 = "false"
wrap_mode2 = "clamp_to_border"
mipmap_input2 = "false"
alias2 = ""
float_framebuffer2 = "false"
srgb_framebuffer2 = "false"
scale_type_x2 = "source"
scale_x2 = "1.000000"
scale_type_y2 = "source"
scale_y2 = "1.000000"
shader3 = "shaders_glsl/crt/shaders/guest/afterglow.glsl"
filter_linear3 = "false"
wrap_mode3 = "clamp_to_border"
mipmap_input3 = "false"
alias3 = ""
float_framebuffer3 = "false"
srgb_framebuffer3 = "false"
scale_type_x3 = "source"
scale_x3 = "1.000000"
scale_type_y3 = "source"
scale_y3 = "1.000000"
shader4 = "shaders_glsl/crt/shaders/guest/avg-lum0.glsl"
filter_linear4 = "false"
wrap_mode4 = "clamp_to_border"
mipmap_input4 = "false"
alias4 = ""
float_framebuffer4 = "false"
srgb_framebuffer4 = "false"
scale_type_x4 = "source"
scale_x4 = "1.000000"
scale_type_y4 = "source"
scale_y4 = "1.000000"
shader5 = "shaders_glsl/crt/shaders/guest/avg-lum.glsl"
filter_linear5 = "false"
wrap_mode5 = "clamp_to_border"
mipmap_input5 = "true"
alias5 = ""
float_framebuffer5 = "false"
srgb_framebuffer5 = "false"
scale_type_x5 = "source"
scale_x5 = "1.000000"
scale_type_y5 = "source"
scale_y5 = "1.000000"
shader6 = "shaders_glsl/crt/shaders/guest/linearize.glsl"
filter_linear6 = "false"
wrap_mode6 = "clamp_to_border"
mipmap_input6 = "false"
alias6 = ""
float_framebuffer6 = "true"
srgb_framebuffer6 = "false"
scale_type_x6 = "source"
scale_x6 = "1.000000"
scale_type_y6 = "source"
scale_y6 = "1.000000"
shader7 = "shaders_glsl/crt/shaders/guest/blur_horiz.glsl"
filter_linear7 = "false"
wrap_mode7 = "clamp_to_border"
mipmap_input7 = "false"
alias7 = ""
float_framebuffer7 = "true"
srgb_framebuffer7 = "false"
scale_type_x7 = "source"
scale_x7 = "1.000000"
scale_type_y7 = "source"
scale_y7 = "1.000000"
shader8 = "shaders_glsl/crt/shaders/guest/blur_vert.glsl"
filter_linear8 = "false"
wrap_mode8 = "clamp_to_border"
mipmap_input8 = "false"
alias8 = ""
float_framebuffer8 = "true"
srgb_framebuffer8 = "false"
scale_type_x8 = "source"
scale_x8 = "1.000000"
scale_type_y8 = "source"
scale_y8 = "1.000000"
shader9 = "shaders_glsl/crt/shaders/guest/linearize_scanlines.glsl"
filter_linear9 = "true"
wrap_mode9 = "clamp_to_border"
mipmap_input9 = "false"
alias9 = ""
float_framebuffer9 = "true"
srgb_framebuffer9 = "false"
scale_type_x9 = "source"
scale_x9 = "1.000000"
scale_type_y9 = "source"
scale_y9 = "1.000000"
shader10 = "shaders_glsl/crt/shaders/guest/crt-guest-dr-venom.glsl"
filter_linear10 = "true"
wrap_mode10 = "clamp_to_border"
mipmap_input10 = "false"
alias10 = ""
float_framebuffer10 = "false"
srgb_framebuffer10 = "false"
scale_type_x10 = "viewport"
scale_x10 = "1.000000"
scale_type_y10 = "viewport"
scale_y10 = "1.000000"
TNTC = "1.000000"
CP = "5.000000"
WP = "-25.000000"
wp_saturation = "1.200000"
SW = "0.000000"
GAMMA_INPUT = "2.500000"
TAPSH = "2.000000"
GLOW_FALLOFF_H = "0.500000"
TAPSV = "2.000000"
GLOW_FALLOFF_V = "0.500000"
gsl = "1.000000"
scanline1 = "8.000000"
scanline2 = "10.000000"
beam_max = "0.950000"
s_sharp = "0.600000"
csize = "0.030000"
bsize = "250.000000"
warpX = "0.030000"
warpY = "0.040000"
shadowMask = "7.000000"
slotmask = "0.700000"
double_slot = "2.000000"
CGWG = "0.700000"
scans = "0.800000"
textures = "SamplerLUT1;SamplerLUT2;SamplerLUT3"
SamplerLUT1 = "shaders_glsl/crt/shaders/guest/lut/sony_trinitron1.png"
SamplerLUT1_linear = "true"
SamplerLUT1_wrap_mode = "clamp_to_border"
SamplerLUT1_mipmap = "false"
SamplerLUT2 = "shaders_glsl/crt/shaders/guest/lut/sony_trinitron2.png"
SamplerLUT2_linear = "true"
SamplerLUT2_wrap_mode = "clamp_to_border"
SamplerLUT2_mipmap = "false"
SamplerLUT3 = "shaders_glsl/crt/shaders/guest/lut/other1.png"
SamplerLUT3_linear = "true"
SamplerLUT3_wrap_mode = "clamp_to_border"
SamplerLUT3_mipmap = "false"
1 Like

I’m using a 1440P monitor with integer scale on. Couldn’t get the preset to look like your pic on my monitor…tried a larger mask size but still looked quite different. :sob:

Download this and load the 1084 preset. Tell me if it’s ok (integer scale so it is 6x vertically no more, no less)

https://mega.nz/file/6qJHVC7R#RwRexo7JgxyzlnGv3jT3WG5FDn6a6-1iKat1vBJrXCs

2 Likes

It looks like this (the one with test.glsl):

There are more details but I think it might look better on lower res/smaller monitors. I like those chunky shields (without detailed slotmask pattern) in your pic. :stuck_out_tongue:

3 Likes

Oh no it looks WAY better and more accurate at 1440p.

1 Like

I’m trying to achieve a slot mask effect on a 4K TV with Royale, but I’m having some problems.

As you can see on the 4K screenshots bellow, Royale is not maintaining an accurate grayscale tint depending on the triad size and sample mode choosen (I’m choosing only integer triad sizes).

The first is a triad size value that maintains good color accuracy, but the second is completely out of whack.

You can see this is true at various zoom levels, including 1:1.

A size I found displays good colors is triad size 5 with mask sample mode set to 1, but this is not the triad size I desired.

I understand some triad sizes might not map correctly to the TV/monitor’s pixels, but how come triad size 3 has good colors, and triad size 6 has bad colors? According to the documentation, triad size represents how many pixels are used for each triad color. Something doesn’t add up.

If, for some reason, this behavior is expected from Royale, if possible, I would like suggestions as how to achieve a similar effect from other CRT shaders. Thank you!

1 Like

That looks absolutely delicious. What are you using to achieve that?

That was DariusG’s preset with his custom shader file. Scroll up a few posts or download it here :slightly_smiling_face:

1 Like

Is there a SLANG version?

Is there a way to simulate this mask with other standard shaders from the libretro repository? It looks incredible.

It uses GLSL “crt-consumer” shader with a custom mask derivative of lottes 2 using B-G-R instead of R-G-B (RGB results in Magenta-Green in lottes 2, B-G-R is what you see is what you get), and slot mask from Guest.r-Dr.Venom. I haven’t uploaded these changes yet to GitHub but I will soon after I finish some more masks.

2 Likes

What is the expected outcome if I use it on a BGR monitor, instead of RGB?

That would create the opposite of RGB mask on RGB monitors, would result in a crap Magenta-Green pattern, red and blue would be too close. But I can include a switch “if then” to alter them if you want on shader options.

2 Likes

It’s tough even at 4K to create a convincing emulation of a CRT’s mask. There’s something not quite right about the phosphor shape in those photos IMO. It’s like the mask/phosphors are made of big chunky pixels or something and doesn’t look analogue, like I can see the pixel structure of the LCD “through” the mask, if that makes sense. IMO it highlights the benefits of using a subpixel mask rather than trying to draw the mask exactly the way it looks directly on screen using the limited number of pixels that’s available. This approach (draw the mask as it actually looks directly on screen) would probably be better suited to 8K+ displays, maybe even 16K. To draw the phosphor taper directly on screen (as opposed to relying on natural display bloom), each triad would need to be probably 15 pixels wide, at a minimum.

It also seems like the scanlines are not a consistent width over the same color? Are you not using integer scale?

2 Likes

Meanwhile i’m testing the ‘hd’ version a bit with the ppsspp core…

  • 2x internal resolution, xbrz

If someone likes the image, here are the parameters for it:

internal_res = "1.700000"
GAMMA_INPUT = "1.799999"
SIZEHB = "5.000000"
SIGMA_HB = "1.400000"
SIZEVB = "5.000000"
SIGMA_VB = "1.400000"
bloom = "0.350000"
bloom_dist = "0.600000"
halation = "0.400000"
brightboost = "1.000000"
brightboost1 = "1.000000"
shadowMask = "9.000000"
maskstr = "0.600000"
mcut = "0.800000"
mask_gamma = "1.999999"
slotmask = "0.500000"
slotmask1 = "0.900000"
slotwidth = "3.000000"
double_slot = "2.000000"
gamma_out = "1.749999"
deconrr = "1.500000"
deconrb = "-1.500000"
deconrry = "1.250000"
deconrby = "-1.250000"
decons = "0.700000"
4 Likes