Please show off what crt shaders can do!

Looks good. You can increase mask strength further to make the mask more accurate. Using grey in lieu of black helps keep highlights bright, but the trade-off is that it looks kinda weird in some situations.

Another thing to try would be something like this. I make no guarantees though :stuck_out_tongue:

image

2 Likes

Make sure you’re using at least ChdMan v5. I made the mistake of doing my entire Dreamcast library in v4 and now I have shoddy rips that I can’t convert back to gdi or use in ReDream

4 Likes

@guest.r

Just noticed that I’m getting some weird randomly doubled lines with guest-dr-venom-ntsc-stock.

Also, is there a way to blend dithering even further, like how GTU or TVout tweaks does it? Or is there a limitation based on the type of filtering being used?

edit: more weird stuff

3 Likes

the stock preset sets the first pass to 240 px height, so if you’re feeding it a 224 px image, it’ll get stretched up, which will double a few lines. For low-res content, you should use the regular preset.

That ‘stock’ preset should probably be renamed to “240p-downsample” or something more informative.

5 Likes

Thanks, just checked. I’m running v5, don’t use redream but it’s nice to know nonetheless.

1 Like

Purple does look better than 100% or 50% black to me. Not sure what is going on with the bottom 4 pixel though, they just look similar to black, maybe its the overlay shader?

1 Like

Yeah that overlay shader looks really strange to me, like you’re just slapping a transparent mask on top of the image… not the biggest fan of how it works. So far, the best example you posted was the one using the code supplied by hunterk here.

I think you’ll get better results using that and substituting the new pattern for the old one.

Edit: as far as the rows of black pixels at the top/bottom, that’s to be expected because the mask tiles to 1080 pixels tall. Doesn’t matter though because those pixels just get cropped off anyway (on a 1080p display).

1 Like

@Nesguy

Wouldn’t that require more code to be written, as isn’t that mask @hunterk made different from the new mask pattern you’re suggestion?

1 Like

Yes, you’d need to take the code supplied by hunterk and substitute the new mask colors for the old ones, although I’m not quite sure how to do that since all the colors used in the code seem to be 100% values (how do you do red @ 85/255, for example?)

1 Like

You would just have to make some new color lines at the top. As it is, it has e.g. vec3 red = vec3(on, off, off); where on == 1.0 and off == 0.0. You could always add, e.g. vec3 purple = vec3(0.2, 0.0, 0.2); or vec3 brown = vec3(0.35, 0.15, 0.0); (since brown is really just dark orange).

So, just make those color definitions and then plug them into the array.

4 Likes

I should have been clear. I meant the bottom four pixels of your mask appearing black and not the respective colors they were meant to be.

Another test with this code. Thanks again to @hunterk.

else if(phosphor_layout == 21){
  vec3 lcd4x[4][4] = {
     {red,    green,  blue,   purple},
     {red,    green,  blue,   purple},
     {red,    green,  blue,   purple},
     {purple, purple, purple, purple}};

  w = int(floor(mod(coord.y, 4.0)));
  z = int(floor(mod(coord.x, 4.0)));
  
  weights = lcd4x[w][z];
  return weights;}

2 Likes

You may try upping the values in the purple section to make the purple less dark, idk if it’ll work but it’s worth a try, lol.

1 Like

Is there any way to add curvature, corner blur and corner size to CRT-Aperture? I tried porting the code over from Guest-Dr-Venom and can’t get it to work.

2 Likes

I’ll look on my computer, I added those to apeture over a year ago (not sure if I still have the file.)

4 Likes

I would really appreciate it. (My internet keeps dying every time I click reply, lol!)

1 Like

FBNeo screens from a modified CRT-Aperture shader kindly provided by @Syh.

Alien Vs Predator :

Garou Mark of the Wolves :

The King of Fighters 2003 :

The Last Blade 2 :

Metal Slug 2 (As requested by @Syh) :

Street Fighter III 3rd Strike :

7 Likes

@DevilSingh Really liking the Last Blade 2, Metal Slug 2, and Street Fighter III 3rd Strike screens.

You got the moire tamed pretty well from what I’m seeing in the screens. Which curvature are using 0 or 1? And did you end up swapping the mask back out, lol?

1 Like

Thanks. I’m using curvature 0 as curvature 1 was flattening the center of the image too much for my liking. And I haven’t switched the mask, I will test that out later today.

1 Like

I strongly dislike how masks reduce the ability of the screen to deliver brightness, contrast and saturation, so here are the settings I actually play with.

I regard all the mask stuff as experimental and something that’s waiting for better technology. In my experiments, reducing the mask strength below 100% breaks the effect on three different displays. However, 100% mask strength is too high for the vast majority of displays currently on the market and makes it impossible to get an adequately bright image.

It’s important to realize that these shaders look very different in a screencap compared to how they look in an actual fullscreen use-case scenario due to how the mask maps to the pixels and how it interacts with the subpixel structure of the display.

Another problem is that many displays will react in unpredictable ways that are detrimental to picture quality once you start doing weird stuff to the subpixels with masks. Even if resolution and subpixel structure are a match for the mask being used, you can still get unwanted effects because you’re making the LCD do something it wasn’t designed for.

In case you couldn’t tell, I’m a fan of how higher TVL displays look with 240p content and a big fan of scanlines :stuck_out_tongue: You can easily emulate a lower TVL by changing the scanline parameters, though.

