A Scalefx preset to handle transparency

Hi all, I was experimenting with a few settings and trying to combine some Shaders. While I actually prefer CRT effects and pixelated look, there is something with these smoother looking graphics for old games that keeps me using them. My goal is to find the best single Shader configuration for the use of my so called alternative “HD” like setups of the cores. From my playing around so far, the ScaleFx family of Shaders does a pretty good job. They are quite popular at the moment too. But they lack in handling transparency in example and I wanted see what I can do. I am by no means an expert, but wanted to share my findings.

Note: I wanted name this scalefx-plus, but that name would not convey what it is doing.

  • Nearest: The reference untouched image without any scaling or filter applied.
  • scalefx/scalefx: Base model of the Shader. What I like about this basic one is, it smoothes out lines, but does not make the entire image like a painting. It preserves some sort of “grittyness”, if that makes sense with this sort of Shader. It kinda looks natural.
  • presets/xsoft+scalefx-level2aa+sharpsmoother (referred as scalefx-sharpsmoother): This one has some additional anti aliasing and smoothing integrated. What I like about this one is, that hte image is truly smoother than the other tested variants. Its greatest asset is also its greatest weakness, as it is too smooth at times and smudges the image. It works well with 3D graphics. Looks often good on screenshots, but playing too smooth games doesn’t look good.
  • scalefx+sgenpt+blur (referred as scalefx-sgenpt): My atttempt and adding a blur and dithering filter. Goal was to keep the gritty look of original scalefx, but smooth out faces and also handle transparency effects on Mega Drive/Genesis better. But looks horrible on some 3D games.

Games are played at their original resolution without upscaling at 1440p. Integer Scaling is enabled. The full screenshots are made with my scalefx-sgenpt preset.

Final Fantasy 7

Playstation, Beetle PSX HW

  • scalefx-sgenpt sticks out here as the worst. It really doesn’t like this image and smudges totally and makes it ugly.
  • scalefx-sharpsmoother actually resolves the images quite well, just a bit too soft.
  • scalefx handles this relatively good, preserving structure of backgrounds. But lacks good handling on large single color surfaces on the characters.

Metroid Prime Pinball

Nintendo DS, melonDS: Top/Down split view

  • scalefx-sgenpt looks similar to original scalefx, but is a bit too smooth on the background structure. Look above the right bumper, how it looses the details. scalefx itself preserves these details quiet good.
  • scalefx-sharpsmoother as always has this too soft look for my taste. But surprisingly the background structure is better resolved than scalefx-sgenpt.

Shinobi 3

Mega Drive, Genesis Plus GX

  • scalefx-sgenpt preserves the waterfall lines as they are. One can like it or not. Interestingly the left bottom area of the background water gets smudged totally.
  • scalefx-sharpsmoother everything is rounded, especially the character is nice. The waterfall is probably the best looking here, as it gets smoothed out to a degree where it makes sense. It blends a bit better with the background.

Streets of Rage 2

Mega Drive, Genesis Plus GX

  • scalefx-sgenpt a huge win for the transparency handling here and one of the major reasons why I created this preset. While not perfect and not as good as CRT and composite effects, this dithering effect is resolved pretty good here. Smooths out for the most part and blends well with the background, without getting eye cancer. Just a little detail lost on the face of the characters mouth.
  • scalefx-sharpsmoother terrible transparency handling, it just does not work here. But I kinda like how smooth the characters look here and the background stripes on the ground. It fits to the look of the game. Even the faces are preserved well.
  • scalefx like sharpsmoother it handles details of character models well, while not being too smooth overall. Works well too, but also has the problem of the bad transparency handling.

Super Mario World

