Texture Settings and Resource Size Problem

Hello everyone,
I wanted to ask a couple of things regarding Textures importing and the resource size for each texture. I also want to ask about Texture streaming pool
For example, I imported a diffuse map or a roughness map (both 4k) into Unreal Engine which was originally of around 1.7mb in size on my drive. However, it shows up as utilizing around 11mb of memory in the engine. I have gone through Unreal Engine’s documentation for texture support and settings. I understand that the DXT1 format keeps the compression ratio constant but;

Is there anyway I can reduce the size of the texture resource being used in the engine?
I also would like to know how Mips work in the texture settings?
How can I further compress my texture sizes? How will that help me in my texture optimization?
What other techniques are you guys using to bring in high quality textures and maintaining the texture streaming pool underneath the default settings?
Lastly, Is importing too many 4k sized texture causing the texture streaming pool to overflow?

Any help is appreciated,

Hi Invokelikenp,

Let me see if I can answer some of your questions. First of all, 4k textures are usually bigger than 1.7 mb. As an example, I’ve just created a jpg with a resolution of 4096 x 4096, 96 ppi, solid white, and it weighs 1,07 mb. Adding some colour already bumped that size to 3,36, and it was a very basic set of strokes. After that, I’ve added a forest texture and that increased the size to 9 mb, and it wasn’t a fully used 4k canvas.

With that in mind, I don’t find it strange that your texture is showing as 11 mb big. The strange part would be it actually showing as just 1,70 mb on your drive. Can you perhaps specify a bit more what that texture looks like? I’m assuming that your texture is light on your drive because of the format that you’ve saved it as, but it might not be representative of the actual “real” size.

Apart from that, there are ways which you can use to reduce the size of the texture you are using. First of all, a 4k texture as a diffuse or roughness seems pretty high for a game - or even archviz -, as the standard 1080P display can only display 1920 x 1080 pixels. Even if you go to “4k” screens, the output is only 3840 x 2160, which is less than a 4k texture (4096 x 4096 pixels). What I’m trying to say is that you can go lower quality without sacrificing any visual fidelity.

If you still feel like you need the 4k resolution because you are painting textures over big areas, you might be better off by subdividing those areas either through using smaller objects or by masking parts of the original one, so you use more textures but smaller in size rather than a big one. Apart from that, keep in mind other methods for texturing your mesh, like procedural material creation, using noise to mask areas or even creating your own masks. These methods are usually the way to go before using large 4k textures.

If you stil need 4k textures regardless of the above, you might consider lowering the quality of your images through Photoshop or GIMP.

As for how the mip work, you can find more info in here:

That website has lots of info on many of the things you’ve asked, so I hope it helps!

Hoping you find this useful, let me know if I can help you with anything else :slight_smile:

Thank you so much for the swift and clear response braisbr1, I am definitely considering bringing in 2k or 1k textures instead of going for 4k for everything.

There is one more question if I may ask:

Why is there a variation in file sizes between the external texturing software, the engine UASSET file and the individual size of the texture file in the sizemap within the engine.
For example, There is a normal map asset that shows up as 22.4 MB in the size map, it shows up as ~33MB in the project content directory (UASSET file) while the original image export is only around 5.4 MB.

The only reason I am worried about this is because what if I import 100 or 200 different texture files and each is saved in UASSET format at 33mb in the project directory. This means I am looking at a whole bunch of space being taken up by just these files. Why does this variation exist and can we reduce it even further?

No worries! And I am so sorry I hadn’t seen this question before, it’s been ages and you’ve probably solved the issue by now… But again, sorry for not seeing it before!

I don’t have a 100% true answer, as the best people that would know about that are the software engineers, but my best guess is that the .UASSET file has a different way of storing the information than the original format that resource you are importing was in. So, if the formats are different, it’s normal that they would occupy a different amount of space. Think of jpgs, pngs or bitmaps - you might have an original file in, say, Photoshop, but saving it on different formats will give you different file sizes that are determined by the compression of those formats, the way they are coded and so on.

About the individual size of the texture file in the sizemap might be due to the creation of mipmaps and whatnot. Since in the editor you might have different mipmaps for your different textures, those could be increasing the size of your resource? The fact that those textures need to be fed to the GPU might also have something to do. Again, not 100 % sure as this is my best guess, but do let me know if you’ve found another answer elsewhere! :slight_smile:

I apologize for seeing your reply after so long. I have discovered other ways to solve my problems regarding streaming and resource sizes. Here is what I am doing for now:
> Learnt about mipmapping and made custom settings in the materials to adjust mip levels on screen size and object distance from player.
> Juggling between file types (png, targa, jpeg) <<<----it saved tons of space that was being used up
> Removing some of the textures that are unnecessary in 4k resolution
> Keeping higher res texture maps only on important things only (characters, usable objects, weapons, collectibles)
> Spent a few weeks further organizing the project through LODs, render settings, removing redundant texture file usage in materials etc…

TLDR; automation, some reading and organizing helped. Thanks again