> For the complete documentation index, see [llms.txt](https://sylvl.gitbook.io/panoramake-release/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://sylvl.gitbook.io/panoramake-release/setting-up-instance/landscape-caching.md).

# 🎬 Landscape Caching

**Runtime Virtual Textures can be used to reduce the complexity of the shader.**

This can help performance and allow some effects like **Landscape Splines drawing in the terrrain itself**, but the RVTs themselves have a cost associated with them and make the material mostly **static**.&#x20;

{% hint style="warning" %}
**Sometimes not caching the landscape is lighter than using RVTs**, so you'll have to test with and without to judge if it's worth it, depending on the type of your game and target platforms!
{% endhint %}

## 🎬 [Creating the Runtime Virtual Textures](https://youtu.be/fYqTLRc02Kg?t=244)

{% hint style="info" %}
Virtual Texture Support needs to be enabled in your project.

See [Installation](https://sylvl.gitbook.io/panoramake-release/introduction/installation#enabling-virtual-textures-for-your-project) for info on how to set them up.
{% endhint %}

First, Create the **Runtime Virtual Textures** that will be used.\
**For Caching, at least the Color VT is mandatory for it to work,** other additional VTs may not be needed depending on your needs.

**Open the principal color VT and set its "Virtual Texture content" to "Base Color, Specular, Roughness, Normal".**\
**Recommended default values for the Sizes are 12-2-2.** &#x20;

**If you want to use VTs for World Height, open the one for it and set it to "World Height".**\
Recommended default values for the Sizes are 8-2-2. &#x20;

**If you want to use VTs for Nanite Displacement, open the one for it and set it to "Displacement".**\
Recommended default values for the Sizes are 10-2-2. &#x20;

![<- Color | Displacement for Nanite (5.4+) | Height ->
Good base values. ](/files/GfkbsmLSeY5bGsCq3125)

Then, place Runtime Virtual Texture Volumes for each of the VTs in your world. \
In the Details panel, look for "Virtual Texture" and select the one you need, then click **Set Bounds**.

<figure><img src="/files/CM2QJZtLFE1UdfUztmlz" alt=""><figcaption><p>Correctly set VT Volume.</p></figcaption></figure>

Do that for each of the volumes you need.

Then, click on your Landscape, and add the Virtual Textures needed in the "Draw in Virtual Textures"  zone of its details as the screen below shows.

{% hint style="info" %}
If the Landscape is using **World Partition** you'll have to do this with the Landscape and all its Streaming Proxies selected (if on 5.1 or 5.2).

On 5.3+ you don't need to, you can set these values on the main Landscape and the proxies will follow it.
{% endhint %}

<figure><img src="/files/MScv1s1YG8K50TfZ13tT" alt=""><figcaption><p>End result.</p></figcaption></figure>

## Applying the Virtual Textures

Finally, In the Builder interface, enable the use of Virtual Texturing caching in the Global options, for the Material and the Displacement if it's used.

Only caching one of the 2 options won't provide the full optimisations, but there may be cases where only one is wanted.

<figure><img src="/files/xIqcM89rk6IFOc87K5VL" alt=""><figcaption><p>The second "Displacement" slot shows only if Nanite Tessellation is available and used.</p></figcaption></figure>

You can click the wand button to automatically select the Landscape's Virtual Texture, or select it manually by clicking its thumbnail.

![Make sure to select the good Virtual Texture if you select it manually.](/files/2AXCzmBvcrC3ZRFPpH5A)

**Done !**\
Now your Instance can use Virtual Texture Caching to improve its complexity !

<figure><img src="/files/eP3mPezyYTGyStWUyIj0" alt=""><figcaption><p>Full Landscape Material (8 Sub-Layers used)</p></figcaption></figure>

<div><figure><img src="/files/bd4m09Sx5tKdBtQHBO1B" alt=""><figcaption><p>Uncached</p></figcaption></figure> <figure><img src="/files/G1j0MIh4wU30dprUdWcj" alt=""><figcaption><p>Cached</p></figcaption></figure></div>

## Exclude Layers from caching

Caching works by setting the Instance fully static. But, some features do not work when cached.\
So, you can tick the "**Exclude from Caching**" option in the Material settings to keep a Sub-Layer uncached.

<figure><img src="/files/eALRwdjfHrlP4G2vVa1L" alt=""><figcaption></figcaption></figure>

These features cannot work when cached :

* Parallax Occlusion Mapping

However, other material features are taken into the caching when enabled and are as such free:

* Triplanar Mapping
* UV Tiling Variance

{% hint style="warning" %}
Uncaching a Layer has an impact on shader complexity.
{% endhint %}

Even though only one Sub-Layer is uncached out of four for example, it's going to have something like more than half of the uncached shader complexity.

Depending on your use case you may need to uncache some layers (Water Layers/Sparkles for example.)

<div><figure><img src="/files/bd4m09Sx5tKdBtQHBO1B" alt=""><figcaption><p>Uncached</p></figcaption></figure> <figure><img src="/files/hccsYImfwOw2bgDgqABk" alt=""><figcaption><p>Partially Uncached (1 out of 8)</p></figcaption></figure></div>


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://sylvl.gitbook.io/panoramake-release/setting-up-instance/landscape-caching.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
