Vintage Film Shader?

Does such a shader exist? I mean, not just film grain, but film imperfections… something that might look Cuphead-ish?

In the process of looking into this, what I realized would be cool would be video support in overlays. It would probably be easier (CPU-wise) to just play a semi-transparent film effect MP4 over the top of a game to achieve this effect.

1 Like

I made a GLSL shader like that a few years ago:

Seems I never ported it to slang for some reason.

4 Likes

is there a chance to port it for slang please boss ? It looked really interesting for retroarch ! Wow, capabilities seem unlimited.

I’d encourage to improve it even further as well, like those black lines that move in front to left or right very fast. Definetely a beautiful layout.

That is exactly what I was looking for…

I tried it with CarnEvil, it looks pretty great. Like playing a grindhouse movie. I applied an anti-alias to it first, then the LUT then the film effect.

EDIT: Dear Lord the flicker from the Misc subfolder. It is perfect.

1 Like

I just put in a PR (that I will probably just merge myself in a few hours, but it’s good to go through the motions) for a slang version. I improved it a bit while I was at it, adding a technicolor-style color shift and making the hair/scratches more dynamic (and making the deconvergence effect more consistent/correct).

5 Likes

Look forward to trying it!

Can you please share the final preset you just mentioned ? Would be awesome to look at.

This is the first time I used GLSL shaders in Retroarch, so bear with me…

The shader Hunterk did is already in the Retroach GLSL shaders folder.

I think you need to set your graphics driver to OpenGL to even see the GLSL shaders from Retroarch UI.

So load a core/game combo for MAME or something that will do OpenGL.

Go into quick menu > shaders… Instead of using the Technicolor.glslp preset, I went to the bottom of the menu and set shader passes to 4.

For the first shader pass, I used an anti-alias shader (because the game I was using is very jaggy). For the second pass, I used the LUT shader in the Reshade folder. For the third and fourth passes, I used the film-grain shader in the Film folder, and then the flicker shader in the Misc folder. (You can probably mess with the order of the last 2.)

Flicker is a bit extreme, I which I could ramp it down a bit, or maybe have the black frames that get inserted have a random opacity. There doesn’t appear to be a way to adjust it short of re-writing it. I think there is one number at the bottom of the GLSL file that you can change to alter the frequency of the black frames.

Actually, here is the resulting retroarch.glslp file… it should sit in your Shaders folder. You probably don’t want this effect on all games, but I was experimenting…

shaders = "4"
shader0 = "shaders_glsl/eagle/shaders/supereagle.glsl"
wrap_mode0 = "clamp_to_border"
mipmap_input0 = "false"
alias0 = ""
float_framebuffer0 = "false"
srgb_framebuffer0 = "false"
shader1 = "..shaders_glsl/reshade/shaders/LUT/LUT.glsl"
wrap_mode1 = "clamp_to_border"
frame_count_mod1 = "137"
mipmap_input1 = "false"
alias1 = ""
float_framebuffer1 = "false"
srgb_framebuffer1 = "false"
shader2 = "shaders_glsl/misc/flicker.glsl"
wrap_mode2 = "clamp_to_border"
mipmap_input2 = "false"
alias2 = ""
float_framebuffer2 = "false"
srgb_framebuffer2 = "false"
shader3 = "shaders_glsl/film/shaders/film_noise.glsl"
wrap_mode3 = "clamp_to_border"
mipmap_input3 = "false"
alias3 = ""
float_framebuffer3 = "false"
srgb_framebuffer3 = "false"
textures = "SamplerLUT;noise1"
SamplerLUT = "shaders_glsl/reshade/shaders/LUT/cmyk-16.png"
SamplerLUT_linear = "true"
SamplerLUT_wrap_mode = "clamp_to_border"
SamplerLUT_mipmap = "false"
noise1 = "shaders_glsl/film/resources/film_noise1.png"
noise1_linear = "true"
noise1_wrap_mode = "clamp_to_border"
noise1_mipmap = "false"

I went ahead and merged the slang version, so you should be able to grab it from the online updater by now. One of the things I added to it vs the GLSL version is a subtle flicker caused by making the vignette/hotspot intensity vary slightly each frame.

4 Likes

It’s gorgeous. Thank you!

Np, glad you like it :slight_smile:

Thank you as well to upload your preset, just a little detail that in "shader1 = “…shaders(…)” just remove the " … " and it should work all good.

So far this looks pretty cool for some games, really appreciate your preset !!!

Also thank you mastermind @hunterk Just as always doing a fantastic job.

1 Like

That’s witchcraft! Is this allowed?

1 Like

Hunterk… God I hate asking this… How hard would it be (or is it possible) to backport this to GLSL?

The reason I ask is I cannot for the life of me get dual lightguns working on Retroarch with the current MAME core. I can do it in MAME though.

Aside from the hassle of dealing with the NPOT texCoords, I don’t think there’s anything really slang-specific in there, so backporting shouldn’t be too terribly hard, but how will that help with MAME?

I might be mistaken, but I think I can run GLSL shaders in MAME, right?

And the reason I would go with MAME as opposed to Retroarch/MAME core + Slang shader is in the former I can configure two Sinden lightguns at once, but to my knowledge this hasn’t been done in the latter.

This is beyond a First World problem. I love the shader. If I can’t use it in a specific lightgun game in two player mode, I will survive.

It would still have to be ported to MAME’s uniform names, etc., so it wouldn’t be a direct load, unfortunately.

@hunterk this is a fun looking shader, I just tried it on a random NES game. Thank you for this!

1 Like

No problem.

I had a specific use in mind, but really there are so many interesting things you could do with this. Really good job.

1 Like