Super Nintendo, Mesen-S

  • scalefx-sgenpt Gets the lines straight, while preserving the kinda grittiness and not over smoothing on the font. However the, what are the yellow points structure on the right bottom called? These get too smoothed out here and are dissolved.
  • scalefx is very similar to sgenpt, but the structure with the points is preserved very well, while being rounded and keeping their sharpness. I like this one the most here.
  • scalefx-sharpsmoother handles the lines well and makes them even more straight. It gets to a point of looking like a painting, which is fine, but playing in motion does not work well for me. Still very cool results here.

Super Street Fighter 2

Super Nintendo, Mesen-S

  • scalefx-sgenpt focus was on Ryus face, to keep the pixelated look, while making his cheekds smooth. Also works pretty well with the character select screen on the right side too.
  • scalefx has this effect I don’t like much, where the face gets this color banding look. This was also one of the major reasons why I tried to create a preset to get this solved.
  • scalefx-sharpsmoother is too smooth and losing details, while also having this kinda color banding like look on the face. Not a fan of.


Just put this into the shaders_slang directory, where bilinear.slangp and nearest.slangp are also found.

shaders = "7"
shader0 = "dithering/shaders/sgenpt-mix.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 = "blurs/shaders/smart-blur.slang"
filter_linear1 = "true"
wrap_mode1 = "clamp_to_border"
mipmap_input1 = "false"
alias1 = "refpass"
float_framebuffer1 = "false"
srgb_framebuffer1 = "false"
scale_type_x1 = "source"
scale_x1 = "1.000000"
scale_type_y1 = "source"
scale_y1 = "1.000000"
shader2 = "scalefx/shaders/scalefx-pass0.slang"
filter_linear2 = "false"
wrap_mode2 = "clamp_to_border"
mipmap_input2 = "false"
alias2 = "scalefx_pass0"
float_framebuffer2 = "true"
srgb_framebuffer2 = "false"
scale_type_x2 = "source"
scale_x2 = "1.000000"
scale_type_y2 = "source"
scale_y2 = "1.000000"
shader3 = "scalefx/shaders/scalefx-pass1.slang"
filter_linear3 = "false"
wrap_mode3 = "clamp_to_border"
mipmap_input3 = "false"
alias3 = ""
float_framebuffer3 = "true"
srgb_framebuffer3 = "false"
scale_type_x3 = "source"
scale_x3 = "1.000000"
scale_type_y3 = "source"
scale_y3 = "1.000000"
shader4 = "scalefx/shaders/scalefx-pass2.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 = "scalefx/shaders/scalefx-pass3.slang"
filter_linear5 = "false"
wrap_mode5 = "clamp_to_border"
mipmap_input5 = "false"
alias5 = ""
float_framebuffer5 = "false"
srgb_framebuffer5 = "false"
scale_type_x5 = "source"
scale_x5 = "1.000000"
scale_type_y5 = "source"
scale_y5 = "1.000000"
shader6 = "scalefx/shaders/scalefx-pass4.slang"
filter_linear6 = "false"
wrap_mode6 = "clamp_to_border"
mipmap_input6 = "false"
alias6 = ""
float_framebuffer6 = "false"
srgb_framebuffer6 = "false"
scale_type_x6 = "source"
scale_x6 = "5.000000"
scale_type_y6 = "source"
scale_y6 = "5.000000"
SGPT_BLEND_OPTION = "2.000000"
SGPT_BLEND_LEVEL = "0.700000"
SGPT_LINEAR_GAMMA = "0.000000"
SB_BLUR_LEVEL = "0.720000"
SFX_CLR = "0.330000"
SFX_SAA = "0.000000"
SFX_SCN = "0.000000"

Interesting post. From my research it looks like scalefx is the king out of all the upscaling shaders, it tries to keep pixels close to their original look while still upscaling the image, that’s why I chose to use it to upscale my presets. I see you added the smart blur pass as well, it looks like that helps to further smooth things out.

1 Like

It’s always a tradeoff, it makes some images look good, but makes the others look bad. There is always something that breaks after adjustments. scalefx is pretty good for what it does, I have tested bunch of these similar styled Shaders. But it has some weakness too. Sometimes xbr based one looks better too. Maybe I create a second one specifically for 3D games.

