I have a bit of a conundrum that I’ve been stuck with for the last couple years. Ever since I discovered the xBRZ filter, it has become my definitive shader that I prefer to use for all my retro pixel art games. I think it does the best job of smoothing out the pixels to give them an HD-looking makeover while maintaining a reasonable sharpness and consistency.
Problem is, my preferred setting for xBRZ is the fixed 2x preset as featured in SNES9X and VBAM, but my preferred emulator for my SNES titles is BSNES for the superior color contrast, accuracy, and sound quality. By default, BSNES emulator only comes with the freescale version of the xBRZ filter, which renders at something that looks more closely like the 4x setting on the standard version of xBRZ. It’s too powerful for my taste, smoothing out the pixels too much and distorting the game’s original art style.
I later learned that this freescale version can be easily modified to limit the scaling factor on it, but even after applying these changes, it still doesn’t look right. It seems to be using a fundamentally different algorithm from the fixed 2x - 6x preset options that we see in SNES9X and VBAM. So, that’s when I decided to try looking into RetroArch. While I was initially ecstatic to find that it has more fixed scaling xBRZ options than standalone BSNES, they still are only limited to 4x - 6x, for some reason missing 2x and 3x. I am not sure why these two are omitted, as to me they are vastly preferred for improving the picture quality of 16-bit era games.
I have tried desperately to examine the code over and over again to see if there were some easy tweaks I could make in order to say, re-adapt the 4xBRZ filter into 2x by simply flipping a few values around and changing some lines of code, but after careful combing through it, I still just don’t understand nearly enough of how it works to make the modifications. I would be eternally grateful if anyone could provide a proper 2xBRZ option for RetroArch; one that isn’t just a tweak of the freescale version, or if they could point me in the right directions of how to achieve this myself. Though I must warn you regarding the latter option, my brain has already melted trying to understand this code, so if it requires any extensive knowledge of how the smoothing algorithm works I’m probably not going to be able to follow it. I’m just not at that level yet.