---
description: Limitations of ES3.1 rendering & advices
---

# ES3.1 Limitations Breakdown & Best Pratices

**One of the main limitations of ES3.1 rendering for Materials is that only 16 Texture Samplers are available in total to the user, with 2 taken by Unreal for shadow and reflections rendering.**

As such, Atlasses have to be used on Mobile, and features that use additional textures for their effect have to be used carefully to ensure the Instance dosen't use more than the maximum of 16 Texture Samplers.

Shader Model 5/6, which is used for Desktop (High-End) rendering dosen't suffer from this limitation.

{% hint style="warning" %}
**Correction Layers are NOT available on ES3.1 due to sampler limitations !**

Use manually drawn sub-layers instead if possible, or **baked** Landscape Splines !
{% endhint %}

## Best Practices

* **Avoid using Base Color, Normal maps, ORM maps when not needed.**\
  \
  They need to be sampled from an Atlas to keep the numbers of samplers low, but that **requires additionnal processing which makes them slower** to process than regular standalone Texture Samplers.\
  \
  As such, you should disable the rendering of maps if uniform values can be used on Mobile instead without a noticeable visual impact. \
  \
  **As a hint, these cases can include for example :** \
  \- Very subtle Sub-Layers used to break uniformity of surfaces (see image example below)\
  \- Low-contrast texture maps\
  \- Sub-Layers barely visible under foliage\
  \- etc.\
  \
  The images below shows the difference on a subtle Sub-Layer (the dirt blobs on the ground), textured using a color map (Image 1) and with an uniform color instead (Image 2).\
  The uniform color is more efficient, and the difference is minimal.

<div><figure><img src="https://3751470283-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9KuznrlYB4kqrVq5qJMd%2Fuploads%2FZRafqJ8KRURdbTkeNg4u%2FEXAMPLE1_Texture.png?alt=media&#x26;token=c0b59437-a0b4-4395-bb8c-ca5f9ee03d2a" alt=""><figcaption><p>Using a color texture</p></figcaption></figure> <figure><img src="https://3751470283-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9KuznrlYB4kqrVq5qJMd%2Fuploads%2FrJciV6jRrAi6Iwf6TFRd%2Fimage.png?alt=media&#x26;token=3794e365-bd55-4719-a2f5-e44c8c928202" alt=""><figcaption><p>Using an uniform color</p></figcaption></figure></div>

You should take a look at all your used textures and determine if they can easely be swapped for values instead.

* **Grass Only Sub-Layers are basically free**

You can keep all the Grass Only Sub-Layers as is, as they are processed separately from the rest of the Instance.&#x20;

The only cost they have is the Mask that defines them.

