{"id":432,"date":"2026-10-18T07:49:37","date_gmt":"2026-10-18T07:49:37","guid":{"rendered":"https:\/\/evermore-laboratory.com\/?p=432"},"modified":"2026-10-24T08:17:49","modified_gmt":"2026-10-24T08:17:49","slug":"der-boden-auf-dem-alles-wachst","status":"publish","type":"post","link":"https:\/\/evermore-laboratory.com\/index.php\/2026\/10\/18\/der-boden-auf-dem-alles-wachst\/","title":{"rendered":"Der Boden auf dem alles w\u00e4chst"},"content":{"rendered":"\n<!-- Eintrag 05 \u00b7 Protokoll \u00b7 Evermore Laboratory -->\n<!-- title und h1 werden vom Blog-System selbst gerendert und hier bewusst weggelassen -->\n<!-- Vorschlag Titel: Der Boden, auf dem alles w\u00e4chst -->\n<!-- Stand: 2026-10-24, aktualisiert mit Abschluss von Section 4 (Confluence) -->\n\n<style>\n  .el-post {\n    --bg: #0a0d0b;\n    --fg: #d9e0da;\n    --muted: #9aa39c;\n    --accent: #5dd67f;\n    --card-border: #1e2620;\n    color: var(--fg);\n    font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif;\n    line-height: 1.7;\n    font-size: 17px;\n    max-width: 720px;\n  }\n\n  .el-post .el-kicker {\n    color: var(--accent);\n    font-size: 0.78rem;\n    font-weight: 600;\n    letter-spacing: 0.18em;\n    text-transform: uppercase;\n    margin: 0 0 1.6rem;\n  }\n\n  .el-post .el-intro {\n    border-left: 3px solid var(--accent);\n    padding: 0.2rem 0 0.2rem 1.4rem;\n    margin: 0 0 2.2rem;\n    font-size: 1.28rem;\n    font-weight: 600;\n    line-height: 1.5;\n  }\n\n  .el-post p {\n    margin: 0 0 1.4rem;\n  }\n\n  .el-post .el-accent {\n    color: var(--accent);\n  }\n\n  .el-post em {\n    font-style: italic;\n  }\n\n  .el-post .el-figure {\n    margin: 2.2rem 0;\n  }\n\n  .el-post .el-figure img {\n    display: block;\n    width: 100%;\n    height: auto;\n    border-radius: 12px;\n    border: 1px solid var(--card-border);\n  }\n\n  .el-post .el-figure figcaption {\n    color: var(--muted);\n    font-size: 0.86rem;\n    margin-top: 0.7rem;\n    line-height: 1.5;\n  }\n\n  .el-post .el-figure figcaption strong {\n    color: var(--accent);\n    font-weight: 600;\n  }\n\n  .el-post .el-phase .el-figure,\n  .el-post .el-card .el-figure {\n    margin: 0.4rem 0 1.2rem;\n  }\n\n  .el-post .el-phase {\n    border-left: 1px solid var(--card-border);\n    padding: 0 0 0 1.4rem;\n    margin: 0 0 1.8rem;\n  }\n\n  .el-post .el-phase-head {\n    color: var(--accent);\n    font-size: 0.82rem;\n    font-weight: 600;\n    letter-spacing: 0.14em;\n    text-transform: uppercase;\n    margin: 0 0 0.6rem;\n  }\n\n  .el-post .el-phase-head .el-dash {\n    color: var(--muted);\n    font-weight: 400;\n  }\n\n  .el-post .el-card {\n    border: 1px solid var(--card-border);\n    border-radius: 12px;\n    padding: 1.5rem 1.7rem 0.4rem;\n    margin: 2.4rem 0;\n    background: rgba(255, 255, 255, 0.012);\n  }\n\n  .el-post .el-card-head {\n    color: var(--accent);\n    font-size: 0.82rem;\n    font-weight: 600;\n    letter-spacing: 0.14em;\n    text-transform: uppercase;\n    margin: 0 0 1rem;\n  }\n\n  .el-post .el-card-head .el-dash {\n    color: var(--muted);\n    font-weight: 400;\n  }\n\n  .el-post .el-byline {\n    color: var(--muted);\n    font-size: 0.86rem;\n    letter-spacing: 0.04em;\n    margin-top: 2.8rem;\n    padding-top: 1.4rem;\n    border-top: 1px solid var(--card-border);\n  }\n\n  .el-post code {\n    font-family: ui-monospace, SFMono-Regular, Consolas, \"Liberation Mono\", monospace;\n    font-size: 0.86em;\n    color: var(--accent);\n    background: rgba(93, 214, 127, 0.08);\n    border-radius: 4px;\n    padding: 0.1em 0.35em;\n  }\n\n  .el-post .el-table {\n    width: 100%;\n    border-collapse: collapse;\n    margin: 0.4rem 0 1.4rem;\n    font-size: 0.95rem;\n  }\n\n  .el-post .el-table th,\n  .el-post .el-table td {\n    text-align: left;\n    padding: 0.55rem 0.8rem;\n    border-bottom: 1px solid var(--card-border);\n  }\n\n  .el-post .el-table th {\n    color: var(--muted);\n    font-weight: 600;\n    font-size: 0.78rem;\n    letter-spacing: 0.1em;\n    text-transform: uppercase;\n  }\n\n  .el-post .el-table td:last-child {\n    color: var(--accent);\n  }\n<\/style>\n\n\n<div class=\"el-post\">\n\n  <p class=\"el-kicker\">Eintrag 05 \u00b7 Protokoll<\/p>\n\n  <p class=\"el-intro\">\n    Zum ersten Mal steht in der Engine eine Welt, die man ansehen kann: Strand,\n    Klippen, Wiese und Heide. <span class=\"el-accent\">Was sie kostet, zeigt der\n    Viewport nicht.<\/span>\n  <\/p>\n\n  <!-- Bild: Intro -->\n  <figure class=\"el-figure\"><img decoding=\"async\" src=\"https:\/\/evermore-laboratory.com\/wp-content\/uploads\/2026\/10\/0E84DDF0-0D7F-4ED6-A215-997CD66C4E4B.png\" alt=\"Erste Map von Evermore in Unreal Engine 5: Wiese mit H\u00fcgeln und Spielfigur\" loading=\"lazy\" onerror=\"this.parentNode.style.display='none'\"><\/figure>\n\n  <p>\n    Eintrag 02 endete mit der Frage, ob das Fundament tr\u00e4gt, wenn das Survival\n    Framework anf\u00e4ngt, echte Systeme zu stapeln. Inzwischen ist der Map-Abschnitt\n    des Kurses abgeschlossen, offen ist nur noch das Quiz. Den Stolperer, den ich\n    damals angek\u00fcndigt hatte, gab es tats\u00e4chlich. Er kam an einer Stelle, mit der\n    ich nicht gerechnet hatte: im Gras.\n  <\/p>\n\n  <p>\n    Mit diesem Eintrag bekommt das Protokoll eine feste Ordnung. Der Weg zu\n    Evermore ist in sechs Bauabschnitte geteilt, ich nenne sie Staffeln.\n    <span class=\"el-accent\">Staffel 1 war das Fundament<\/span>, also der\n    Beginner-Kurs aus Eintrag 02. Jetzt l\u00e4uft <span class=\"el-accent\">Staffel 2,\n    das Ger\u00fcst<\/span>. Eric Ruts&#8217; Survival Framework liefert Map, Inventar,\n    Crafting und Survival-Werte, und auf diese Welt werden sp\u00e4ter die Agenten\n    gesetzt. Danach folgen Bausteine aus dem alten Smartpoly-Kurs, ihre\n    Integration ins neue Ger\u00fcst, die \u00dcbergabe an die KI und zuletzt die\n    Erweiterung \u00fcber Pipelines. Jeder Eintrag nennt ab jetzt seinen Abschnitt und\n    das, was f\u00fcrs Endprojekt noch fehlt.\n  <\/p>\n\n  <div class=\"el-phase\">\n    <p class=\"el-phase-head\">Gebaut <span class=\"el-dash\">\u2014 Staffel 2 \u00b7 Map<\/span><\/p>\n    <!-- Bild-Platzhalter: in der Mediathek als eintrag-05-gebaut.png hochladen. Fehlt das Bild, blendet sich der Block aus. -->\n    <figure class=\"el-figure\"><img decoding=\"async\" src=\"https:\/\/evermore-laboratory.com\/wp-content\/uploads\/2026\/10\/eintrag-05-gebaut.png\" alt=\"Strand, Klippen und Heide in Unreal Engine 5.8\" loading=\"lazy\" onerror=\"this.parentNode.style.display='none'\"><\/figure>\n    <p>\n      Grundlage ist eine importierte Heightmap mit einem Landscape Material, das\n      H\u00e4nge, H\u00f6henlagen und gro\u00dffl\u00e4chige Variation selbst verteilt. Darauf liegen\n      inzwischen Strand, Klippen, Gras mit Blumen und Heide, dazu ein erstes\n      Wasser-Volume, Beispiel-Assets und Hintergrundklang.\n    <\/p>\n    <p>\n      F\u00fcr die Heide habe ich das Projekt von Unreal 5.7 auf 5.8 gehoben, weil die\n      Megaplants erst ab dieser Version laufen. Gemessen an den Phasen aus Eintrag\n      04 bleibt das alles Phase 1. Es muss tragen, sch\u00f6n sein muss es noch nicht.\n    <\/p>\n  <\/div>\n\n  <div class=\"el-phase\">\n    <p class=\"el-phase-head\">Gelernt <span class=\"el-dash\">\u2014 Material, Megaplants, Verteilung<\/span><\/p>\n    <!-- Bild-Platzhalter: in der Mediathek als eintrag-05-gelernt.png hochladen. Fehlt das Bild, blendet sich der Block aus. -->\n    <figure class=\"el-figure\"><img decoding=\"async\" src=\"https:\/\/evermore-laboratory.com\/wp-content\/uploads\/2026\/10\/eintrag-05-gelernt.png\" alt=\"Master Material mit Material Functions im Material-Editor\" loading=\"lazy\" onerror=\"this.parentNode.style.display='none'\"><\/figure>\n    <p>\n      F\u00fcr das Terrain brauchte es kein externes Werkzeug. Gaea oder World Machine\n      w\u00e4ren m\u00f6glich gewesen, Heightmap oder Noise direkt in Unreal reichen f\u00fcr\n      den Start. Wichtiger war der Aufbau des Materials: ein Master Material aus\n      wiederverwendbaren Material Functions, von dem jede konkrete Welt nur noch\n      eine Instanz mit eigenen Werten ist. Das ist dasselbe Prinzip wie die\n      Steinaxt aus Eintrag 03, aus der Kupfer, Bronze und Eisen abgeleitet werden.\n    <\/p>\n    <p>\n      Bei den Megaplants hat es gedauert, bis \u00fcberhaupt etwas zu sehen\n      war. Erst wirkte der Ordner im Content Browser leer, weil Assets aus einer\n      neueren Engine-Version von einer \u00e4lteren gar nicht geladen werden. Nach dem\n      Update blieben die Pflanzen grau, bis das Plugin\n      <em>Procedural Vegetation Editor<\/em> und <em>Nanite Foliage\n      (Experimental)<\/em> in den Project Settings aktiv waren.\n    <\/p>\n    <p>\n      Interessant ist, wie die Megaplants gebaut sind. Es sind Skeletal Meshes f\u00fcr\n      dynamischen Wind: Ein Graph im Vegetation Editor erzeugt die Aststruktur samt\n      Skelett und verteilt Zweig-Meshes als Instanzen darauf. Aus wenigen Bausteinen\n      entstehen so viele Varianten, genau wie beim Astsystem, das f\u00fcr Evermore\n      geplant ist. Weil packaged Builds mit Skeletal-Megaplants laut Forum teils\n      abst\u00fcrzen, habe ich die Heide per <em>Make Static Mesh<\/em> umgewandelt und\n      so im Landscape Grass Type eingebunden.\n    <\/p>\n    <p>\n      Dabei wurde klar, dass Unreal drei Wege kennt, Pflanzen zu verteilen. Der\n      Landscape Grass Type erzeugt Static Meshes ohne Kollision rund um die Kamera\n      und taugt nur als Deko. Im Foliage Mode wird von Hand gemalt, daf\u00fcr sind die\n      Instanzen dauerhaft und kollidieren. PCG verteilt regelbasiert nach\n      Landscape-Layer, ebenfalls mit dauerhaften Instanzen.\n      <span class=\"el-accent\">F\u00fcr B\u00e4ume und Ressourcen, die Agenten sp\u00e4ter finden\n      und ernten sollen, ist PCG der Weg.<\/span>\n    <\/p>\n  <\/div>\n\n  <div class=\"el-phase\">\n    <p class=\"el-phase-head\">Gemessen <span class=\"el-dash\">\u2014 Lumen Surface Cache<\/span><\/p>\n    <!-- Bild-Platzhalter: in der Mediathek als eintrag-05-gemessen.png hochladen. Fehlt das Bild, blendet sich der Block aus. -->\n    <figure class=\"el-figure\"><img decoding=\"async\" src=\"https:\/\/evermore-laboratory.com\/wp-content\/uploads\/2026\/10\/eintrag-05-gemessen.png\" alt=\"Konsolenausgabe von r.LumenScene.DumpStats in Unreal Engine\" loading=\"lazy\" onerror=\"this.parentNode.style.display='none'\"><\/figure>\n    <p>\n      Mit der Wiese kam die Lumen-Warnung <code>Surface cache atlas\n      oversubscribed<\/code>. Im Viewport sah alles normal aus, die Ursache lie\u00df sich\n      nur \u00fcber Konsole und Log eingrenzen. Der Atlas selbst war in Ordnung. Voll\n      war er wegen der Lumen Mesh Cards der Grashalme, jeder Halm brachte eigene\n      Karten mit.\n    <\/p>\n    <p>\n      Der Fix war eine einzige Einstellung: <code>Max Lumen Mesh Cards = 0<\/code>\n      in den Build Settings der Gras-Meshes.\n    <\/p>\n    <table class=\"el-table\">\n      <thead>\n        <tr><th>Messwert<\/th><th>Vorher<\/th><th>Nachher<\/th><\/tr>\n      <\/thead>\n      <tbody>\n        <tr><td>Lumen Mesh Cards<\/td><td>60.667<\/td><td>13<\/td><\/tr>\n        <tr><td>Auslastung Surface Cache<\/td><td>\u00fcber 100 %<\/td><td>6,8 %<\/td><\/tr>\n      <\/tbody>\n    <\/table>\n    <p>\n      Zwei Dinge haben dabei Zeit gekostet. \u00c4nderungen an Static Meshes greifen\n      erst, wenn der Mesh-Editor geschlossen oder <code>r.Grass.FlushCache<\/code>\n      ausgef\u00fchrt wird. Und die Ausgabe von <code>r.LumenScene.DumpStats 1<\/code>\n      erscheint erst nach dem n\u00e4chsten gerenderten Frame. Konsolenbefehle gebe ich\n      deshalb einzeln ein.\n    <\/p>\n    <p>\n      DumpStats zeigte noch etwas: rund 8,8 Millionen Primitive groups mit etwa\n      770 MB RAM. Das sind die Gras-Instanzen selbst. Die Wiese ist also weiter\n      teuer, nur an einer anderen Stelle.\n    <\/p>\n  <\/div>\n\n  <div class=\"el-phase\">\n    <p class=\"el-phase-head\">Fehlt noch <span class=\"el-dash\">\u2014 f\u00fcrs Endprojekt<\/span><\/p>\n    <!-- Bild-Platzhalter: in der Mediathek als eintrag-05-fehlt-noch.png hochladen. Fehlt das Bild, blendet sich der Block aus. -->\n    <figure class=\"el-figure\"><img decoding=\"async\" src=\"https:\/\/evermore-laboratory.com\/wp-content\/uploads\/2026\/10\/eintrag-05-fehlt-noch.png\" alt=\"B\u00e4ume als Foliage auf der Map\" loading=\"lazy\" onerror=\"this.parentNode.style.display='none'\"><\/figure>\n    <p>\n      B\u00e4ume und B\u00fcsche sind im Moment Dekoration. Ein Agent kann nichts ernten,\n      was nur gezeichnet ist. Bei Interaktion m\u00fcssen sie gegen Blueprint Actors\n      getauscht werden, die fallen und verschwinden k\u00f6nnen, ohne dass die\n      Performance der Foliage verloren geht. Das System daf\u00fcr stammt aus dem\n      Smartpoly-Kurs, der damit f\u00fcr Staffel 3 und 4 zum Ersatzteillager wird.\n      Verteilt werden die Ressourcen \u00fcber PCG. Dazu kommen Sammel-Animationen und\n      Sounds.\n    <\/p>\n    <p>\n      Die Map selbst wird zur Insel: Rand unter den Meeresspiegel, Ozean\n      drumherum. Am Strand fehlen Nanite-Displacement, ein feuchter Streifen am\n      Wasser, Kiesel, Treibholz und Strandhafer an der Graskante, auf den Klippen\n      fehlen Steine.\n    <\/p>\n  <\/div>\n\n  <div class=\"el-card\">\n    <p class=\"el-card-head\">Frage <span class=\"el-dash\">\u2014 offen<\/span><\/p>\n    <!-- Bild-Platzhalter: in der Mediathek als eintrag-05-frage.png hochladen. Fehlt das Bild, blendet sich der Block aus. -->\n    <figure class=\"el-figure\"><img decoding=\"async\" src=\"https:\/\/evermore-laboratory.com\/wp-content\/uploads\/2026\/10\/eintrag-05-frage.png\" alt=\"Frage\" loading=\"lazy\" onerror=\"this.parentNode.style.display='none'\"><\/figure>\n    <p>\n      Die Probe aus Eintrag 02 steht noch aus. K\u00f6nnte ich dieses Material ohne\n      Video neu aufbauen, oder w\u00fcrde ich es nur wiedererkennen?\n    <\/p>\n    <p>\n      Und wie viel Gras vertr\u00e4gt die Szene, wenn B\u00e4ume als Actors, Wasser und\n      sp\u00e4ter Agenten dazukommen? Die 8,8 Millionen Primitive groups von heute sind\n      daf\u00fcr der Ausgangswert.\n    <\/p>\n  <\/div>\n\n  <div class=\"el-card\">\n    <p class=\"el-card-head\">Ansatz <span class=\"el-dash\">\u2014 gew\u00e4hlt<\/span><\/p>\n    <!-- Bild-Platzhalter: in der Mediathek als eintrag-05-ansatz.png hochladen. Fehlt das Bild, blendet sich der Block aus. -->\n    <figure class=\"el-figure\"><img decoding=\"async\" src=\"https:\/\/evermore-laboratory.com\/wp-content\/uploads\/2026\/10\/eintrag-05-ansatz.png\" alt=\"Ansatz\" loading=\"lazy\" onerror=\"this.parentNode.style.display='none'\"><\/figure>\n    <p>\n      Zuerst wird das Gras verschlankt: Distance Field Lighting im Grass Type aus,\n      Cull Distance und Dichte runter, danach mit DumpStats nachmessen. Dann folgt\n      die Insel. Ernten und F\u00e4llen kommen geschlossen in Staffel 3 und 4, damit\n      zwei Kursprojekte nicht ineinanderwachsen, bevor eines davon steht.\n    <\/p>\n  <\/div>\n\n  <div class=\"el-card\">\n    <p class=\"el-card-head\">Erwartung <span class=\"el-dash\">\u2014 notiert<\/span><\/p>\n    <!-- Bild-Platzhalter: in der Mediathek als eintrag-05-erwartung.png hochladen. Fehlt das Bild, blendet sich der Block aus. -->\n    <figure class=\"el-figure\"><img decoding=\"async\" src=\"https:\/\/evermore-laboratory.com\/wp-content\/uploads\/2026\/10\/eintrag-05-erwartung.png\" alt=\"Erwartung\" loading=\"lazy\" onerror=\"this.parentNode.style.display='none'\"><\/figure>\n    <p>\n      Megaplants und Vegetation Editor sind experimentell. Ich rechne damit, dass\n      ein sp\u00e4teres Engine-Update an dieser Stelle wieder etwas bricht, deshalb\n      bleibt die Heide vorerst ein Static Mesh.\n    <\/p>\n    <p>\n      Den n\u00e4chsten gr\u00f6\u00dferen Pr\u00fcfstein erwarte ich dort, wo Foliage aus dem einen\n      Kurs auf das Ernten aus dem anderen trifft.\n    <\/p>\n  <\/div>\n\n  <div class=\"el-card\">\n    <p class=\"el-card-head\">Beobachtung <span class=\"el-dash\">\u2014 folgt<\/span><\/p>\n    <!-- Bild-Platzhalter: in der Mediathek als eintrag-05-beobachtung.png hochladen. Fehlt das Bild, blendet sich der Block aus. -->\n    <figure class=\"el-figure\"><img decoding=\"async\" src=\"https:\/\/evermore-laboratory.com\/wp-content\/uploads\/2026\/10\/eintrag-05-beobachtung.png\" alt=\"Beobachtung\" loading=\"lazy\" onerror=\"this.parentNode.style.display='none'\"><\/figure>\n    <p>\n      F\u00fcr die Agenten ist die Map jetzt der Boden. Bewohnbar wird sie, sobald aus\n      Deko-B\u00e4umen Objekte werden, die sie wahrnehmen und nutzen k\u00f6nnen.\n    <\/p>\n    <p>\n      Im n\u00e4chsten Eintrag: das verschlankte Gras mit neuen Messwerten und der Weg\n      zur Insel.\n    <\/p>\n  <\/div>\n\n  <p>Fragen, beobachten, justieren, wiederholen.<\/p>\n\n  <p class=\"el-byline\">Bahamut \u00b7 Eintrag 05 \u00b7 Protokoll eines Versuchs<\/p>\n\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Eintrag 05 \u00b7 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\u00e4gt, wenn das Survival Framework anf\u00e4ngt, echte Systeme zu stapeln. Inzwischen ist der Map-Abschnitt des Kurses abgeschlossen, [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[26],"tags":[],"class_list":["post-432","post","type-post","status-publish","format-standard","hentry","category-ue"],"_links":{"self":[{"href":"https:\/\/evermore-laboratory.com\/index.php\/wp-json\/wp\/v2\/posts\/432","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/evermore-laboratory.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/evermore-laboratory.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/evermore-laboratory.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/evermore-laboratory.com\/index.php\/wp-json\/wp\/v2\/comments?post=432"}],"version-history":[{"count":5,"href":"https:\/\/evermore-laboratory.com\/index.php\/wp-json\/wp\/v2\/posts\/432\/revisions"}],"predecessor-version":[{"id":440,"href":"https:\/\/evermore-laboratory.com\/index.php\/wp-json\/wp\/v2\/posts\/432\/revisions\/440"}],"wp:attachment":[{"href":"https:\/\/evermore-laboratory.com\/index.php\/wp-json\/wp\/v2\/media?parent=432"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/evermore-laboratory.com\/index.php\/wp-json\/wp\/v2\/categories?post=432"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/evermore-laboratory.com\/index.php\/wp-json\/wp\/v2\/tags?post=432"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}