Please show off what crt shaders can do!

Some more PCSX2 pics (These will be the last ones, I promise!)

Although it doesn’t look as good as I would like in 2D sprite based games. I think it looks better than static scanlines on interlaced games which cause line doubling on horizontal axis.

My settings (540p horizontal res) :

240p horizontal res :

(Oh, how I wish I could get this much curvature in my settings without moire ruining it!)

(Bonus) Tactics Ogre on PPSSPP :

P.S. Hope I don’t get banned for this!

2 Likes

You may try decreasing the scanline and mask strength some, it will decrease the moire some. From my experience the scanline strength had more to do with the moire then the mask does.

As I discussed earlier in this thread with @Nesguy I’m not a fan of light scanlines. With how thin the scanlines are in my preset they are hard to see if I increase scalines weight anything past (0.2).

Have you checked out the interlacing options in guest-dr-venom? There are three different interlacing modes and you can set the trigger resolution to whatever you want (default is 400 lines). You might have better luck with those.

240p stuff and older content generally benefits from a bit of blur, IMO. A one size-fits-all shader is tough to pull off. You might consider making a couple different presets for different types/eras of content. It’s really easy to flip between shaders in-game by using “m” and “n” on the keyboard. I understand the appeal of having one all-purpose shader, though, especially if you plan on running RA in kiosk mode.

2 Likes

I think it actually only has 2 interlacing modes, as mode 0 is (standard) scanlines, mode 1 is standard interlacing with the jitter/flicker, mode 2 is is no flicker interlacing, and mode 3 is a no-scanline (no interlacing) mode.

3 Likes

The SFIII 3rd Strike pics in my post are from PS2 version of the game running on PCSX2, not the arcade version running in RetroArch. The first pic is with the ReShade settings I use with PCSX2 and Dolphin, the second pic is just there to show the line doubling caused by static scanlines on interlaced games.

(I apologize for any confusion those pics may have caused.)

As for when I play 224p/240p games in RetroArch I use CRT-Royale-Kurozumi. And for PS1/Dreamcast games I have already been using Guest-Dr-Venom with interlacing mode set at 2 (smoothing) for the past few days and I like it a lot. I wish CRT-Geom had interlace smoothing or TATE from Guest-Dr-Venom, so I could port them to my ReShade CRT shader.

3 Likes

I been using the slang preset @guest.r himself posted here. And imho it’s the best I have seen for 3D games.

2 Likes

Same preset, different game :slight_smile:

I will never play old games in high res and without a crt shader anymore!

3 Likes

Just playing around with some different blur settings in guest-dr-venom. Sometimes text and other details really look better with a certain amount of blur and it seems almost certain that the artist intended for these effects to be blurred.

Apologies if these shots appear too dark on your display- the mask strength is at 90% and I’m maxing out my display backlight while using a fairly bright display. Also, I’m not showing my full chain with color management or NTSC stuff, just the guest-dr-venom preset with custom settings.

Edit: after playing around some more it seems that subtractive sharpness can result in some unwanted artifacts in some situations. Mdapt and gdapt aren’t perfect, either. So, now I just have two presets, one with h_sharp at 1.50 and another with h_sharp at 4.00, and just go with one or the other depending on the game and pixel art. However, now I’m starting to question just how much composite video artifacts were even a thing back in the SNES/Genesis era, but I’ll save that for another post.

Horizontal sharpness at 1.50, subtractive sharpness 1.00:

Horizontal sharpness at 1.50, subtractive sharpness 0.50:

Horizontal sharpness at 1.50, subtractive sharpness at 0.00. The waterfall is blended properly. The resulting image is blurry as hell, though. It’s a trade-off.

Horizontal sharpness at 5.00, pretty much indistinguishable from nearest neighbor. The text doesn’t look great.

Horizontal sharpness at 4.00:

Horizontal sharpness at 1.50. The text looks a lot better but the image is very blurry and black lines in particular lack sharpness.

