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

4 Likes

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.

2 Likes

Hi @Weirdly_Strange,
How has your Mobile VR Landscapes journey gone? If you’re still working on the project, or have finished, did you have to adjust your process further as you moved further along?

Did you / were you able to / use Realtime Virtual Textures with your Landscape?

“Use full precision” worked for me. Thanks

1 Like

I just tested this on 5.1 and it works also. It’s located under:
Project Settings > Engine - Rendering > Mobile > Mobile Float Precision Mode > Use Full Precision for Every Float.
Restart to apply the settings. This rendered Nanite assets as well. Maybe relates to the Global Tiling/Offset Parameters and how they are mapping to landscapes?