yeah so I thought about it for a bit and I'd love to know your opinion on my ideas. So, as far as I can tell there are 3 ways to solve this problem

1. the above pixel shader

2. what you said about pre upsampling a texture, so for example take a small 16x16 texture and pre upsample the asset with nearest neighbour, then render it on a smaller space with linear.

3. MSAA (or maybe SSAA)

as far as I can tell 2 effectively mimics what something like MSAA would do (not overly familiar with MSAA or how it works, so I could be wrong) but wastes a ton of texture memory. As far as I know MSAA works by sampling at multiple points in a pixel and blending the results together, so scaling up the texture effectively mimics that by having more identical texels map to a single pixel. Therefore, it seems like option 1, the shader, is actually the most effective since instead of sampling at discrete points we have floating point resolution for the blending, thus giving close to perfect subpixel accuracy on our art.

EDIT: I guess with MSAA you'd actually want linear blending off (not sure on this and would appreciate input).

Finally, one last question I have on this which is sort of a digression, is do these methods work just as well on arbitrary pixel art rotation as they do on scaling.

"This works for arbitrary scaling, but what about arbitrary rotation? Well, although it is no longer an exact replication of the super-sampling effect when applied to rotation, it is a close approximation. The same shader code can be used for rotations, and it is hard to notice any deficiency." is something I read on https:

//medium.com/@michelotti.matthew/rendering-pixel-art-c07a85d2dc43

this confuses me because I feel like the properties/effects of the shader should be the same for both rotation and scaling