Please show off what crt shaders can do!

Yep, the settings @Syh linked to are the ones I’m reffering to.

You might have a little bit of room to play with scanline dark and scanline bright to expand the dynamic range futher (lowering scanline bright and raising scanline dark), but you’ll get soft clipping with anything more than a couple notches. Honestly, I would just leave these as-is (1.00 for both). Regarding bright boost, I wouldn’t go any lower than 0.50 with dark pixel bright boost and you may want to raise this a notch or two depending on how your display is configured. Bright pixel bright boost is a bit tricky. You can raise this all the way to 3.00 but this results in soft clipping and will most likely result in eye strain, and the high contrast together with the scanlines can play tricks on the eyes resulting in pseudo-aliasing, making the scanlines look like they lack a consistent width and/or spacing. Even 2.00 is probably too much, but again this will depend on how your display is configured and how bright it is to start with. You can also mitigate this somewhat by adding glow (glow strength 0.01 or 0.02, I wouldn’t go higher than this as it can start to look quite harsh). I need to play around with glow and bright pixel bright boost some more because I think the dynamic range can be expanded a bit more with these parameters.

Ideally, all color bars except 0 should be visible without eye strain and clearly distinguishable from each other. Intensity should rise in a linear fashion with roughly equal steps between shades.

On viewing distance:

“As a rule of thumb, the viewing distance should be roughly two to three times the screen size for standard definition (SD) displays.”

We’re emulating an SD display, so you should take the width of the viewable 4:3 area on your display and multiply that by 2-3 to get the correct viewing distance.

Of course, one might counter that arcade monitors were ~27 inches and you were typically 2-3 feet from those when playing, taking the angle of the screen into consideration. One could counter this by saying that arcade games weren’t set up for the proper viewing distance for the content they were displaying and that you’re still better off sitting a bit further back so that the cognitive low-pass filter can do its job.

Personally, I find 240p content to be too harsh at such close distances, and I think this explains why people frequently add such excessive blur with shaders. If you scroll up to the comparisons made with the close up of Link that I posted, you’ll see that the combo of 3.00 for horizontal sharpness and 1.00 for subtractive sharpness is still not quite as sharp as the consumer-grade CRT, demonstrating that they were actually capable of being quite sharp, contrary to popular opinion. The 3.00/1.00 combo comes closer than anything else I’ve seen to a CRT’s sharpness/blur. I’m not saying it’s perfect, but it’s the standard to beat IMO.


Refined things a bit more, upped bright pixel bright boost a bit, glow is at 0. This expands the DR a bit compared to my previous settings. I think this is an improvement, what do you guys think? My eyes seem to be playing fewer tricks on me with these settings as well. The ideal settings for bright pixel bright boost and glow strength will probably vary from person to person given the differences in human visual acuity, viewing distance and how the display is configured.

I really should remove the stock passes, but on the other hand: if ain’t broke, don’t fix it.