Horizontal sharpness at 1.50 and subtractive sharpness at 1.00. Text looks better and black lines are still sharp. Dithering isn’t blended (not seen in the example), so I’m considering adding mdapt or gdapt to the chain.

4 Likes

Going through the thread again I just noticed that in my post #1419 I brain farted and typed HORIZONTAL (in all instances) when I meant VERTICAL like an idiot!

Well, English is not my native language! So there’s that.

You can go back an edit your post, lol.

Just thought I’d let you know.

1 Like

I see, so this is your vision with the guest shader. It looks like you’re going for the pvm look. Mind posting up your preset? Wanna try it out on my tv just to see how it looks.

That’s what I wanted to do at first. But looks like you can’t edit a post after some time (maybe like a day?) has passed.

1 Like

I think it may have to do with your account, I’m not sure. I think some things are tied to how much you posted and likes given and received.

1 Like

As much as I like anti aliasing in new games, as much do I disslike it in old games. It seems … hehe

3 Likes

Oh, that wasn’t really intended to be suggested settings or anything. The max subtractive sharpness + minimum horizontal sharpness combo only works in certain situations and results in some undesirable artifacts in other situations. Really there’s just no algorithm you can use that will replicate CRT phosphor behavior perfectly (at least that I’ve found).

Personally, I’m currently using guest-dr-venom with the following settings.

shaders = "11"
shader0 = "shaders_slang/crt/shaders/guest/lut/lut.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/crt/shaders/guest/color-profiles.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 = "TNTC;CP;CS;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"
TNTC = "0.000000"
CP = "0.000000"
CS = "0.000000"
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.400000"
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 = "6.000000"
scanline2 = "12.000000"
beam_min = "1.000000"
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 = "0.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.800000"
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"

Some settings to tweak:

h_sharp
scanline1
scanline2
gamma_input
CGWG 

At 1080p, h_sharp should probably be no lower than 2.75 at the lowest, with 3.00 - 4.00 being a more reasonable value. 5.00 and up is like a 1000 line BVM or computer monitor. If you want to blend dithering, lowering it all the way to 1.50 will achieve that.

For maximum beam width variance, scanline1 should be at the lowest level where scanlines are still visible on 100% white, and scanline2 should be at max. This is a bit extreme, though. Keeping beam min around 50% of the beam max value results in a decent amount of variance. You can play with these to brighten or darken the image as desired. There are additional parameters for adjusting the scanlines if you really want to go wild :wink:

gamma_output: depends on the display being used but a higher or lower value may be appropriate.

CGWG: alters the strength of the phosphor emulation. Ideally this should be as close to 1.00 as possible while still maintaining a bright image, but most displays will struggle to maintain adequate brightness at this setting. If the display backlight is already maxed out, then reducing the mask and/or scanline strength is really the only option that doesn’t result in clipping.

Also, give the alternate CGWG mask a try if you’re up for it. This replaces the aperture grille pattern with a triad dot mask pattern. I like using it for old PC games since it’s the type of mask used in computer monitors.

// Phosphor.
else if (shadowMask == 0.0)
{
	pos.x = pos.x + pos.y;
	pos.x = fract(pos.x*0.5);
	float mc = 1.0 - CGWG;
	if (pos.x < 0.5) { mask.r = 1.1; mask.g = mc; mask.b = 1.1; }
	else { mask.r = mc; mask.g = 1.1; mask.b = mc; }
}

EDIT: just realized you’re using a 4K TV! In that case, you’ll want to use one of the masks for 4K since both of the magenta/green CGWG masks will be too fine at that resolution.

Nice screens, could you tell what’s the first game?

1 Like

Thanx. It is Star Ocean for Ps1. Great music!

1 Like

You seem to be interested in trying older games you havent tried? Just so you know, if there is one game you HAVE to play if you havent, it is Suikoden 2. It is up there, with FFVII and Ocarina of Time!

2 Likes

I have suikoden 2 haven’t played much of it, plan on it.

1 Like