Most efficient way to use many textures

Hello, so I have been baking textures for many static meshes in blender for my game, right now there are around 30 textures( normal, diffuse, AO,…) and much more to come. I was thinking of making a few 4096x4096 texture sheets where I’ll have the textures for all the different static meshes next to each other in a grid, put them in a single master material, then attach parameters to metallic, specular, simple grass wind and other things so I can modify each model separately in a material instance, so a material instance for each static mesh. I’m posting here to see if the more knowledgeable and experienced people here know if this is the most efficient way to approach this or if there are better ways. Thank you for reading!

What you are trying to do is anything but efficient.Imagine 4 Objects share 4 corners of a texutres:
Upper Left,
Upper Right,
Lower Left,
Lower Right

Imagine all 4 objects are visible on screen. Nothing wrong here, this is indeed very efficient.
However, if only one object of these four is onscreen, you are wasting alot of space (3 corners of the Texture are unused).

There’s nothing wrong with having one textureset for one object, because you are using what you need.

I thought the larger the number of materials the worse, I guess I was wrong. So one material for each static mesh is better huh?

First: You should use Material Instances. Material Instances of the Same Material share the same Shaders.
Second: What you mean are drawcalls. Indeed, multiple Material (/Instances) increase the DrawCall count, but this is negligible, if you do optimizations regarding (Hierarchical)](https://docs.unrealengine.com/latest/INT/Videos/PLZlv_N0_O1ga0aV9jVqJgog0VWz1cLL5f/bOjYP-c4qhA/) Instanced Static Meshes.

1 Like

Haha what you want is a texture parameter! You can change entire textures in your material instances.