1 Like

I wonder if it would give a different (better?) result without the smart blur added in. I know about the sgenpt-mix/scalefx combo since that’s exactly what I use for my s-video presets.

The thing is the scalefx presets you are doing serve a different purpose and are mixed in with other Shaders. But I am using it pure like this. And the smart blur is deliberately added in to fight specific aspects. I have also added them before scalefx, which gives different results. I need to look more closely what you have done and play with them more too.

1 Like

I see. That is true that it works a bit differently when you use that mix without a crt shader added in, ok I get it now. You’re going for a pure upscaling look like in the pics you posted.

1 Like

Hi, this post has just came out as recommended, so I couldn’t evade responding this. What I can say that there are a lot good shaders out there also in the Mega Bezel community. You can try one of the shaders out there and test Which one suits you. I think there a shaders better than scalefx on it’s own that replicates closer CRT experience nowadays IMO. You can check starting in my thread if you want and see if you like what you really see. Also to mention is that these shaders have scalefx implemented. All together looks stunning…

Hi RetroGames4K. I am not a stranger to CRT Shaders and use them since a while and compared a lot. I have found my favorites already representing wide coverage of CRT and LCD displays. But this post here is specifically about Scalefx and smoothing and not meant to be a replacement for CRT effects.

Since this post I have worked on finding the correct combination of Shaders and settings to achieve what I want, but it never works. It’s always a tradeoff, where one setting is helping me with a problem, but introduce a different problem.

1 Like

Ok. No problem, I thought you were looking for something specific, and not everyone likes CRT shaders, I always like everybodys opinions and likes, but I’m always trying to help. But IMO pixelated 2D games doesn’t look that good for me without a CRT TV or at least something close to it. Those games were made for CRT. Also not only games CRT in some scenarios the image looks better than LCD.:sweat_smile: Also scalefx on it’s own tend to look like the game made by a painter instead of a programmer. But it’s IMO.

1 Like

I fully agree with you and my default Shader for systems meant to be played on a TV use CRT Shaders. That’s my primary way of playing those games with RetroArch, specifically range of different CRT Royale presets. Appreciate the help and think you guys doing great job with all those Shaders, presets and bezels. Thank you for the suggestion though.

I just like to have secondary configuration to load in as an alternative to the CRT filters. In example there are the regular setups of my systems with the focus on recreating original look and feel and the secondary “HD” setup just for fun. And the preset in this post is about the secondary one.

1 Like

Nice, I’ll will keep looking what you up to, as I’m always open and I like to learn new things…:grinning:

1 Like

Looks nice, i made a similar shader preset when the append function had been introducted, i think it also looks pretty good :grin:

shaders = "23"
feedback_pass = "0"
shader0 = "shaders_slang/stock.slang"
wrap_mode0 = "clamp_to_border"
mipmap_input0 = "false"
alias0 = "mdapt_refpass"
float_framebuffer0 = "false"
srgb_framebuffer0 = "false"
shader1 = "shaders_slang/dithering/shaders/mdapt/passes/mdapt-pass0.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/dithering/shaders/mdapt/passes/mdapt-pass1.slang"
filter_linear2 = "false"
wrap_mode2 = "clamp_to_border"
mipmap_input2 = "false"
alias2 = ""
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/dithering/shaders/mdapt/passes/mdapt-pass2.slang"
filter_linear3 = "false"
wrap_mode3 = "clamp_to_border"
mipmap_input3 = "false"
alias3 = ""
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/dithering/shaders/mdapt/passes/mdapt-pass3.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/dithering/shaders/mdapt/passes/mdapt-pass4.slang"
filter_linear5 = "false"
wrap_mode5 = "clamp_to_border"
mipmap_input5 = "false"
alias5 = ""
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/misc/shaders/image-adjustment.slang"
wrap_mode6 = "clamp_to_border"
mipmap_input6 = "false"
alias6 = ""
float_framebuffer6 = "false"
srgb_framebuffer6 = "false"
shader7 = "shaders_slang/stock.slang"
filter_linear7 = "false"
wrap_mode7 = "clamp_to_border"
mipmap_input7 = "false"
alias7 = "refpass"
float_framebuffer7 = "false"
srgb_framebuffer7 = "false"
shader8 = "shaders_slang/scalefx/shaders/scalefx-pass0.slang"
filter_linear8 = "false"
wrap_mode8 = "clamp_to_border"
mipmap_input8 = "false"
alias8 = "scalefx_pass0"
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/scalefx/shaders/scalefx-pass1.slang"
filter_linear9 = "false"
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/scalefx/shaders/scalefx-pass2.slang"
filter_linear10 = "false"
wrap_mode10 = "clamp_to_border"
mipmap_input10 = "false"
alias10 = ""
float_framebuffer10 = "false"
srgb_framebuffer10 = "false"
scale_type_x10 = "source"
scale_x10 = "1.000000"
scale_type_y10 = "source"
scale_y10 = "1.000000"
shader11 = "shaders_slang/scalefx/shaders/scalefx-pass3.slang"
filter_linear11 = "false"
wrap_mode11 = "clamp_to_border"
mipmap_input11 = "false"
alias11 = ""
float_framebuffer11 = "false"
srgb_framebuffer11 = "false"
scale_type_x11 = "source"
scale_x11 = "1.000000"
scale_type_y11 = "source"
scale_y11 = "1.000000"
shader12 = "shaders_slang/scalefx/shaders/scalefx-pass4.slang"
filter_linear12 = "false"
wrap_mode12 = "clamp_to_border"
mipmap_input12 = "false"
alias12 = ""
float_framebuffer12 = "false"
srgb_framebuffer12 = "false"
scale_type_x12 = "source"
scale_x12 = "3.000000"
scale_type_y12 = "source"
scale_y12 = "3.000000"
shader13 = "shaders_slang/anti-aliasing/shaders/reverse-aa-post3x/reverse-aa-post3x-pass0.slang"
filter_linear13 = "false"
wrap_mode13 = "clamp_to_border"
mipmap_input13 = "false"
alias13 = ""
float_framebuffer13 = "false"
srgb_framebuffer13 = "false"
scale_type_x13 = "source"
scale_x13 = "1.000000"
scale_type_y13 = "source"
scale_y13 = "1.000000"
shader14 = "shaders_slang/anti-aliasing/shaders/reverse-aa-post3x/reverse-aa-post3x-pass1.slang"
filter_linear14 = "false"
wrap_mode14 = "clamp_to_border"
mipmap_input14 = "false"
alias14 = ""
float_framebuffer14 = "false"
srgb_framebuffer14 = "false"
scale_type_x14 = "source"
scale_x14 = "1.000000"
scale_type_y14 = "source"
scale_y14 = "1.000000"
shader15 = "shaders_slang/anti-aliasing/shaders/fxaa.slang"
filter_linear15 = "true"
wrap_mode15 = "clamp_to_border"
mipmap_input15 = "false"
alias15 = ""
float_framebuffer15 = "false"
srgb_framebuffer15 = "false"
scale_type_x15 = "source"
scale_x15 = "1.000000"
scale_type_y15 = "source"
scale_y15 = "1.000000"
shader16 = "shaders_slang/xsoft/shaders/4xsoft.slang"
filter_linear16 = "true"
wrap_mode16 = "clamp_to_border"
mipmap_input16 = "false"
alias16 = ""
float_framebuffer16 = "false"
srgb_framebuffer16 = "false"
scale_type_x16 = "source"
scale_x16 = "2.000000"
scale_type_y16 = "source"
scale_y16 = "2.000000"
shader17 = "shaders_slang/sharpen/shaders/fast-sharpen.slang"
filter_linear17 = "true"
wrap_mode17 = "clamp_to_border"
mipmap_input17 = "false"
alias17 = ""
float_framebuffer17 = "false"
srgb_framebuffer17 = "false"
scale_type_x17 = "source"
scale_x17 = "1.000000"
scale_type_y17 = "source"
scale_y17 = "1.000000"
shader18 = "shaders_slang/deblur/shaders/deblur.slang"
filter_linear18 = "true"
wrap_mode18 = "clamp_to_border"
mipmap_input18 = "false"
alias18 = ""
float_framebuffer18 = "false"
srgb_framebuffer18 = "false"
scale_type_x18 = "viewport"
scale_x18 = "1.000000"
scale_type_y18 = "viewport"
scale_y18 = "1.000000"
shader19 = "shaders_slang/misc/shaders/deband.slang"
filter_linear19 = "true"
wrap_mode19 = "clamp_to_border"
mipmap_input19 = "false"
alias19 = "accum1"
float_framebuffer19 = "false"
srgb_framebuffer19 = "false"
scale_type_x19 = "source"
scale_x19 = "1.000000"
scale_type_y19 = "source"
scale_y19 = "1.000000"
shader20 = "shaders_slang/crt/shaders/newpixie/blur_horiz.slang"
filter_linear20 = "true"
wrap_mode20 = "clamp_to_border"
mipmap_input20 = "false"
alias20 = "blur1"
float_framebuffer20 = "false"
srgb_framebuffer20 = "false"
scale_type_x20 = "source"
scale_x20 = "1.000000"
scale_type_y20 = "source"
scale_y20 = "1.000000"
shader21 = "shaders_slang/crt/shaders/newpixie/blur_vert.slang"
filter_linear21 = "true"
wrap_mode21 = "clamp_to_border"
mipmap_input21 = "false"
alias21 = "blur2"
float_framebuffer21 = "false"
srgb_framebuffer21 = "false"
scale_type_x21 = "source"
scale_x21 = "1.000000"
scale_type_y21 = "source"
scale_y21 = "1.000000"
shader22 = "shaders_slang/crt/shaders/newpixie/newpixie-crt.slang"
filter_linear22 = "true"
wrap_mode22 = "clamp_to_border"
mipmap_input22 = "false"
alias22 = ""
float_framebuffer22 = "false"
srgb_framebuffer22 = "false"
scale_type_x22 = "viewport"
scale_x22 = "1.000000"
scale_type_y22 = "viewport"
scale_y22 = "1.000000"
CB = "1.000000"
ia_saturation = "1.200000"
ia_black_level = "0.010000"
ia_SHARPEN = "1.000000"
SFX_CLR = "0.600000"
RAA_SHR0 = "10.000000"
RAA_SHR1 = "10.000000"
SHARPEN = "2.000000"
CONTR = "0.250000"
OFFSET = "4.000000"
DEBLUR = "2.000000"
SMART = "0.000000"
iterations = "5.000000"
range = "1.000000"
blur_x = "5.000000"
blur_y = "5.000000"
curvature = "0.250000"
scanroll = "0.000000"
vignette = "0.000000"
textures = "frametexture"
frametexture = "shaders_slang/crt/shaders/newpixie/crtframe.png"
frametexture_wrap_mode = "clamp_to_border"
frametexture_mipmap = "false"

