How can I make vector games look good in retroarch?

I’m wondering if anyone has any tips to make vector games look good in retroarch, I’ve used standalone mame for these and gotten good results, but I would really like to be able to run them through retroarch to leverage the shader pipeline.

When I run it through one of the mame cores in retroarch I get something like this which looks like the core is outputting a 240p source

Any tips or recommended cores would be much appreciated!!!

1 Like

Yeah, it just outputs at 240p by default, which sucks. You can use the alternate render option to get a bigger image, but that screws up the shaders and thereby negates the whole point of what you’re wanting to do. (there is a passable vector shader that works with the alternate render method, though, if you want to check it out)

IIRC, there was a successful bounty to support high-res vector games on at least one of the mame cores, probably 2003.

Since we only do postproc, we can’t do some of the cool/fun stuff that mame’s own shaders can do, since they’ve provided hooks to know, for example, the endpoints of a line, so you can make them brighter, etc.

2 Likes

You can change crt gamma to 1.0 with vector games and keep 2.2 LCD gamma. Also I suggest to use blur-gauss-v and blur-gauss-h shaders coupled with glow,diffusion etc . It doesn’t look like a vector tube at all but it’s better than without shaders :grin:. Here’s some screenshots with 3 different shaders.

4 Likes

I mostly agree with @ProfessorBraun. The best scaling algorithm for vector gfx. might be plain ScaleFX though, since it can handle up to level 6 slopes. But it really depends how much effort is put into the preset. Regardless, i strongly agree with the glow effect.

3 Likes

FBNeo also got some support for hi-res through dipswitches, it only supports a few vector games though (bwidow, gravitar, spacduel, and tempest), basically the dipswitch enable a 1080p mode (default for vector games in FBNeo is 600p).

2 Likes

I’ll improve FBNeo’s Hires support in the next few days, i just noticed we actually support other vector games (actually, most of them ?), and my code for bwidow/gravitar/spacduel was scaling to the wrong res (1440p, which seems to be a problem with RA if it’s also used for viewport on a 1080p screen ?).

5 Likes

Thanks everyone for your helpful suggestions!

@ProfessorBraun Do you mind sharing your presets for these? #1 and #3 have a nice feel to them :slight_smile:

2 Likes

Yes sure, 1st shader is a custom Crt-Royale so my preset won’t work with your files,when I have time I’m gonna make a zip file and upload everything. But I have another preset.

shaders = "10"
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 = "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/crt/shaders/guest/d65-d50.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/blurs/blur-gauss-h.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/blurs/blur-gauss-v.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 = "TNTC;CP;CS;WP;wp_saturation;SW;AR;PR;AG;PG;AB;PB;sat;lsmooth;GAMMA_INPUT;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;mcut;maskDark;maskLight;CGWG;gamma_out;spike;inter;interm;bloom"
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.500000"
TATE = "0.000000"
IOS = "0.000000"
OS = "0.000000"
BLOOM = "0.000000"
brightboost = "4.000000"
brightboost1 = "1.000000"
gsl = "0.000000"
scanline1 = "1.000000"
scanline2 = "5.000000"
beam_min = "2.000000"
beam_max = "2.000000"
beam_size = "0.000000"
h_sharp = "20.000000"
s_sharp = "0.000000"
csize = "0.000000"
bsize = "600.000000"
warpX = "0.000000"
warpY = "0.000000"
glow = "0.500000"
shadowMask = "-1.000000"
masksize = "1.000000"
vertmask = "0.000000"
slotmask = "0.000000"
slotwidth = "2.000000"
double_slot = "1.000000"
mcut = "0.000000"
maskDark = "1.000000"
maskLight = "1.000000"
CGWG = "0.000000"
gamma_out = "2.200000"
spike = "0.000000"
inter = "800.000000"
interm = "0.000000"
bloom = "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"

It only works with FBNeo and Hi-res mode dipswitch “on”. It won’t work with Mame (libretro), for that one I need to lower input gamma and do other tricks so I’ll stay with FBNeo for the moment (for vector games). @guest.r Hey nice idea with ScaleFX , I’m curious to see how it looks. Your afterglow shader + ScaleFX could be good for vector games.

4 Likes

On a sidenote, now all FBNeo’s vector games have their Hires 1080p mode, and it seems FBNeo supports every vector games apart those from Cinematronics hardware.

7 Likes

That’s awesome news!

1 Like

Thank you for this. I have created a slangp file with it BUT in RetroArch I get a failed-to-apply error message. I have checked the .slang files referenced paths and they are OK. What else may I need to check in order to have the shader up?

Thank you

2 Likes

Hey :slight_smile: I’m not sure but load guest dr-venom preset first,after that you can change blur horizontal and vertical passes with blur-gauss-h and blur-gauss-v,apply. And finally copy paste my preset.

1 Like