← Back to Blog optimization

Runtime Virtual Textures in UE5: blend terrain and mesh materials

By BitSoul Team7/10/2026Updated 8/2/20265 min read57 views
Runtime Virtual Textures in UE5: blend terrain and mesh materials

Runtime Virtual Textures solve a persistent frustration in UE5 environment work: when you drop a static mesh onto a landscape, the hard seam between the mesh base and the ground texture looks instantly fake. RVT removes that seam by projecting the landscape's own material onto the mesh surface — and it does it without extra draw calls.

What Runtime Virtual Textures do (and why they matter)

A Runtime Virtual Texture (RVT) is a texture that is written to at runtime by one actor and read by others. In the classic terrain use case, the Landscape actor writes its blended material — dirt, grass, mud, rock — into a virtual texture cache. Static meshes like rocks, ruins, fallen logs, or environmental props then sample from that same cache, inheriting the exact ground colour beneath them.

The result is natural contact shadowing, material continuity, and zero artist intervention every time you move a prop. Before RVT, environment artists patched seams manually with decals, vertex painting, or bespoke blending shaders. RVT replaces all of that with one system.

Key concepts:

Setting up RVT in Unreal Engine 5

Setting up RVT in Unreal Engine 5 — illustrated

Enable the plugin and project settings

  1. Open Edit → Plugins and search "Virtual Texture". Enable Virtual Texture Support (it may already be on in UE5.3+). Restart the editor.
  2. In Project Settings → Engine → Rendering, confirm Enable Virtual Texture Support is checked and Enable Virtual Texture Lightmaps is on if you use static lighting.

Create the RVT asset

  1. In the Content Browser, right-click → Textures → Runtime Virtual Texture
  2. Set dimensions to match your landscape scale. A 4096×4096 virtual texture works for most mid-size terrains.
  3. Set Tile Size to 256 and enable Clear Color compression for base colour channels.

Wire the Landscape material

Open your Landscape Material and add a Runtime Virtual Texture Output node. Connect:

Assign your RVT asset to the node.

Add the RVT Volume

Drag a Runtime Virtual Texture Volume actor into your level. Assign the same RVT asset. Scale the volume to cover your landscape bounds exactly — use Set Bounds to Landscape on the volume's details panel.

Enable on static meshes

Select any static mesh you want to receive landscape blending. In Details → Virtual Texture, check Draw in Virtual Texture. In the mesh's material, add a Runtime Virtual Texture Sample node and feed its Base Color output into a Blend Material Attributes node, lerped against the prop's own texture by a vertical fade mask. A simple `WorldPosition.Z` gradient makes the blend height-dependent, fading from pure landscape colour at ground level to the prop's own material higher up.

Blending BitSoul GLB props with terrain

Blending BitSoul GLB props with terrain — illustrated

GLB files from BitSoul's marketplace import cleanly into UE5 via File → Import into Level. Once imported:

  1. Open the auto-generated material in the Material Editor.
  2. Add a Runtime Virtual Texture Sample node referencing your RVT asset.
  3. Create a `VT_BlendOpacity` scalar parameter — expose it so you can tune per-prop in the level.
  4. Use a `Lerp` node: A = prop texture, B = RVT sample, Alpha = blend opacity × a vertical mask.

A simple vertical mask using a Custom HLSL node:

```hlsl
// Custom expression — input: WorldPosition (float3), GroundZ (float), BlendHeight (float)
float mask = clamp((WorldPosition.z - GroundZ) / BlendHeight, 0.0, 1.0);
return 1.0 - mask;
```

Set `GroundZ` as a material parameter driven per-level from a Blueprint so the system adapts to terrain height variation automatically.

Tip for rocks and boulders: use a steeper blend (`BlendHeight` = 30–50 cm). For large structural props — ruins, walls, bridge pylons — increase to 150–200 cm for a more gradual fade.

Instanced meshes: RVT works fully with Instanced Static Meshes and Hierarchical ISMs. The virtual texture sample reads per-pixel world position, so every instance blends independently — a major advantage over vertex colour blending, which requires per-instance paint data.

RVT performance: budgets and common mistakes

| Setting | Recommended value |
|---|---|
| Virtual texture pool size | 512–1024 MB (mid-range PC) |
| Tile size | 256 (balance of update cost vs resident tiles) |
| RVT dimensions | 2048 for small scenes, 4096 for open world |
| Layers per RVT stack | ≤ 3 (Base Color, Normal, packed ORM) |
| Feedback resolution | Half render resolution |

Common mistakes to avoid:

RVT is one of the few techniques where the quality of your base landscape material pays dividends across every prop in the scene. The cleaner your landscape's PBR stack, the better every asset from BitSoul's marketplace will integrate once the blend is live.

---

*This post is part of the Ultimate Guide to Free 3D Game Assets — BitSoul's complete reference for formats, texturing, rigging, optimization, and engine integration.*

Tags: unreal optimization texturing tutorials workflow game-assets 3d-models

Skip the modelling — download it instead

A free BitSoul account gets you 2 game-ready models every month plus 25 AI Engine credits to generate one of your own, no card required. Clean topology, PBR textures, and GLB downloads that drop straight into Unreal, Unity, Godot or Blender — plus OBJ and 3D-printable STL export.

Create a free account → Browse 846 models