how to disable texture blurring based on a camera distance form object?

I’m wondering is the a way to disable texture blurring based on a camera distance? Right now when the camera is close to the object textures look sharp and nice. Once i start to move away from it, Unreal optimizes them and make blurry. Is there a way to control it somehow?

Thanks

Open the texture in the content browser and extend Texture section(click the little arrow) in Details panel, then enable Never Stream.

thanks a lot!

This isnt exactly controlling it though is it. I mean yes it doesn’t blur, but presumably the intention of that system was to somehow control the resolution of textures as content is streamed and the values for controlling that level of detail must be somewhere right? So rather than just switching it off, it’d be useful to know what affects the quality/distance thresholds.

If you want more control over texture streaming check BaseEngine.INI.

I used no mipmaps. Is that the same?

No, setting No mip-maps will always render the highest resolution image (Rather than reducing resolution as the image gets farther from the camera), this can lead to aliasing issues as the image sampler will struggle to multi-sample the reduced image.

You can also try to add a negative Mip-bias to the texture, either in the texture details panel or in the material editor. This can help avoid textures blurring too soon, but avoids the artifacts from having no mip maps.

Can someone explain the advantages and disadvantages of this approach. From my limited knowledge texture streaming is there for performance reasons right? Isn’t it what’s keeping the game’s memory footprint down? So turning texture streaming off would increase the memory needed to run things right? I honestly don’t know. This answer seems like a poor workaround if it hurts performance.
I was having a similar issue just yesterday with the textures showing up blurry and sure enough turning the streaming off does fix it, but has it hurt my speed? I haven’t done any tests yet to tell.
It also seems to sometimes be a problem and sometimes not. This morning I opened my project back up and turned the streaming back on and now everything seems fine. Perhaps yesterday my system was out of memory and thus causing streaming issues?
Can someone explain the negative Mip-bias a bit further too. I see the bias in the texture details panel but what values are appropriate? Do I just throw a negative 1 in there. What exactly is it doing?
Thanks to anyone who can help!

I havent run into this issue too often myself so i havent dug deep into it but there was a similar question on the forums a while back and there was a suggestion regarding bounds of the mesh. If the bounds of the mesh is out of scale then you may may run into streaming issues at wrong distances so play around with bounds scale value of your meshes and see if it affects the behavior.

You could write where to look for this BaseEngine.ini …

All you need to do is to open up the INI and then Edit > Find and search for Texture. It will get you to Texture Streaming section a couple of finds later…

The other answer is not ideal - sure it won’t be blurry, but far away it will look overly contrast-y and speckled, and you lose all the performance advantages that come with texture streaming.

The best way is to go into the material that samples the texture, select the TextureSample node and change the MipValueMode to MipBias. I like to connect a scalar parameter to it and play around with a material instance to find a good value for MipBias: usually -1 or -2.

Do normals also stream like this? Should I be tweaking MipMapBias’ for my diffuse and normal? Also… what does setting the MipBias to a negative number even do? How can I imagine MipBias?

Yep, all the texture samples should use mipbias.

With texture streaming, the idea is to conserve VRAM by creating a bunch of resized copies of the full resolution texture. So for a 512x512 texture, the engine precomputes a 256x256 version, 128x128, all the way down to 1x1. The engine labels these images 0, 1, 2 … (mip level)

When the texture is really far away, the full resolution 512x512 one is not taking up heaps of VRAM, the engine just uses mips 7 to 9.

The way the engine calculates what mip level to use is a black box to me, but it is based on distance.

With mipbias, after the engine is done saying ‘use mips 7-9 of this texture,’ you manually override it and say ‘no, subtract 1 so it looks clearer.’

If every single material in your game needs mipbias, there is probably a .ini setting somewhere that changes the way mips are calculated.

Fantastic and perfectly explained. Thank you so much.