Mobile landscape material won't render

Hi there. I’m having trouble with using a layered landscape material on a mobile platform.

The material renders fine in the editor (with Android ES2 preview rendering level. Also, when I play using the mobile preview everything looks as it should.

The problem occurs when I launch the level on my Android device (Samsung Galaxy S6 - SM_G920I), instead of seeing the landscape material, I see the default checkerboard material instead:

The material is a basic landscape material with 3 layers. The only change I’ve really made is to alter the mapping scale of the landscape coordinates node, everything else is quite standard… just 3 layers with diffuse maps and textures, all pulled from the mobile starter content.

Any suggestions?

Are there any warnings in the cook log?

Could you upload your project somewhere for us to look at?

Hello, I have same isssue, with starter pack material and android_ATC, materials from import character are OK.

thanks

Could either of you provide me with either an example project where this issue occurs, or screenshots or your material set up so I can reproduce this on my end using a similar android device?

Thanks,

Hi there,

Sorry for the delay, I’ve been away from my computer for a few days.

Yes, there is a warning in the build log when launching on Android. It says cannot compile the landscape material for ES2, will display default material instead.

Here are some material screenshots. Note that the textures are the grass, gravel and rock textures from the starter content. Everything else is standard, other than my LandscpeCoords node which has a mapping scale of 5 applied (as shown in second image)

I wonder if you’re hitting the ES2 texture limit (it’s only 8 :frowning: ). You have 6 textures in your material, the landscape will need one for weights, and I believe static lighting uses another. If I’m forgetting another somewhere then that would put you over the limit.

Does it say why it failed to compile?

EDIT: The docs say you can only use 5 textures on mobile, so having 6 in your material is probably the issue.

Hey there,

I’ve tried to remove two of the textures (the diffuse and normal maps for the rock layer of the material) which leaves me with 4 textures in my material editor… But I still get the same result…

Can you try:

  1. Setting your “layer blend” node’s preview weights to 1.0 for the first layer and 0.01 for the others (this will force all layers to be included in the material).
  2. Pressing the “mobile stats” button on the right of the material editor toolbar.

This should try and compile the material for ES2 immediately and should tell you what the compile error is. If it compiles fine but is using all 8 samplers, then remember that landscape uses one extra for weights that the material editor might not know about.

I have asked about the number of textures used by lighting on mobile and it seems to be worse than I thought: It seems to be two for lighting and two for shadowing, 4 total. With the landscape requiring one for weights, that only leaves 3 textures for the user material under ES2 O.o

You can free one of the shadow texture samplers by going to Project Settings → Engine → Rendering → Mobile and disabling “Enable Combined Static and CSM Shadowing”.

I have been told we are working on ES3 support for an upcoming release, which would allow 16 textures. You would be able to use a feature level switch to remove some of the textures from your material for ES2-only devices (e.g. the normal maps) if you still need to support ES2-only devices, but the vast majority of modern mobile devices are capable of ES3.

Thanks for the answers Gareth.
I tried number 1 above, but this had no effect. Also, I had already tried number 2, but the mobile stats console reports no errors or warnings. It just says that I’m using 6 out of 8 texture samplers available for ES2

So that just left the final solution of reducing my textures to 3 total, which worked, but I guess is not the ideal solution.

It’s good to know that ES3 will fix this. In the meantime, it might be nice if the mobile preview reflected the actual performance of landscape materials on es2 devices… Would be much easier to debug. Would also be nice if there was a warning when compiling the material, that would save even more time!

Thanks again for your help

Just to add on this…

Even when it use texture with the inputs or even texture atlases so to have only 3 base color textures and all other set to none. Even then it cannot paint more than 3 layers on each landscape component…

Which could only work if i subdivided the landscape = add more components which i can add more paint detail but this made the performance laggy…

Is there any solution to this? Or we are capped and we should use meshes to overcome this limitation?
Thnx;-)

Hey GRADgr,

Can you show me the landscape material you are using, and provide me with the device you are testing?

Thank you,

Need some time AndrewHurley when i get to my PC i will. As i remember i was stuck on 3 layers per component, even if those layers where just 3 vector color nodes. Also didnt tested on mobile since i couldnt get any result on ES2 Preview. But i will try to screenshot my mats [ its been a while since i tried it]

I had the same issue with a different set up, I used material functions for each layer, and only one of the landscape materials was giving me the same problem, I just removed the specular value and added it as a constant. I connected the material function through a material function call that went into a break material, and from that I connected each value to the layer blend, everything with a weight value of 1. The material function has to connect to a make material before reaching the output.