shaders = "11"
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 = ""
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/d65-d50.slang"
filter_linear2 = "false"
wrap_mode2 = "clamp_to_border"
mipmap_input2 = "false"
alias2 = "WhitePointPass"
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/afterglow.slang"
filter_linear3 = "false"
wrap_mode3 = "clamp_to_border"
mipmap_input3 = "false"
alias3 = "AfterglowPass"
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/avg-lum0.slang"
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_slang/crt/shaders/guest/avg-lum.slang"
filter_linear5 = "false"
wrap_mode5 = "clamp_to_border"
mipmap_input5 = "true"
alias5 = "AvgLumPass"
float_framebuffer5 = "false"
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/linearize.slang"
filter_linear6 = "false"
wrap_mode6 = "clamp_to_border"
mipmap_input6 = "false"
alias6 = "LinearizePass"
float_framebuffer6 = "true"
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/blur_horiz.slang"
filter_linear7 = "false"
wrap_mode7 = "clamp_to_border"
mipmap_input7 = "false"
alias7 = ""
float_framebuffer7 = "false"
srgb_framebuffer7 = "false"
scale_type_x7 = "source"
scale_x7 = "1.000000"
scale_type_y7 = "source"
scale_y7 = "1.000000"
shader8 = "shaders_slang/crt/shaders/guest/blur_vert.slang"
filter_linear8 = "false"
wrap_mode8 = "clamp_to_border"
mipmap_input8 = "false"
alias8 = "GlowPass"
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/linearize_scanlines.slang"
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_slang/crt/shaders/guest/crt-guest-dr-venom.slang"
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"
parameters = "WP;wp_saturation;SW;AR;PR;AG;PG;AB;PB;sat;lsmooth;GAMMA_INPUT;TAPSH;GLOW_FALLOFF_H;TAPSV;GLOW_FALLOFF_V;TATE;IOS;OS;BLOOM;brightboost;brightboost1;gsl;scanline1;scanline2;beam_min;beam_max;beam_size;h_sharp;s_sharp;csize;bsize;warpX;warpY;glow;shadowMask;masksize;vertmask;slotmask;slotwidth;double_slot;slotms;mcut;maskDark;maskLight;CGWG;gamma_out;spike;inter;interm;bloom;scans"
WP = "0.000000"
wp_saturation = "1.000000"
SW = "1.000000"
AR = "0.070000"
PR = "0.050000"
AG = "0.070000"
PG = "0.050000"
AB = "0.070000"
PB = "0.050000"
sat = "0.100000"
lsmooth = "0.900000"
GAMMA_INPUT = "2.500000"
TAPSH = "4.000000"
GLOW_FALLOFF_H = "0.000000"
TAPSV = "4.000000"
GLOW_FALLOFF_V = "0.000000"
TATE = "0.000000"
IOS = "0.000000"
OS = "1.000000"
BLOOM = "0.000000"
brightboost = "1.000000"
brightboost1 = "1.000000"
gsl = "2.000000"
scanline1 = "15.000000"
scanline2 = "23.000000"
beam_min = "1.300000"
beam_max = "1.000000"
beam_size = "0.000000"
h_sharp = "4.000000"
s_sharp = "0.000000"
csize = "0.000000"
bsize = "600.000000"
warpX = "0.000000"
warpY = "0.000000"
glow = "0.000000"
shadowMask = "-1.000000"
masksize = "1.000000"
vertmask = "0.000000"
slotmask = "0.000000"
slotwidth = "2.000000"
double_slot = "1.000000"
slotms = "1.000000"
mcut = "0.000000"
maskDark = "0.500000"
maskLight = "1.500000"
CGWG = "0.500000"
gamma_out = "2.200000"
spike = "0.500000"
inter = "400.000000"
interm = "1.000000"
bloom = "0.000000"
scans = "0.000000"
textures = "SamplerLUT1;SamplerLUT2;SamplerLUT3"
SamplerLUT1 = "shaders_slang/crt/shaders/guest/lut/sony_trinitron1.png"
SamplerLUT1_linear = "true"
SamplerLUT1_wrap_mode = "clamp_to_border"
SamplerLUT1_mipmap = "false"
SamplerLUT2 = "shaders_slang/crt/shaders/guest/lut/sony_trinitron2.png"
SamplerLUT2_linear = "true"
SamplerLUT2_wrap_mode = "clamp_to_border"
SamplerLUT2_mipmap = "false"
SamplerLUT3 = "shaders_slang/crt/shaders/guest/lut/other1.png"
SamplerLUT3_linear = "true"
SamplerLUT3_wrap_mode = "clamp_to_border"
SamplerLUT3_mipmap = "false"
4 Likes

Most recent LCD example looks pretty good to me - the black lines you’re referring to are intentional and meant to look like the horizontal lines on an LCD grid but with a bit of pixel bleed. You can make the grid lines darker/ligher by adjusting those color values in the code. Now, good luck getting the brightness and colors adjusted! :stuck_out_tongue:

Still a bit of a mystery to me why it’s not mapping perfectly- horizontal looks good but there’s some stuff going vertically that shouldn’t be there. This might be fixed by setting a custom aspect ratio and enabling integer scale instead of using core provided AR, not sure though.

2 Likes