Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

"Post-Processing" Bilinear Scaling option #20

Open
Girotin opened this issue Apr 23, 2022 · 2 comments
Open

"Post-Processing" Bilinear Scaling option #20

Girotin opened this issue Apr 23, 2022 · 2 comments
Labels
enhancement New feature or request

Comments

@Girotin
Copy link

Girotin commented Apr 23, 2022

Some 2D pixel art games lack an native bilinear scaling system inside the game code to fill the entire screen properly without pixel-distortion. That happens because most of the times the mobile phones add it natively (I think)

On 3D games that isn't a big thing, but in 2D pixel-art games the visuals get heavily damaged;

We have an option that adds a bilinear filtering to each texture rendered, wich works nicely with a good amount of games and it's actually a good palliative solution for this problem, but there are some games with VERY low-res textures on pixel-art games, that simply shouldn't receive post-processing that way.

For blurrying every texture, on 2D pixel-art games most of the time everything will be very blurry and "not regular looking" because there will be a big difference in the sharpness of the textures, considering that we'll have big textures being filtered (wich most of the time don't look that bad) and very low-res ones (wich look HORRIBLE when filtered that way);

Is it possible to add an "Fullscreen Post-Processing Bilinear Scaling" option?
(I don't know if that would be the correct way of writing this in a smaller way, but anyway, I'll try to explain it better)


EX:

If we have a classic Super Mario Bros sprite for example that has a resolution of 8x16 that will be utilized on a 240x160 render frame that will be upscaled to a 480p monitor.

Do you think it's better to scale each sprite texture individually to fit the final 480p screen resolution, or to pre-render the entire image normally on 240x160 and then upscale it to 480p with bilinear filtering?

  • Adding a filter to specific 2D sprite textures will simply make them extremely blurry, the resolution is too low to manage filtering like this without looking VERY bad.

  • When upscaling an entire image instead, the amount of detail loss is smaller, keeping a better look in general. It works in a simillar way when downscaling a higher res image to a slower one.


Just like some official Vita games do for 2D sprite games:
another EX:

Iconoclasts was originally meant to run on 640x360,
When rendering this game 2x the native res it runs on 1280x720, most of the Screen resolutions utilized by monitors at the time the game released.

Since the scaling was 1:1 to each pixel, there is no distortion and no filtering is needed when upscaling the image that way.

When it got ported to the Vita and started running in other resolutions, it started using a bilinear filtering system to fit the screens.

The Vita's res is 960x544, and obviously 360p isn't 1:1 with it.

That's what I'm asking here;

  • On Iconoclasts and a lot of other Vita games, they render it in a lower res and then upscale it to 544p with bilinear filtering.

Original 640x360 Iconoclasts render on a 544p image
Iconoclasts 1

640x360 -> 960x544 Bilinear Upscaling Iconoclasts image
Iconoclasts 2

Is it possible to have an option like this on this app or is it too complicated to work on now?
It would help a lot to keep the image looking good on a lot of titles that were meant to be played on smaller resolutions than the Vita, and even higher ones too.

Hope it was possible to understand my idea, I'll just close this issue if it didn't make any sense/too complicated.

@Rinnegatamante Rinnegatamante added the enhancement New feature or request label Apr 24, 2022
@Rinnegatamante
Copy link
Owner

The biggest problem in implementing this is given by the fact that seemingly the Runner has no way to tell the "frontend" what is the original internal res of the game thus making hard even to make an "unscaled" renderer.

@Girotin
Copy link
Author

Girotin commented May 13, 2022

The biggest problem in implementing this is given by the fact that seemingly the Runner has no way to tell the "frontend" what is the original internal res of the game thus making hard even to make an "unscaled" renderer.

Oh, ok then, I'm happy that you tried seeing what was possible to do already XD

I'll just keep this topic open then, and if someday this gets manageable, maybe consider giving it another look and adding this on the project idk. It's not a glitch or anything like that so it shouldn't be something to focus with priority unless u get very interested on making it work.


Now that u mentioned the reason why it can't be done, I started thinking if it is possible to make the "texture bilinear filtering" less agressive instead. If filtering the whole frames is too complicated/impossible this could be an alternative, if we consider that it is a palliative solution already like I mentioned.

The only problem is that from what I know almost any other upscaling method that isn't bilinear demands a good amount of processing (I'm not sure), and speaking about pixel art just like I said again, filtering every texture won't be as good as upscaling the internal res, but either way, if upscaling the internal res is not possible, that's the only other method I could think to try implementing something simillar.

It's just an idea though, idk how the code works behind so I have no idea if that would be manageable too.


I found this small article that explains some stuff about Pixel Art scaling; it's a good read and maybe some stuff of it could be useful if this enhancement gets manageable somehow/someday.

https://colececil.io/blog/2017/scaling-pixel-art-without-destroying-it/


But anyway, thanks for your time and all the work! I'm doing computer engineering, and still am at the very beginning of the studies on my college. I'm pretty sure I'm not able to try helping any further with this cuz I still consider myself a Junior, but maybe I'll manage to be as good as you and TheFlow someday XD

You guys are part of my inspiration to begin programming, thx a lot for working with the Vita Homebrew scene ❤

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

2 participants