Multiple small texture sets or one large texture set?

Should i use

  • multiple(four or five) 512 or 1k pbr texture sets
  • one 4k set
  • two 2k texture sets ?

what’s better for memory as well as performance on phone ?

also if the individual jpeg of AO rough metalness is lighter than the merged png is it better to keep them separate and merge on the client side using html canvas ?

@donmccurdy any tips ?

I expect several smaller (adjacent) textures to lend to trivial discard, because some texture tiles may be outside of the view frustum. On the other hand, keeping track of when to (re-)load more texture tiles probably comes with some overhead. So I expect a break-even point from where to prefer one over the other. See this.

1 Like

GPU memory usage will be the same regardless of how pixel resolution is divided up among images, and regardless of JPG vs PNG compression. GPU memory for PNG/JPEG is a fixed function of image resolution, mipmaps, and nothing else. If memory is a major concern, use KTX2 instead.

If downloading separate occlusion/rough/metal maps reduces the download size, I suppose that’s fine. But (1) I’m a bit surprised if it’s smaller with a good image optimizer, and (2) it’d be hard to say universally that it’s “better” if it requires mobile devices to do extra processing. GPU memory usage will be 3x if these images are not merged.

Sometimes 4K textures are a problem on older mobile devices. Other than that I don’t know of any major difference between many smaller textures and fewer 2K or 4K textures.

I expect several smaller (adjacent) textures to lend to trivial discard, because some texture tiles may be outside of the view frustum.

Note that this would be relevant to using several smaller meshes, not directly a function of texture size. But certainly a consideration if you’re deciding how and when to merge meshes and apply a texture atlas.


Isn’t it relevant, how much texture memory you’re using at a time? Think of Google street view - you certainly don’t load the whole world at the same time. At the rate you need to load additional tiles, you may also discard tiles which have become obsolete, because out of view.

You’ve got a valid point there, thanks. Which asks for tiled meshes, too.

Definitely, I just wasn’t sure this was the question. Textures outside the frustum are not unloaded from memory. If you have more textures than can or should be in memory at once, then streaming them in smaller chunks is certainly a good idea.

1 Like

all this time i was using models made by others … now that i’m making own in blender and substance painter ,
i have the freedom to distribute materials/textures across more efficiently

2 PBR png texture sets weighs 60mb

i’ll go with seprate smaller files instead of one larger file. it’s easier to handle

Mesh size should be under 1.5 mb so that’s good

1 Like