Interesting! Thank you for sharing, I will go back to it today and test your preset. And look at what I have laying around at the moment too. There are a few changes I made so far. Very curious to how it will look, but I see you use a CRT shader too, which is not part of my personal goal here. I’ll try with and without it, although it’s not complete then.


Yeah, i was looking for a shader to reduce the “smearing” effect that scalefx causes and ended with newpixie-crt because of the blur passes and also because it was the only crt shader that i tested (and i tested almost every one of them lol) that it played nice with scalefx by default.

1 Like

Hi, I finally played around with your Shader. It’s pretty good and I have to say some things. Thank you for sharing your configuration with us. And excuse me for being late, BTW. I have couple of systematically taken screenshots for comparison. The thing is, I am trying to improve the previous configuration by starting over from scratch again and again and playing with the settings. Others may already know it, but my conclusion is that there is no single best Shader. I know, what a revelation.


  • scalefx_BlueBull: This is the one I got from your post. Basically full featured, but with some CRT filters added to it that also degrades the quality.
  • scalefx_plus: The one I was working on to improve over the older variant. It’s a bit smoother now and handles some areas better too. Overall looks better than the older version.
  • scalefx_plusold: As the name suggest, this is the old version from my initial posting, that is now superseded by the scalefx_plus. Unsurprisingly.

