Please show off what crt shaders can do!

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

@Syh

These screenshots are exactly what I was trying to do over the weekend. lol So much time spent falling in love with aperature, but I couldn’t get a border/curvature onto it.

You mentioned porting the code for the curvature out of guest and into aperature - Is that pretty easy to do? I’m not familiar. I was initially hoping that somewhere in the CRT shader folder there was just a straight-up border/curvature shader I could add as a final pass to something, but I suppose it’s more complicated than that.

Initially I was wanting to add it all to interlacing, but the closest I’ve come there is mixing CRT-Geom with it.

2 Likes

So I Did not know that the reason masks always looked off on my 65 inch Panny Viera Was because of the way plasmas do subpixels. However I do not like just scan lines on my games as suggested. A mask is one of the most important emulations in CRT’s.

I am seriously considering pulling the trigger on a 65 inch LG C9 OLED because I want to dump my CRT. Actually all 3 of them. They take up too much room and I just want everything on one TV. I’m getting older now and I am having less time and patience maintaining emulation projects around my house.

Between the sub frame input lag and Gsync compatibility would this be the optimal TV for new stuff and older stuff?

1 Like

Are you wanting the copy of apeture with curvature or are you wanting the curvature added to interlacing?

2 Likes

I’ve been using custom aspect ratio of 4x/4x for the tests, which is 1920x1088 at 4x internal res for PSP’s 480x272. So, I’m not sure either what is going on.

I’ve looked into that model specifically and it does not have adequate sustained maximum brightness with SDR content for accurate mask/phosphor emulation and/or black frame insertion and it has weird subpixels on top of that.

Masks are cool but I’ve gone pretty far down the rabbit hole of what it would take to do it accurately and the technology isn’t really widely available yet. One of the Samsung QLEDs is probably a better option, but some models have weird subpixels.

2 Likes

Interlacing with the border & curvature would be amazing! Plus with how small interlacing is, I could probably compare the two and learn a bit about the makeup of the file themselves, which I’m very curious to learn more about.

2 Likes

@SkyHighGam3r Which interlacing shader are you using specifically? I’ll look into it after I get some sleep and I’ll send you the apeture mod with curvature as reference if you’d like.

1 Like

Thanks. Even though I rarely comment I follow this thread daily because I enjoy all the pics and such. I know qled’s are definitely brighter however after much research it seems according to many websites OLED as of right now is the true successor to Plasma which seems the closest technology to CRT. I am not as far down the rabbit hole as you, but I still think we are a good 5-10 years away from a panel that could truly replace a CRT and I can’t wait that long lol. I am willing to settle with plausible mask emulation. I am just limiting myself between being locked at 1080p, the heat it generates and electricity it is consuming is as well is concerning. Also the weight is heavy. Qled is much cheaper though and comes with free sync but it seems to be rebranded technology.

1 Like

Definitely! I’d love that. The one I’m using is just called “interlacing.slang”, it’s in the “Misc” folder. Such an awesome little shader.

I’m with you on the mask emulation stuff. Essential for truthful CRT emulation.

Given what I read on it in this topic, I think it would be useful if the debate on mask emulation with current technology LCD would be split up into these three questions:

  1. Can mask emulation look authentic with your nose up to the screen?
  2. Can mask emulation look authentic from normal viewing distance?
  3. Are 1 and 2 possible at the same time with current gen LCD technology?

Answers based on discussions up until now:

  1. Yes, but will result into a too dim and dull looking screen from normal viewing distance
  2. Yes, but the mask will not be authentic with your nose up to the screen
  3. NO

So, 3 is not possible with current LCD tech because of 1. Basically for this situation we need to wait a few years. Let’s be patient! Keeping the discussion’s focus on 1 and 3 is just not fruitful with current technology…

However, 2 is a possible reality with current tech. This imo is the answer to “willing to settle with plausible mask emulation” if you ask me.

As such, I think it would be much more interesting if the discussion going forward would focus on 2:

which current monitor and shader (settings) offers the best possible CRT mask emulation when viewed from normal viewing distance?

This would also make comparisons with real CRT’s more easy, just watch them both from normal viewing distance and focus the discussion on which shader and which monitor (specs) would create the most authentic experience, again, when viewed from normal viewing distance.

I would suggest normal viewing distance being 2 or 3 times the diameter of the (emulated) screen size.

This would at least keep us focused on something that is achievable with current tech, and keep us fairly happy until a few years down the line when 1 and 2 can be achieved simultaneously.

3 Likes