shaders = "10"
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 = "true"
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/misc/grade.slang"
filter_linear2 = "true"
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 = "true"
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-lum.slang"
filter_linear4 = "true"
wrap_mode4 = "clamp_to_border"
mipmap_input4 = "true"
alias4 = "AvgLumPass"
float_framebuffer4 = "true"
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/linearize.slang"
filter_linear5 = "true"
wrap_mode5 = "clamp_to_border"
mipmap_input5 = "false"
alias5 = "LinearizePass"
float_framebuffer5 = "true"
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/blur_horiz.slang"
filter_linear6 = "true"
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_slang/crt/shaders/guest/blur_vert.slang"
filter_linear7 = "true"
wrap_mode7 = "clamp_to_border"
mipmap_input7 = "false"
alias7 = "GlowPass"
float_framebuffer7 = "true"
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/linearize_scanlines.slang"
filter_linear8 = "true"
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_slang/crt/shaders/guest/crt-guest-dr-venom.slang"
filter_linear9 = "true"
wrap_mode9 = "clamp_to_border"
mipmap_input9 = "false"
alias9 = ""
float_framebuffer9 = "false"
srgb_framebuffer9 = "false"
scale_type_x9 = "viewport"
scale_x9 = "1.000000"
scale_type_y9 = "viewport"
scale_y9 = "1.000000"
parameters = "g_gamma_in;g_signal_type;g_gamma_type;g_crtgamut;g_space_out;g_hue_degrees;g_I_SHIFT;g_Q_SHIFT;g_I_MUL;g_Q_MUL;g_lum_fix;g_vignette;g_vstr;g_vpower;g_lum;g_cntrst;g_mid;wp_temperature;g_sat;g_satr;g_satg;g_satb;g_vibr;g_lift;blr;blg;blb;wlr;wlg;wlb;rg;rb;gr;gb;br;bg;LUT_Size1;LUT1_toggle;LUT_Size2;LUT2_toggle;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"
g_gamma_in = "2.400000"
g_signal_type = "1.000000"
g_gamma_type = "1.000000"
g_crtgamut = "2.000000"
g_space_out = "0.000000"
g_hue_degrees = "0.000000"
g_I_SHIFT = "0.000000"
g_Q_SHIFT = "0.000000"
g_I_MUL = "1.000000"
g_Q_MUL = "1.000000"
g_lum_fix = "0.000000"
g_vignette = "0.000000"
g_vstr = "40.000000"
g_vpower = "0.200000"
g_lum = "0.000000"
g_cntrst = "0.000000"
g_mid = "0.500000"
wp_temperature = "9305.000000"
g_sat = "0.000000"
g_satr = "0.000000"
g_satg = "0.000000"
g_satb = "0.000000"
g_vibr = "0.000000"
g_lift = "0.000000"
blr = "0.000000"
blg = "0.000000"
blb = "0.000000"
wlr = "1.000000"
wlg = "1.000000"
wlb = "1.000000"
rg = "0.000000"
rb = "0.000000"
gr = "0.000000"
gb = "0.000000"
br = "0.000000"
bg = "-0.005000"
LUT_Size1 = "16.000000"
LUT1_toggle = "0.000000"
LUT_Size2 = "64.000000"
LUT2_toggle = "0.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.400000"
TAPSH = "4.000000"
GLOW_FALLOFF_H = "0.300000"
TAPSV = "4.000000"
GLOW_FALLOFF_V = "0.300000"
TATE = "0.000000"
IOS = "0.000000"
OS = "1.000000"
BLOOM = "0.000000"
brightboost = "0.500000"
brightboost1 = "1.500001"
gsl = "2.000000"
scanline1 = "15.000000"
scanline2 = "5.000000"
beam_min = "1.000000"
beam_max = "1.000000"
beam_size = "0.000000"
h_sharp = "3.000000"
s_sharp = "1.000000"
csize = "0.000000"
bsize = "600.000000"
warpX = "0.000000"
warpY = "0.000000"
glow = "0.020000"
shadowMask = "3.000000"
masksize = "1.000000"
vertmask = "0.000000"
slotmask = "0.000000"
slotwidth = "2.000000"
double_slot = "1.000000"
slotms = "1.000000"
mcut = "0.250000"
maskDark = "0.500000"
maskLight = "1.500000"
CGWG = "0.300000"
gamma_out = "2.400000"
spike = "1.000000"
inter = "400.000000"
interm = "1.000000"
bloom = "0.000000"
scans = "1.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"

I don’t feel like garbage today, so I’ll fix the stock passes for you at around 10 tonight (I think we’re in the same timezone).

Also I don’t think you’re using bloom in that preset you just posted. bloom and glow are at 0.0, unless I’m misreading your text post.


edit: posted the wrong preset, fixed it.


Hey where are you getting these shaders from? I tried to use some I found in a repo but they needed a lot of work. These look great. Link?


He has a thread for them in the off-topic part of the forum, I think that’s the part of the forum it’s in. (Edit: I was right.) He ported them, though guest he got some help from guest.r for.

Guest isn’t completely up-to-date in the thread, as he’s still working on it. (it’s completely usable though.)

Here’s the thread!


Tried playing around with those convergence settings and got the results I wanted but then ended with one side of the screen having a green hue and the other side having a red one lol. Not sure how to keep it the same way you have it set up but still smooth everything out, I’ll try again later

Got my arcade parts ordered, waiting on them to ship now. (Barely made the order before they ran out of PCB’s, lol. Within 1hr of my purchase they were sold out.)

EDIT: Says it’s been shipped, planning on ordering some extra odds and ends for it tonight. (I’m spending wayyyyy too much on this lol. And I’m still wanting to buy some stuff to make a custom wiring harness, which should run me another 20-40 ish. Going to hold off on ordering the harness stuff until I get everything else, hopefully shipping doesn’t take forever.)

