Der Boden auf dem alles wächst
Eintrag 05 · Protokoll
Zum ersten Mal steht in der Engine eine Welt, die man ansehen kann: Strand, Klippen, Wiese und Heide. Was sie kostet, zeigt der Viewport nicht.

Eintrag 02 endete mit der Frage, ob das Fundament trägt, wenn das Survival Framework anfängt, echte Systeme zu stapeln. Inzwischen ist der Map-Abschnitt des Kurses abgeschlossen, offen ist nur noch das Quiz. Den Stolperer, den ich damals angekündigt hatte, gab es tatsächlich. Er kam an einer Stelle, mit der ich nicht gerechnet hatte: im Gras.
Mit diesem Eintrag bekommt das Protokoll eine feste Ordnung. Der Weg zu Evermore ist in sechs Bauabschnitte geteilt, ich nenne sie Staffeln. Staffel 1 war das Fundament, also der Beginner-Kurs aus Eintrag 02. Jetzt läuft Staffel 2, das Gerüst. Eric Ruts’ Survival Framework liefert Map, Inventar, Crafting und Survival-Werte, und auf diese Welt werden später die Agenten gesetzt. Danach folgen Bausteine aus dem alten Smartpoly-Kurs, ihre Integration ins neue Gerüst, die Übergabe an die KI und zuletzt die Erweiterung über Pipelines. Jeder Eintrag nennt ab jetzt seinen Abschnitt und das, was fürs Endprojekt noch fehlt.
Gebaut — Staffel 2 · Map

Grundlage ist eine importierte Heightmap mit einem Landscape Material, das Hänge, Höhenlagen und großflächige Variation selbst verteilt. Darauf liegen inzwischen Strand, Klippen, Gras mit Blumen und Heide, dazu ein erstes Wasser-Volume, Beispiel-Assets und Hintergrundklang.
Für die Heide habe ich das Projekt von Unreal 5.7 auf 5.8 gehoben, weil die Megaplants erst ab dieser Version laufen. Gemessen an den Phasen aus Eintrag 04 bleibt das alles Phase 1. Es muss tragen, schön sein muss es noch nicht.
Gelernt — Material, Megaplants, Verteilung

Für das Terrain brauchte es kein externes Werkzeug. Gaea oder World Machine wären möglich gewesen, Heightmap oder Noise direkt in Unreal reichen für den Start. Wichtiger war der Aufbau des Materials: ein Master Material aus wiederverwendbaren Material Functions, von dem jede konkrete Welt nur noch eine Instanz mit eigenen Werten ist. Das ist dasselbe Prinzip wie die Steinaxt aus Eintrag 03, aus der Kupfer, Bronze und Eisen abgeleitet werden.
Bei den Megaplants hat es gedauert, bis überhaupt etwas zu sehen war. Erst wirkte der Ordner im Content Browser leer, weil Assets aus einer neueren Engine-Version von einer älteren gar nicht geladen werden. Nach dem Update blieben die Pflanzen grau, bis das Plugin Procedural Vegetation Editor und Nanite Foliage (Experimental) in den Project Settings aktiv waren.
Interessant ist, wie die Megaplants gebaut sind. Es sind Skeletal Meshes für dynamischen Wind: Ein Graph im Vegetation Editor erzeugt die Aststruktur samt Skelett und verteilt Zweig-Meshes als Instanzen darauf. Aus wenigen Bausteinen entstehen so viele Varianten, genau wie beim Astsystem, das für Evermore geplant ist. Weil packaged Builds mit Skeletal-Megaplants laut Forum teils abstürzen, habe ich die Heide per Make Static Mesh umgewandelt und so im Landscape Grass Type eingebunden.
Dabei wurde klar, dass Unreal drei Wege kennt, Pflanzen zu verteilen. Der Landscape Grass Type erzeugt Static Meshes ohne Kollision rund um die Kamera und taugt nur als Deko. Im Foliage Mode wird von Hand gemalt, dafür sind die Instanzen dauerhaft und kollidieren. PCG verteilt regelbasiert nach Landscape-Layer, ebenfalls mit dauerhaften Instanzen. Für Bäume und Ressourcen, die Agenten später finden und ernten sollen, ist PCG der Weg.
Gemessen — Lumen Surface Cache

