My game renders at a low resolution for stylistic purposes, and by default the unity camera renders to a texture that has bilinear filter. This results in a blurry image, which I don’t like. So, not wanting to deal with the extra low res target rendertexture + camera approach (because it messes up the various camera transformations i use to build the UI), I’ve been doing this, just to get crispy looking pixels:
This works fine, but for the life of me, I can’t understand why this can’t be done in a easy way, with plenty of Unity games (eg. Short Hike), utilizing the low res look and point filtering. Please Unity, make this feature available in the Camera API or wherever appropriate!
Games use post processing or custom shaders to get this look. This way it even looks sharp on high resolutions, while keeping the desired look. I do not recommend using forced low resolutions, since there are so many different screens out that and it will probably look crappy
Post processing to achieve lower fidelity seems kinda dumb. Nevertheless, something this simple should be available in the API, not having to resort to hacks with rendertextures or blits.
Why is it dumb?
Try running a low resolution on a big 4k display. It will look terrible. If you run it natively and use a post processing filter it will look amazing.
You don’t create a lower fidelity, then you are calling your artstyle crap. You use the post processing to get the visuals you want.
When you post process a 4k Tex into a 320x180 there is a lot of pixel swimming, it is never truly crisp.
Anyways, you can have your opinion on how it looks, I’m just arguing for a simple quality of life feature that I believe wouldn’t be too hard to implement.
If it’s not too hard you might be able to implement it yourself.
And you don’t just decrease the pixel count. The post processing will make sure that they are pixelated however you want
I literally did implement it myself? Only now I pay one Blit for no good reason. What is your beef here, you don’t want the unity graphics to be more customizable into your own liking?
@topitsky you can avoid using two blits. You only need 1. Just set the targetTexture on your camera to a RenderTexture (that is sized at your low resolution), make sure that RenderTexture has filterMode = FilterMode.Point, then do 1 final blit to blit to the framebuffer (like the last blit you are already doing).