Will post some pics when I finish the initial build and some more when I get the other parts I’m ordering tonight.

EDIT 2: Everything had been order besides wiring harness stuff. Smashed the wallet hard, back to being poor, lol.


I think you should start a new thread for this so that any useful information doesn’t get buried under an avalanche of screenshots :smile:

1 Like

Planning on it when everything comes in, probably will start it in the off-topic part of the forums.

Was just excited as this is the most money I’ve ever spent on myself for one item, and the majority of people that I talk with on here are in this thread, lol.

EDIT: My shipping tracking says my main order should be here Saturday. (So should be able to do my initial build this weekend, if it actually gets here Saturday.) There’s two other cosmetic-ish orders, that I haven’t gotten tracking info for yet, but one of them should be shipping today. The other I may not see for months because it’s coming from Japan, :disappointed_relieved:.

1 Like

Guys! My main package came in a day early!!

Probably build it tomorrow. The rest of the parts besides the Japan purchase, are supposed to be here Monday.

Here’s some pictures of parts, lol. (Please ignore the tape on the stick case, lol.) Probably going to order a Plexi panel for the top, don’t like how the aluminum feels.

Monday my replacement battop should be here, I’m not planning on using the clear one.


Sorry about the off-topic pictures. I’m going to make a new thread for this when the rest of my parts get here.

I still have to wire everything up, but here’s how it looks so far. The buttons aren’t as pale as they look in the screenshot.

EDIT: Got everything wired up, I really need to make my own wiring harness. It looks like caca inside, lol. This thing weighs a metric ton, I feel like I could bludgeon someone to death with it and then go back to playing games with it. (It feels like it weighs more than a gallon of milk. Not sure exactly how much it weighs, that’s just how it feels.)

I’ll post a link to my forum thread for this when I make the thread, it’ll include a list for what parts the I used for this.


Very nice. I want all the info when you’re done because this is something I’m definitely interested in doing.

Playing fighting games with a D-pad starts to really suck once you get to be my age, lol.


It’s close to being done, tbh.

I’m waiting on a fancy USB cable from Japan (Which I’m super hyped about). Waiting on a replacement battop, which is supposedly going to be here Monday, but the tracking hasn’t moved from Cali since Friday so I’m slightly skeptical lol. Getting some replacement parts for the buttons Monday, which will definitely be here Monday, at least from looking at the tracking info.

IDK, when I’m going to make the replacement wiring harness though, as I need the wiring, quick disconnects, heat shrink, rubber cap things, wire stripper, wire crimper, heatgun (could use a lighter instead but I’d rather not, lol), and some sleeving for the cables.

That being said, I’m going to make the thread after my battop and button parts come in. I’m not waiting on making the wiring harness before making the thread.

Also this is basically a Korean fightstick. (As the buttons and stick are Korean parts, whereas most fightsticks unless they are custom usually use Japanese parts, primarily Sanwa parts from what I’ve gathered. Hori sticks make there own arcade parts though. There are some pre-built options for Korean sticks, just not nearly as many as Sanwa sticks.)

Edit: Just got an update on my tracking app for my battop, telling me it hasn’t moved (it’s only supposed to let me know when it’s moved somewhere, lol).

Here’s some wiring porn, lol. This is sorta what I’m planning on doing for the wiring harness, except instead of 4 cables for the face buttons I want to use two.


Are Soul Salibur VI or Tekken 7 any good?

They’re both on sale for under $20 on steam and was wondering if it was worth spending the money?

1 Like

Tekken 7 is one of the best in the series. Definitely recommend it. You can also get KOF 13 for cheap as well.


I think Tekken 7 is currently $10. I may go ahead and get it Monday.

1 Like

New battop and shaft came in today.

I lose a couple mm of height with the new shaft, but I can still hit all directions and it’s not lower then the top of my hand so I’m good.

I’m using phreakmods link groove shaft, with a Crown Violet Clear Battop. I’m going to look into some washers or something to make back up part of the height loss. Might end up getting a Sanwa bat when they have the one I want in stock again.

EDIT: This is basically the same width as the stock crown quick release shaft. I have pictures if anyone is interested.

1 Like

some experimenting a sharp one without any mask

and one with a mask to try to replicate a Trinitron TV

1 Like

I think you’re Trinitron mask is too big. @Nesguy am I right?