4.26 - Landscape textures are extremely pixelated in mobile VR (Quest 2)

I only just managed to make my layered landscape material build correctly in VR by reducing the texture sample count to 9 (color + height + normal, x 3). Previously, any time I painted more than two layers the entire component would go checkers and refuse to compile. So that’s cleared up.

Now the landscape and material display where I’ve painted them on my Quest 2 (natively, not linked), but they’re heavily pixelated like a texture from a 90s game. In the editor, including the Android ES3.1 mobile preview, there is no pixelation and the landscape looks correct.

I found what sounds like the same basic issue happening in another post, except that it’s from 2014 which means it’s time to generate a new pile of information for future googlers to stumble upon. That post says it’s something to do with the float precision (highp and lowp) of landscape UVs across long distances with small tiles. The solution it recommends only makes partial sense to me because I had only planned to touch the surface of landscapes for this project, saving more research for later. Can anyone describe what is causing chunky pixelation on a landscape in VR?

I already disabled mipmapping on all the textures just to cross it off the list. It made everything painfully crisp and killed my frame rate. It didn’t fix the chunky pixelation unfortunately.

Other details:

  • Component Resolution (Verts) = 255 x 255

  • Component Count = 16

  • Component Subsections = 2 x 2

  • Resolution (Verts) = 1,017 x 1,017

  • Landscape Count = 1

  • Landscape Blend Layers = 3

Material Setup:

You could try the Full Precision UV option on your materials. Good luck! image


Full precision ended up working in this case, thanks. It sounded like there were other options for working around it, but I expect to revisit landscapes over and over so there’s no rush to perfect it straight away.

I’m looking at moving my UV tiling for each layer into the CustomUV channels to make that process possibly cheaper (depends how dense the landscape tessellation is I suppose). Might also trim my texture sample count by packing the heightmaps into the alpha of my base color maps.

I implemented both the packed heightmaps (with a switch to unpack to separate maps) and the CustomUV channels to control tiling. It saved about 5fps in my particular case. It should only be using 6 total Texture Samplers now, with base color and height packed together, RMA replaced with Full Rough, and a normal map.

1 Like