How to handle a lot of textures to stay low on build size

Hello guys,

I have a problem about project size on building due to textures.

Today I was wondering how our assets will increase the project size due to their texture size, and it wasn’t easy for me to understand why I didn’t think about this before.

Our project map is quietly big, and we need a lot of assets.
I made some sums and mults just for the walls and floors:

Walls: 15 type (average) of different walls for the entire environment.
Floors: 25 type (average) of different floors for the entire environment.

Let’s make some sums, we got 25 type of floors, so 25 material. To have some differences on the same floor (like missing bricks, and so on…) we thought about 3 material instances, each one with 3 relative textures (BaseColor_AO, Normal_Height, Roughness_Metallic), there three textures are 2k and the weight is 13 mb total (average).

So for the floors we have: 25 x 3 = 75 materials, each one with 3 instances and 3 different textures so: 75 x 3 = 225 textures.

225 textures x 13 mb of space =
2925 mb.

I don’t think I should go over the walls ecc, I think you got what I mean.

How can we handle this? 3GB of memory for floors textures is really a lot, which are the solutions?

I thought about atlas or lower resolution but in these way we lose a lot of quality and we would like to avoid this.

Is there another way? Could we compress all the textures with the build to drastically reduce the build size? What do you suggest?

Thank you very much guys.

Find a substance guru who can build procedural textures for you in Substance Designer. But takes a lot of time, Substance plugin crashes a lot in UE4. Many studios hire tech artists just to do this kind of work;
Or you can use UE’s Material Editor too, creating materials from simple source texture channels you share between all other materials as much as possible, but it’s not as powerful as Substances.
Either way, quality will be sacrificed because the way substance designer works in UE4 at the end; outputs a fixed image source, but if you plan well you can turn that 3g to less than 300mb of texture in memory with close to same quality of original files. But then again, will take a lot of time to produce substances or material functions good enough to replace raw textures.

Thank you Bruno for the answer.
I am the artist who is responsible for texturing in the team, and I use Substance Designer.
We tried the plugin, but the console version is not available for release, and this will be a great problem in the near future for us, since we will have to recreate all the textures in material editor for the console release.

At the moment we make texturing through Designer but we export textures and import them in Unreal to make the shader in its material editor.

As I wrote, we optimized the texture channels in the best way we found out:

Color with AO in alpha
Normal with height in alpha
Roughness in RG and metallic in B

I don’t think there isn’t a way better than this to optimize channels.

However, Substance can’t be the solution: it’s a plugin!

How does a studio fit in 30-40 gb all the game if they don’t use Substance? Compression? How?

Using the Alpha channel to store information will make your Texture take up almost twice as much memory as it normally would because it has to use DXT5 for compression instead of DXT1. However packing Mask style Textures like, Roughness or Metallic into the RGB channels of a Texture without using the Alpha channel will still be an overall win in terms of memory and disk space used. When I am making Textures I usually just forget about the Alpha channel and just make as many RGB mask Textures as I need. This way I can ensure that every mask Texture will be as small, size wise, as possible.

Which brings up another point, your Mask and Normal map Textures do not need to be the same size as your Base Color Textures and can often be reduced in size without the artwork suffering a great deal. A quick way to see how making Mask or Normal Textures smaller will affect your project’s art work is to use the LOD Bias in the Texture Editor. If you find that bringing the size of the Texture down from say 4k to 1k does not make the Material look any different then I would export that Texture out of UE4, size it down in an image manipulation program, and then re-import it into UE4 at the new 1k size.

I only use what I see in UE4 as a guide to how big my project is might be. If I truly want to know then I cook my project, with package compression enabled, and then check the size of that to get a more accurate size estimate. Also do not forget that games like GTA 5 for example take 65 GB of hardrive space to play. Unless your target device is a phone or console then I would not worry to much about size as people nowadays know that PC games take up a lot of space and also HD space is pretty cheap.

In closing please let me know if this helped or if you have any further questions and I will do what I can to help.

Multiple RGB maps will cost you drawcalls though. And I recommend you keep the normal map clean from other bitmaps as tou won’t be able to make use of BC5 normal map compression that way.

Thank you for the reply Sam,

I will absolutely try to check if scaling normal resolution changes my texturing quality; the alpha in the normal is for the heightmap used in bumpoffset, does it really cost twice?

My last question is: does the engine compress the textures in some way in the final package of the game?

Alpha in normal will make it use DXT5 which decreases normal map quality(and increases size like Sam said, though I do not know how much it differs from BC5 in terms of size). The reason why BC5 is so high quality and we can get away with it is because it discards both the blue and alpha channel.

I insert Height in Normal alpha when needed so I have one RGB map less.
If i import Height as RGB this mean more space, however I use height in alpha for bump offset in the the shader, then I switch the normal map again into DXT5 format

I didn’t notice low quality inserting an alpha into normal map however

Well that is because the alpha channel is uncompressed so you should not see any compression artifacts.

Hi guys, so a setup like: Diffuse RGB, Normal RGB and Metallic+Roughness+AO RGB is kosher?

That seems to depend on the model, from tests I’ve seen normal map resolution as the most important, where roughness/masks/base color can be lower resolution, and the normal map will help cover those up.

Reusing textures as much as possible really helps. Using trim sheets, tiling textures, masks, and vertex painting for environment instead of a bunch of large unique textures.