Mit der Wiese kam die Lumen-Warnung Surface cache atlas
oversubscribed. Im Viewport sah alles normal aus, die Ursache ließ sich
nur über Konsole und Log eingrenzen. Der Atlas selbst war in Ordnung. Voll
war er wegen der Lumen Mesh Cards der Grashalme, jeder Halm brachte eigene
Karten mit.
Der Fix war eine einzige Einstellung: Max Lumen Mesh Cards = 0
in den Build Settings der Gras-Meshes.
| Messwert | Vorher | Nachher |
|---|---|---|
| Lumen Mesh Cards | 60.667 | 13 |
| Auslastung Surface Cache | über 100 % | 6,8 % |
Zwei Dinge haben dabei Zeit gekostet. Änderungen an Static Meshes greifen
erst, wenn der Mesh-Editor geschlossen oder r.Grass.FlushCache
ausgeführt wird. Und die Ausgabe von r.LumenScene.DumpStats 1
erscheint erst nach dem nächsten gerenderten Frame. Konsolenbefehle gebe ich
deshalb einzeln ein.
DumpStats zeigte noch etwas: rund 8,8 Millionen Primitive groups mit etwa 770 MB RAM. Das sind die Gras-Instanzen selbst. Die Wiese ist also weiter teuer, nur an einer anderen Stelle.
Fehlt noch — fürs Endprojekt

Bäume und Büsche sind im Moment Dekoration. Ein Agent kann nichts ernten, was nur gezeichnet ist. Bei Interaktion müssen sie gegen Blueprint Actors getauscht werden, die fallen und verschwinden können, ohne dass die Performance der Foliage verloren geht. Das System dafür stammt aus dem Smartpoly-Kurs, der damit für Staffel 3 und 4 zum Ersatzteillager wird. Verteilt werden die Ressourcen über PCG. Dazu kommen Sammel-Animationen und Sounds.
Die Map selbst wird zur Insel: Rand unter den Meeresspiegel, Ozean drumherum. Am Strand fehlen Nanite-Displacement, ein feuchter Streifen am Wasser, Kiesel, Treibholz und Strandhafer an der Graskante, auf den Klippen fehlen Steine.
Frage — offen

Die Probe aus Eintrag 02 steht noch aus. Könnte ich dieses Material ohne Video neu aufbauen, oder würde ich es nur wiedererkennen?
Und wie viel Gras verträgt die Szene, wenn Bäume als Actors, Wasser und später Agenten dazukommen? Die 8,8 Millionen Primitive groups von heute sind dafür der Ausgangswert.
Ansatz — gewählt

Zuerst wird das Gras verschlankt: Distance Field Lighting im Grass Type aus, Cull Distance und Dichte runter, danach mit DumpStats nachmessen. Dann folgt die Insel. Ernten und Fällen kommen geschlossen in Staffel 3 und 4, damit zwei Kursprojekte nicht ineinanderwachsen, bevor eines davon steht.
Erwartung — notiert

Megaplants und Vegetation Editor sind experimentell. Ich rechne damit, dass ein späteres Engine-Update an dieser Stelle wieder etwas bricht, deshalb bleibt die Heide vorerst ein Static Mesh.
Den nächsten größeren Prüfstein erwarte ich dort, wo Foliage aus dem einen Kurs auf das Ernten aus dem anderen trifft.
Beobachtung — folgt

Für die Agenten ist die Map jetzt der Boden. Bewohnbar wird sie, sobald aus Deko-Bäumen Objekte werden, die sie wahrnehmen und nutzen können.
Im nächsten Eintrag: das verschlankte Gras mit neuen Messwerten und der Weg zur Insel.
Fragen, beobachten, justieren, wiederholen.