Du hast eine gestreamte Welt mit Foliage drin, und irgendwas stimmt nicht. Felsen sitzen auf dem Boden mit einer harten Kante am Übergang. Straßen sehen aus wie Decals auf Gras. Klippen haben eine Naht.
Diese Naht ist das, was Runtime Virtual Textures reparieren — und die Reparatur bringt einen Performance-Gewinn mit.
Was RVT eigentlich ist
Dein Landscape-Material läuft per-Pixel, jeden Frame, überall wo die Landschaft sichtbar ist. Ein Layer-Material mit sechs Paint-Layern, Slope-Blending und distanzbasierter Tiling-Reduktion ist teuer, und du bezahlst dauernd dafür.
RVT ändert den Deal: das Landscape-Material rendert in eine Textur, gecached, in einer Auflösung passend zur Nähe. Jetzt läuft der Landscape-Shader, wenn der Cache aktualisiert werden muss — nicht jeden Frame.
Und weil diese Textur existiert, können andere Meshes sie lesen. Das ist das Blending. Dein Fels sampelt die Landschaftsfarbe an seiner eigenen Position und faded am Fuß hinein. Keine Naht.
Setup, der Reihe nach
Die Reihenfolge zählt, und falsch herum bekommst du verwirrende Fehler:
- Project Settings → Virtual Texture Support → an. Editor neu starten. Nicht optional; Virtual Texturing funktioniert vorher nicht.
- Wenn du schon da bist: Auto Virtual Texture Size hoch setzen, falls du normales VT für Texture Samples nicht nutzt — sonst wandeln importierte Texturen still in VT und du wunderst dich später.
- Ein Runtime Virtual Texture-Asset anlegen. Rechtsklick → Materials & Textures → Runtime Virtual Texture. Content Type wählen —
Base Color, Normal, Roughness, Specularist der übliche. - Ein Runtime Virtual Texture Volume ins Level. Virtual Texture auf dein Asset setzen. Mit ausgewähltem Volume auf Set Bounds — nicht nach Augenmaß.
- Am Landscape-Actor: dein RVT in
Draw in Virtual Textureseintragen. - Im Landscape-Material: einen
Runtime Virtual Texture Output-Node einbauen und Base Color / Normal / Roughness / Specular reinfüttern. - Im Mesh-Material, das blenden soll: ein
Runtime Virtual Texture Sample-Node, gegen deine eigene Textur geblendet — über Höhe oder Abstand vom Mesh-Fuß.
Wenn nichts passiert, ist es fast immer Schritt 1 (kein Neustart) oder Schritt 4 (Bounds falsch).
World Height, und warum du ein zweites Volume brauchst
Wenn du höhenbasiertes Blending willst — Fels faded ins Terrain je nach Abstand zum Boden — oder Virtual Heightfield Mesh, brauchst du ein zweites RVT-Asset und Volume mit dem World-Height-Content-Type. Gleiche Bounds. Das erwischt viele, weil das erste Volume funktioniert und der Height-Blend still gar nichts tut.
Der 5.6-Fehler, den du wahrscheinlich siehst
Wer ein Landscape-Material nach 5.6+ migriert, bekommt oft das hier um die Ohren:
CB0
Heißt: du sampelst eine Virtual Texture in genau dem Material, das den RVT-Output schreibt. Zirkulär. Der Fix ist der Runtime Virtual Texture Replace-Node (manchmal VT-Switch genannt) — er lässt das Material einen Pfad nehmen, wenn es ins RVT rendert, und einen anderen im Normalfall. Wenn du ein älteres Landscape-Material hochziehst: plan einen Nachmittag ein.
Wo es sich wirklich lohnt
- Mesh-zu-Landschaft-Blending. Felsen, Klippen, Straßen-Splines, Gebäudefundamente. Die sichtbarste Verbesserung überhaupt.
- Teure Landscape-Materialien. Sechs-Layer-Blend mit Slope-Masken? RVT cached es und deine GPU wertet es nicht mehr jeden Frame neu aus.
- Grasfarbe angleichen. Gras sampelt das Landscape-RVT und nimmt die Farbe des Bodens an, auf dem es wächst. Dein ganzes Foliage-Set sieht nicht mehr aufgeklebt aus.
- Straßen und Wege. Ein Spline-Mesh, das ins RVT schreibt, kann das Gras darunter verdecken. Kein Gras mehr durch Asphalt.
Wo nicht
RVT ist nicht gratis. Es ist ein Textur-Cache: er kostet Speicher, und Cache-Updates kosten Frames, wenn du schnell durch die Welt fährst. Wenn dein Landscape-Material drei Layer hat und simpel ist und du keine Meshes zum Blenden hast, baust du ein System für nichts ein. Kleine Maps mit simplem Terrain: lass es.
Häufige Fehler
- Den Editor-Neustart vergessen nach dem Aktivieren von Virtual Texture Support. Nichts funktioniert, und es gibt keine offensichtliche Meldung.
- Falsche Volume-Bounds. Nimm
Set Boundsgegen die Landschaft. Geschätzte Bounds verschwenden Auflösung an leere Luft. - Ein Volume, wo du zwei brauchst. Color und World Height sind getrennte Assets.
- Das RVT nicht in die
Draw in Virtual Textures-Liste des Landscape-Actors eintragen. Dann schreibt das Material nichts. - RVT-Auflösung zu hoch. Das ist Speicher, und ab einem Punkt siehst du keinen Unterschied. Moderat anfangen.
- Annehmen, Distance-Blending im Landscape-Material funktioniert weiter. RVT ändert, wann und wo das Material ausgewertet wird. Distanzbasierte Tiling-Reduktion ist ein Klassiker, der still aufhört sich zu benehmen.
30-Sekunden-Recap
- RVT cached dein Landscape-Material in eine Textur und lässt Meshes sie lesen.
- Virtual Texture Support an, dann Neustart. Das ist Schritt null.
- RVT-Asset → RVT-Volume mit korrekten Bounds →
Draw in Virtual Texturesam Landscape →RVT Outputim Landscape-Material →RVT Sampleim Mesh-Material. - World-Height-Blending braucht ein zweites Asset und Volume.
- Ab 5.6 fehlerhaft, wenn du VT im RVT-Output sampelst — RVT-Replace-Node nutzen.
- Simples Terrain, keine geblendeten Meshes? Lass es.
Nächsten Sonntag: Instanced Static Meshes — der 10×-Performance-Gewinn, der schon in deinem Projekt liegt, und wann Nanite die ganze Frage erledigt.
— Marco
Comments
Leave a comment