The emulators/cores are setup to be played on their original resolution and without any corrections. Integer scale is set to ON and games are upscaled in integer sizes as much as it they can get on 1440p monitor.


  • nearest: No effect, just output the pixels as they are. Found at shaders_slang/nearest.slangp .
  • scalefx: Base scalefx Shader that is the starting point to improve on. This is a good Shader on its own, but it has some flaws. Can be found at shaders_slang/scalefx/scalefx.slangp .
  • scalefx+sharpsmoother: Can be found at shaders_slang/presets/xsoft+scalefx-level2aa+sharpsmoother.slangp .


The fullscreen images are created with scalefx_plus. I could upload all images somewhere, but I think its a bit overkill for that.

Super Mario World on SNES

Winner: scalefx_plus

Winner: scalefx+sharpsmoother

Super Street Fighter 2 on SNES

Winner: scalefx_plus

Streets of Rage 2 on Mega Drive/Genesis

Winner: scalefx_BlueBull

Sonic on Mega Drive/Genesis

Winner: scalefx_BlueBull

Earthworm Jim on Mega Drive/Genesis

Winner: scalefx_BlueBull

Final Fantasy 7 on Playstation

Winner: scalefx+sharpsmoother

Metal Gear Solid on Playstation

Winner: scalefx+sharpsmoother

DoDonPachi on Arcade

(ddonpach on fbneo)

Winner: scalefx+sharpsmoother


Mine was the least often winner. :smiley:


None of the contenders are winners in all categories, as each of them have flaws and specific characteristics. I like the variant from BlueBull, but it is not what my intention with these presets are. I deliberately avoided CRT degradations and scanline effects. But comparing the images, it’s look speaks for itself. At least I could improve the old version of my scalefx_plus preset in most ways and that’s a success for me. And in some key points all custom variants win over the default reference Shaders, that come with RetroArch. But in the end, I am not satisfied with the result. I just couldn’t get a way to make the Sonic Waterful look transparent without breaking the other stuff. And the “X” (and a few other places) in Mario World is busted too. On the other hand, the Bar Lights and Face of Ryu in select screen looks acceptable and fullfill my goal (hopefully that makes sense and is correct English…).

Don’t forget, I love playing with CRT Shaders, which is my preferred main way to play games. This here is just a little side project for fun and to learn more about RetroArch Shaders. BTW the recently added “Append” and “Prepend” Shader feature is a life saver. Can’t thank enough to the devs.

1 Like

You’re welcome :grin:, I put this one in :wink: I’m really glad it’s making it easier to try things out :grinning:

I really like your Blue Bill preset :grinning:

1 Like

Just a little note here, so we have no misunderstanding and I don’t want get the credit for. The “Blue Bill” preset is not mine, it’s from the user Blue Bill sharing a few replies above. I like his variant too and deserves way more attention than buried under random posts, IMO.

Thank you again, HyperspaceMadness. I could go on and write an essay on itself about this topic. For anyone curious or don’t know what the Append and Prepend function is, here is the announcement post: Append/Prepend shader presets

1 Like