Deine Welt streamt jetzt — das war letzte Woche. Zeit, was reinzustellen. Du drückst Shift+3, ziehst einen Baum in die Palette, malst einen Wald, und deine Framerate fällt von der Klippe.
Foliage Mode hat viele Einstellungen. Sechs davon entscheiden, ob dein Wald shippt.
Cull Distance — und das Fade, das dir fehlt
End Cull Distance findet jeder: ab dieser Distanz wird Foliage nicht mehr gezeichnet. Zu niedrig und Bäume ploppen bei 20 Metern raus. Auf 0 (nie cullen) und du renderst den kompletten Wald, immer.
Was die meisten übersehen: Start Cull Distance. Foliage wird in Clustern gezeichnet, und beim Erreichen von End Cull verschwindet ein ganzer Cluster auf einen Schlag — ein sichtbarer Waldbrocken, der wegblinkt. Setz Start unter End und nutz den PerInstanceFadeAmount-Node in deinem Material: er geht von 1.0 bei Start auf 0.0 bei End. Auf Opacity oder einen Masked-Wert gelegt, faden Instanzen statt zu blinken.
Zwei Einstellungen und ein Material-Node. Das ist der Unterschied zwischen "sieht aus wie ein Spiel" und "sieht aus wie ein Build".
Collision: die geschenkten 40%
Jede Gras-Instanz mit Collision ist ein Collision-Primitive, um das sich die Physik-Szene kümmern muss. Zehntausend Grashalme, zehntausend Primitives — und nichts in deinem Spiel wird sie je berühren.
Setz Gras, Blumen und kleines Bodenzeug im Foliage Type auf NoCollision. Bäume behalten Collision — und selbst dann eine simple Capsule, kein Per-Poly.
Es gibt einen zweiten Hebel: LOD For Collision am Static Mesh. Default ist 0, heißt: Collision kommt vom höchsten LOD. Schieb es auf ein billigeres LOD und du sparst Speicher. Schieb es zu weit und du bekommst unsichtbare Löcher und Dinge, die durchfallen. Bewusst setzen, nicht blind.
LODs und die Ein-Element-Regel
Foliage-Instanzen rendern als Cluster in einem Draw Call — daher kommt die Performance. Das hat Anforderungen:
- Dein Static Mesh sollte einen Eintrag im Elements-Array unter LOD0 haben. Mehrere Materialien auf einem Foliage-Mesh vervielfachen deine Draw Calls.
- Der ganze Cluster wechselt das LOD gleichzeitig, nicht pro Instanz. LOD-Distanzen, die an einem einzelnen Mesh gut aussehen, können auf einem gemalten Feld falsch wirken.
- Wenn du Licht bakst: Light- und Shadowmaps werden über alle LOD-Level geteilt, also brauchen alle LODs dasselbe UV-Unwrapping. Falsch gemacht und du hast schwarze Meshes nach dem Light-Build.
Density und Radius, ehrlich
Der Density-Slider ist ein Mal-Parameter, keine Performance-Einstellung — aber hier verbrennen Anfänger ihr Budget. Ein dichtes Grasfeld bei Density 400 ist nicht viermal überzeugender als eins bei 100; es ist viermal so viele Instanzen für einen Unterschied, den der Spieler nicht benennen kann.
Radius verhindert, dass Instanzen aufeinander spawnen. Setz ihn ungefähr auf den Footprint des Meshes. Radius null plus hohe Density ist der Weg zu 3000 Blumen auf einem Quadratmeter.
Was sich mit Nanite ändert
Hier führen dich 2022er-Tutorials in die Irre. Zwei Dinge:
Nanite-Foliage-Meshes sind von Cull Distance und Instance-Fading nicht betroffen. Die ganze sorgfältige Start/End-Cull-Arbeit tut für sie nichts. Nanite macht sein eigenes Culling und LOD.
Nanite verschiebt deinen Flaschenhals auf Materialien. Nanite eliminiert Overdraw für Material-Kosten, weil nur sichtbare Pixel geshadet werden — aber jede maskierte Blatt-Karte kostet weiter Cluster, und ein dichter Wald sprengt ein Cluster-Budget schnell. Nanite-Bäume komprimieren außerdem schlechter als solide Meshes wie Felsen bei gleicher Dreieckszahl, der Speicher steigt also.
Wenn du auf UE 5.7 oder neuer bist, lohnt ein Blick auf Nanite Foliage: es ersetzt alpha-maskierte Blattkarten durch echte Geometrie, voxelisiert entfernte Vegetation statt sie zu billboarden, und macht Wind über Nanite Skinning (pro Bone) statt per-Vertex-WPO. In der 5.7-Preview war es noch experimentell — prüf den aktuellen Stand, bevor du einen Wald darauf baust.
Plugin tip
Painting ist großartig für organische Streuung und schlecht für alles mit Absicht — eine Baumreihe entlang einer Straße, Hecken, eine Spur aus Markierungen. Das ist jedes Mal Handarbeit oder ein selbstgebautes Spline-Blueprint.
FoxSpline macht Verteilung entlang von Splines als Nodes: Spacing, Offsets, Ausrichtung, Lanes. Optional, aber genau der Teil deiner Welt, den Painting wirklich nicht kann.Häufige Fehler
- Collision auf Gras. Geschenkte Performance, immer. NoCollision.
- End Cull ohne Start Cull. Cluster blinken weg. Fade einbauen.
- Mehrere Material-Elemente auf einem Foliage-Mesh. Zerstört den Ein-Draw-Call-Gewinn.
- Cull-Distance-Ratschlägen bei Nanite-Meshes folgen. Bringt nichts. Anderes System.
- Density hochdrehen statt Variation einbauen. Drei Mesh-Varianten bei Density 100 schlagen eine bei 400 — und sind billiger.
- Foliage im Editor profilen. Editor- und Packaged-Performance unterscheiden sich deutlich. Immer den Build testen.
stat Nanite/ die Nanite-Overdraw-Ansicht nicht nutzen. Sonst rätst du. Der Overdraw-Visualizer berücksichtigt maskierte Materialien — schau ihn dir an, bevor du die GPU beschuldigst.
30-Sekunden-Recap
Start Cull+End Cull+PerInstanceFadeAmount— faden statt blinken.- Gras und Kleinzeug: NoCollision. Bäume: nur simple Collision.
- Ein Material-Element pro Foliage-Mesh, sonst verlierst du das Draw-Call-Batching.
- Radius verhindert Überlappung; Density ersetzt keine Variation.
- Nanite-Foliage ignoriert Cull Distance und Fading komplett — und verschiebt die Kosten auf Material und Speicher.
- UE 5.7+ hat Nanite Foliage mit Voxel-LODs und Skinned Wind. Stabilität prüfen bevor du dich festlegst.
- Packaged profilen, nicht PIE.
Nächsten Sonntag: Runtime Virtual Textures — Meshes in die Landschaft blenden, damit Felsen nicht mehr aussehen als würden sie draufstehen.
— Marco
Comments
Leave a comment