low quality when using low FOV camera from a large distance

I’ve been working on a game with an ortho camera and we wanted to try it with some perspective. We wanted just a small amount of perspective distortion so I set the FOV to 10 and moved the camera away from the content in the scene. However now when I do a build the image quality has dropped significantly, with everything looking very grey on some devices.

I’m using the LWRP and building for iOS.

Nearly all my textures are compressed using the default for iOS - RGB Compressed PVRTC 4 bits. I did notice that one texture that didn’t have “override for ios” checked didn’t suffer the same loss of quality, but turning that off for all the textures doesn’t sound like a good idea.

I don’t think the issue is mip map related - the uncompressed texture that wasn’t affected also had mip maps on. It wouldn’t make sense to me for unity to use a low quality mip map of a texture just because the camera is a long way away, because the camera is zoomed right in and the objects are taking up a decent portion of the screen. So yeah, I don’t think it’s the mip maps.

Can anyone suggest some things I can try?

Thanks

Random guesses:

  1. Does your scene have fog enabled? It may have been on the whole time and you just never noticed, but now it’s visible when the camera is moved back? Some objects may be using shaders that disable fog, which would explain why some do not suffer from the problem. Those objects using different texture settings is just a coincidence. Turn off fog and it should be fixed.

  2. It really is a mip mapping problem. Moving the camera far away and zooming in might be causing some problems with floating point precision, which in turn could be causing issues with some GPUs picking the wrong mip levels. Some compressed texture formats may end up looking a little more muddy than uncompressed or other compression formats in their smaller mips. Does disabling mipmaps on one of the problem objects fix it? If so, then that is the problem. You may need to switch to using a custom projection on your camera. Basically you’d want to have your camera’s default orthographic camera and a wide angle perspective projection that’s roughly captures the same region. Then lerp between those two matrices slightly so it’s mostly the orthographic projection, but also slightly the perspective projection, and set that as your camera’s projection matrix. Note, this can break a lot of random things as lots of post process effects make assumptions about the camera either being a perspective projection or an orthographic projection, not something in between!

Thank you for your input. It did look like fog to be but fog is off in the lighting settings and not turned on in the code. Also it doesn’t happen to the uncompressed texture when viewed from a distance so I guess that points away from fog being the culprit.

I did try turning off mip maps for some floor textures that we were having trouble with but that didn’t seem to make any difference. I do have a script for tweening between ortho and perspective projections - I’ll give your suggestion a try.

Thanks again

The lerping between 2 Matrix4x4s did fix the perspective distortion but caused some issues with ScreenPointToRay and some other stuff. Ended up fixing it with Lens Shift in the physical camera settings.