champions-of-luneraria/docs/port/U5-VISUAL.md
Martin Stickelbroeck 2c1686b837 U5 Vertical Slice: PBR-Sätze, Surface-Shader, Mid-Lane, Kampf-VFX
Die Mid-Lane steht auf Zielqualität (stilisierter Realismus). Die übrige
Karte bleibt auf dem U2-Stand, bis über den Weg entschieden ist.

- U5A: tools/blender/bake_pbr.py backt sechs nahtlose PBR-Sätze
  (limestone, soil, bark, leaf, rock, water) mit Albedo, Normal aus dem
  Höhenfeld (Sobel) und ORM (R AO, G Rauigkeit, B Metall), je 2k.
  Torus-Mapping für Kantenfluss wie phase10/bake_bark.py.
- U5B: Luneraria/Surface trägt _AlbedoMap, _NormalMap, _OrmMap triplanar
  über den Godot-Weltfarben; ORM steuert Rauigkeit, Metall und AO.
  LuneMaterialFactory bindet je Oberfläche den passenden Satz, LN_Rock
  den Felsensatz.
- U5C: Mid-Lane-Licht — Nebel (ExponentialSquared, Dichte 0,0085),
  scharfe Schatten (Bias 0,02), Weißabgleich und Vignette, ACES und
  Bloom leicht angehoben.
- U5D: Hit- und Angriffs-Flash über MaterialPropertyBlock (warm beim
  Angriff, weißglühend beim Treffer), Turmblitze als dreipunktiger Funke
  mit Breitenkurve und Farbverlauf. CaptureMidLane schreibt fünf
  Nachweisbilder nach docs/port/screenshots/u5/.
- Leistung (macOS-Player, 116 Einheiten): 132 fps Übersicht, 182 fps Mid
  nah — 20–25 % unter U3 durch PBR, Normals und Nebel. Mid-Lane bleibt
  über 120 fps.
- Tests: EditMode 29/29, PlayMode 13/13, Kerntests 457/457. Keine
  Regeländerung; Golden 51.221 Werte unverändert.
- Grenze eingehalten: keine prozeduralen Gesichter, Haare oder Anatomie.
  Sculpts bleiben vorbehalten (Freigabe und Lizenzprüfung).
- Dokumentation: U5-VISUAL (Umsetzung, Nachweis, Entscheidungsvorlage
  für die ganze Karte), PORT-QA (U5), PORT-STATUS, KNOWN-BEHAVIOR-
  DIFFERENCES.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 17:10:10 +02:00

8.2 KiB
Raw Blame History

U5 · Visuelle Neuausrichtung

Stand: 2. Oktober 2026 · Vertical Slice fertig (luneraria/u5).

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/:

  • <name>-albedo-2k.png — Grundfarbe
  • <name>-normal-2k.png — Tangentialraum-Normal aus dem Höhenfeld (Sobel)
  • <name>-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.

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 (132 / 182 fps)
Erst danach über die ganze Karte entscheiden offen — Entscheidungsvorlage unten

Entscheidungsvorlage für die ganze Karte

Der Slice trägt die Zielqualität zu einem Preis von 20–25 % Bildrate. Für die ganze Karte stehen drei Wege offen:

  1. Gleichziehen: denselben PBR-Satz auf alle Zonen legen. Einfach, aber die Übersichts-Kamera fällt unter 100 fps sobald viele Einheiten im Bild sind.
  2. Stufen: Zielqualität nur entlang der Lanes, einfachere Materialien in Randzonen und im Hintergrund (Berge, Kluft). Empfehlung des Ports.
  3. Qualität drosseln: PBR-Aus, wenn units_alive_max oder Zoom eine Schwelle überschreitet. Sauber per Einstellung, aber sichtbarer Umschaltmoment.

Erst nach dieser Entscheidung werden die restlichen Zonen und die Einheitenmodelle hochgezogen.

Bekannte Grenzen

  • Nur die Mid-Lane trägt die Zielqualität. Die übrige Karte bleibt auf dem U2-Stand (einfache Materialien, kein Nebel-Feinschliff).
  • 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.