I’ve been trying to create a pixelated effect that also improves performance, but after setting r.ScreenPercentage 10 and r.AntiAliasingMethod 0, the image is incredibly blurry:
Is the only crossplatform way of accomplishing pixelization by changing r.ScreenPercentage to reduce pixels rendered, then perform the a post process effect to sharpen the pixel edges? I feel like this should be a feature of the engine but everywhere I look either is a non-answer or pixelization through post process effects, which is just a waste. It’s the same deal with cel shading: there are plenty of post process tutorials but no implementations utilize the render pipeline, which I’m sure would be optimal in regards to performance and architectural feng shui.
I have some experience with OpenGL and Vulkan, but a large reason I’m using an engine is so my game can be easily compiled on multiple platforms, however there doesn’t seem to be a good way of implementing “correct” pixelization out of the box. Any ideas or more experienced engine devs that can point me in the right direction?
If you set screen percentage to 10% without antialiasing/upscaling, only 10% of pixels will be rendered and the image is then scaled to the screen resolution. This explains this blurriness.
I am not sure how you could achieve easily what you try to do, apart from writing your own upscaler, but that would be a difficult task.
Or maybe there’s something to look on the side of Render Targets: you render everything to a material, with your desired low-resolution, and the material is applied to a surface rendered on screen (the screen percentage is still 100%). Probably there is more control regarding the texture pixel interpolation/scaling/etc. in a material.
I had assumed that scaling fewer pixels and then scaling to screen resolution would maintain the sharp edges of the pixels. So far the best solution I can come up with is the one I mentioned in the post: a post process shader that simply displays the average color within each upscaled pixel.
I will try the rendertarget method and compare the performance to the ScreenPercentage → Post Process method.