MSAA causing texture atlas bleeding

I’m trying to use tiles in a texture atlas for mobile VR drawcall optimization. At distances or glancing angles, there is bad texture bleed between the tiles. I originally thought this was a mip issue, but I’ve confirmed it’s MSAA causing the problem.

As an experiment I tried adding absurd amounts of border padding to the tiles (768px per side for a 512px tile) and there’s still some bleed at extreme angles on MSAA 4x.

The only potential fixes I’ve learned about are texture arrays or centroid sampling, which both seem to be unsupported/complicated in UE4 as far as I can tell.

Any suggestions on how to fix this, or alternate approaches for batching textures?

Found out the console command “r.AllowTexture2DArrayCreation 1” allows you to create Texture2DArrays in the content browser (under “Materials and Textures”). Going to see if I can get that working because I think it’s the ideal solution for this problem.

I have it working on PC but having issues on Oculus Quest (Android). First it was an error about not supporting the default compression, so I changed it to uncompressed and then the error is

Assertion failed: this->GetSizeZ() == 0 [File:D:/Build/++UE4+Licensee/Sync/Engine/Source/Runtime/OpenGLDrv/Private/OpenGLTexture.cpp] [Line: 1141]

[Callstack] 0x00000000CAAE17E4 libUE4.so(0x000000000ADD97E4)!TOpenGLTexture::Unlock(unsigned int, unsigned int) enter code here

Relevant comment from that file is “Volume/array textures are currently only supported if PixelBufferObjects are also supported.” Not sure if that’s a hardware property or a setting I can change.

Unity documentation says OpenGL ES 3.0 supports texture arrays and Oculus Quest looks like its OpenGL 3.2 so it might be fixable.

I tried all the compression settings, oddly “Alpha (no SRGB, BC4 on DX11)” actually ran, but obviously it doesn’t have color info so it’s not useful here.