# U5 · Visuelle Neuausrichtung Stand: 2. Oktober 2026 · **Vertical Slice fertig**, Kartenqualität entschieden (**Weg 2 Stufen**). U5 ist die eigentliche Begründung für den Unity-Wechsel. Ziel ist stilisierter Realismus wie Dota 2 und aktuelle MOBAs: PBR-Oberflächen, ausgeformte Details, glaubwürdige Proportionen. Die Silhouetten bleiben klar und aus der Draufsicht auch bei über 100 Einheiten lesbar. ## Vorgaben des Projektinhabers (1. Oktober 2026) - **Reihenfolge unverändert:** erst U3 (HUD) und U4 (Netzwerk), dann U5. Die Modelle werden nicht vorgezogen. - **Stil:** stilisierter Realismus wie Dota 2 und aktuelle MOBAs. Dazu gehören PBR-Oberflächen, ausgeformte Details und glaubwürdige Proportionen. Die Silhouetten bleiben klar und aus der Draufsicht auch bei über 100 Einheiten lesbar. - **Umfang:** Einheiten, Gebäude und Umgebung, also die ganze Welt, nicht nur eine repräsentative Gruppe. - **Weg:** Die Quelle bleiben Blender-Generatoren im Repository mit reproduzierbarem FBX-Export und den U2A-Prüfungen. Dazu kommen gebackene PBR-Texturen (Albedo, Normal, Rauigkeit/Metall, AO). - **Grenze:** Figuren mit handmodellierter Anatomie, Gesichtern und Haaren entstehen nicht prozedural. Sie brauchen Sculpts von Künstlern oder lizenzierte Asset-Bibliotheken. Downloads dafür gibt es nur nach Freigabe und Lizenzprüfung. ## Vertical Slice Eine repräsentative Mid-Lane, auf Zielqualität gebracht: - beide Teamrichtungen, zwei Türme, mindestens ein Ancient sichtbar, - Fluss/Wasser, Vegetation, Felsen, - mehrere normale Einheiten, ein Held, ein Angriffschampion, - die Bossgrotte in sichtbarer Nähe, Kampf-VFX. Nur diese Zone trägt die Zielqualität: - Terrain, Wege, PBR-Materialien, Vegetation, - Beleuchtung, Schatten, Himmel, Nebel, Wasser, - Decals, Partikel, VFX, Color Grading. ## Umsetzung ### U5A · Gebackene PBR-Texturen `tools/blender/bake_pbr.py` (Aufruf `sh tools/blender/bake_pbr.sh`) backt sechs nahtlose Sätze in Blender 5.2 (Cycles, 1 Sample, Emission des Musters; Torus-Mapping für Kantenfluss): | Satz | Verwendung | | --- | --- | | `limestone` | Kluft-Stein, Pflaster, Klippen | | `soil` | Erdreich, Wege | | `bark` | Rinde, Baumstämme | | `leaf` | Laub, Vegetation | | `rock` | Felsen, geschichteter Stein | | `water` | Flusswellen | Jeder Satz liegt in `Assets/Luneraria/Art/Textures/`: - `-albedo-2k.png` — Grundfarbe - `-normal-2k.png` — Tangentialraum-Normal aus dem Höhenfeld (Sobel) - `-orm-2k.png` — R AO, G Rauigkeit, B Metall (Unity-ORM) ### U5B · Surface-Shader und Materialien `Luneraria/Surface` trägt seit U5 die PBR-Karten: - `_AlbedoMap`, `_NormalMap`, `_OrmMap` triplanar wie der Steinsatz, - ORM steuert Rauigkeit, Metall und AO der PBR-Auswertung, - die Welt-Modi (Terrain, Stein, Pflaster, Erde, Rinde, Laub, Wasser) behalten ihr Godot-Aussehen auf dem PBR-Satz, - weiße Kontur-Höhenrelief (`_Relief`) bleibt als zusätzliche Schicht. `LuneMaterialFactory` bindet je Oberfläche den passenden Satz (`PbrForMode`), `LN_Rock` den Felsensatz. ### U5C · Mid-Lane Umgebung und Licht - **Nebel:** `ExponentialSquared`, Dichte 0,0085, Farbe `6a7f96` — Luftfeuchte des Tals. - **Schatten:** Bias 0,02, NormalBias 0,35, Nahebene 0,2 — scharfe Kanten an Türmen und Felsen. - **Post:** ACES, Bloom 0,62 / Threshold 1,15, Kontrast 14, Sättigung 16, Weißabgleich +8/−4, Vignette 0,18. - **Himmel:** prozedural, Tint `2a3d58`, Atmosphäre 0,8, Reflexionen aus dem Himmel. ### U5D · Kampf-VFX und Nachweis - **Trefferblitz** (`LuneUnitView.HitFlashGlow`): der Kern-HitFlash (0,18 s) und der Angriffs-Flash färben die Figur über einen `MaterialPropertyBlock` (warm beim Angriff, weißglühend beim Treffer); die geteilten Team-Materialien bleiben unangetastet. - **Turmblitze** (`LuneMatchView.SyncBolts`): dreipunktiger Funke mit Bogen zur Kamera, Breitenkurve (Mündung → Kern → Spitze), Farbverlauf der Teamfarbe, Überblendung über 0,25 s. ## Nachweis | Beleg | Ort | | --- | --- | | Mid-Lane Übersicht, Türme, Ancient, Grotte, Weitwinkel | `screenshots/u5/mid-lane-*.png` | | Godot G3 Vorher | `../saumwacht-godot/docs/luneraria/screenshots/g3/vorher-1920x1080/` | | Godot G3 Zwischenstand | `../saumwacht-godot/docs/luneraria/screenshots/g3/zwischenstand-1920x1080/` | | U3 Motive (HUD über der Karte) | `screenshots/u3/motive-1920x1080/` | | U2 Weltbilder (Vor-U5-Materialien) | `screenshots/u2b/` | | Leistung | `logs/u5/player-benchmark-macos.json` | Die Kamera der `u5/mid-lane-*`-Bilder folgt der Lage der G3-Motive (Turm, Ancient, Grotte); die Beleuchtung ist bewusst eigenständig gestimmt, nicht pixelgleich nachgebaut. ## Leistung **Player** (macOS, Mono, Release; Apple M5, Metal; 1920 × 1080 im Fenster, VSync aus): Seed 9 in Runde 21, Spieltempo 1×, gemessen ab 10 s Kampf mit `LuneBenchmark`. | Ansicht | Einheiten | fps (Mittel) | Bildzeit Median | p95 | Sim | Views | UI | Hauptthread | | --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | --- | | ganze Karte (Zoom 64) | 116 | 132 | 5,11 ms | 19,38 ms | 0,116 | 0,257 | 0,088 | 3,15 / 4,31 ms | | Mid-Lane nah (Zoom 22) | 63 | 182 | 4,22 ms | 12,90 ms | 0,056 | 0,365 | 0,077 | 2,70 / 3,57 ms | Gegenüber U3 (169 / 218 fps) kostet der PBR-Satz mit Normals, ORM und Nebel etwa 20–25 % Bildrate. Die Mid-Lane bleibt über 120 fps; die Karte über 100 fps. Metal liefert weiter keine GPU-Zeitstempel. Der nächste Hebel sind LOD und Material-Atlanten (U2-Folgerung), nicht die Dreiecke. Rohdaten: `logs/u5/player-benchmark-macos.json`. Befehle siehe [U2-WORLD.md](U2-WORLD.md#leistung). ## Abnahme U5 (Vertical Slice) | Vorgabe | Stand | | --- | --- | | Stil stilisierter Realismus (PBR, Details, Proportionen, klare Silhouetten) | erfüllt im Slice: PBR-Sätze, Normal- und ORM-Maps, Hit- und Angriffs-Flash, Turmfunke | | Blender-Generatoren + reproduzierbarer Export + U2A-Prüfungen | erfüllt: `bake_pbr.py` (nahtlos, Torus-Mapping), bestehende FBX-Pipeline unverändert | | Gebackene PBR-Texturen (Albedo, Normal, Rauigkeit/Metall, AO) | erfüllt: 6 Sätze × Albedo/Normal/ORM | | Umfang Einheiten, Gebäude, Umgebung | Slice bringt die Mid-Lane (Terrain, Wege, PBR, Vegetation, Licht, Nebel, Wasser, VFX) auf Zielqualität; die übrige Karte behält den U2-Stand | | Grenze: keine prozeduralen Gesichter/Haare/Anatomie | eingehalten — die Figuren behalten ihre Generatoren-Modelle; Sculpts bleiben vorbehalten | | Vertical Slice: beide Richtungen, zwei Türme, Ancient, Fluss, Vegetation, Felsen, Einheiten, Held, Champion, Grotte, Kampf-VFX | erfüllt (siehe `screenshots/u5/`) | | Vorher/Nachher gegenüber Godot G3 | erfüllt: `u5/` neben `g3/vorher-*` und `g3/zwischenstand-*`; Kamera bewusst vergleichbar, Licht eigenständig | | Leistung gemessen | erfüllt (133 / 180 fps mit Stufen) | | Erst danach über die ganze Karte entscheiden | entschieden: **Weg 2 (Stufen)**, umgesetzt | ## Entscheidung für die ganze Karte: Weg 2 (Stufen) Am 2. Oktober 2026 fiel die Entscheidung des Projektinhabers: **Zielqualität entlang der Lanes, einfachere Randzonen.** Die Alternativen „Gleichziehen“ (PBR überall) und „Drosseln“ (PBR aus ab einer Schwelle) sind damit abgelehnt; „Drosseln“ bleibt als spätere Einstellung denkbar, ist aber nicht vorgesehen. ### Umsetzung | Baustein | Ort | Inhalt | | --- | --- | --- | | `LuneZones` | `Assets/Luneraria/Editor/World/LuneZones.cs` | Korridor um die Lanes (22 m um eine Mittellinie, ein Gebäude oder die Grotte). `NearLane` entscheidet die Stufe eines Punkts | | `_Quality` | `Assets/Luneraria/Shaders/LuneSurface.shader` | 1 = Lane-Stufe (Albedo, Normal, ORM triplanar), 0 = Randstufe (Farbe + Steinschicht, keine PBR-Maps, flaches PBR wie U2) | | Materialstufen | `LuneMaterialFactory` | `Spec.Quality`; Randmaterialien binden keine PBR-Sätze. `TerrainEdge.mat` trägt die umgebenden Berge | | Szenenaufbau | `LuneWorldBuilder.ApplyTier` | Jeder Weltknoten jenseits des Korridors bekommt `_Quality` 0 über einen `MaterialPropertyBlock`; der innere Boden bleibt Lane-Stufe, die Berge `TerrainEdge` | | Nachweis | `screenshots/u5/edge-mountains.png`, `lane-and-edge.png` | Randstufe (Berge) und der Übergang Lane → Rand in einem Bild | Gebäude (Türme, Ancients, Grotte), Einheiten, Wege, Wasser und der innere Boden bleiben unverrückt auf Zielqualität. Die Randstufe spart die neun triplanaren Map-Samples (Albedo, Normal, ORM) und behält Farbe, Vertex-Tönung, Steinschicht und Emission — also das U2-Aussehen der Berge. ### Leistung mit Stufen | Ansicht | Einheiten | fps (Mittel) | Bildzeit Median | p95 | Sim | Views | UI | | --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | | ganze Karte (Zoom 64) | 116 | 133 | 5,05 ms | 19,33 ms | 0,119 | 0,249 | 0,086 | | Mid-Lane nah (Zoom 22) | 63 | 180 | 4,21 ms | 13,17 ms | 0,055 | 0.353 | 0,078 | Die Zahlen liegen auf dem Niveau des Slices (132 / 182 fps): die beiden Messfenster sehen den Korridor, also die Lane-Stufe. Die Ersparnis der Randstufe zeigt sich in Weitwinkeln und am Rand (siehe `lane-and-edge.png`), nicht in diesen Fenstern. Für die übrige Karte ist Weg 2 die Vorgabe: hohe Qualität wo gespielt wird, einfache Materialien in den Bergen und an der Kluft. Rohdaten: `logs/u5/player-benchmark-stufen.json` (Vergleich Slice: `logs/u5/player-benchmark-macos.json`). ## Bekannte Grenzen - **Stufen statt flächiger Zielqualität:** Der Korridor um die Lanes (22 m) trägt die vollen PBR-Sätze; Berge, Kluft und ferner Hintergrund behalten Farbe + Steinschicht. Die Grenze ist bewusst hart (MaterialPropertyBlock je Knoten), kein weicher Verlauf. - **Figuren** behalten die prozeduralen Generatoren-Modelle. Anatomie, Gesichter und Haare brauchen Künstler-Sculpts oder lizenzierte Bibliotheken (Freigabe und Lizenzprüfung vorbehalten). - **Decals und Partikel** (Staub, Trefferfunken, Fußspuren) sind nicht Teil des Slice; der Hit- und Angriffs-Flash sowie der Turmfunke tragen die Kampflesbarkeit. - **LOD und Draw Calls** sind nicht gemessen (Development-Player/Profiler); die U2-Folgerung bleibt offen. - **Water Refraction / SSR** ist nicht gesetzt; der Fluss arbeitet mit Normals, Rauigkeit und Fresnel. - **Godot G3** hat ein eigenes Lichtkonzept; die Bilder sind lagevergleichbar, nicht beleuchtungsgleich. - **Einheitenmodelle** sind noch nicht auf Zielqualität; sie folgen erst, wenn die Umgebung steht.