champions-of-luneraria/docs/port/PORT-QA.md
Martin Stickelbroeck 07fa4572e0 U5.3: Gebäude, Boss und Ringborke auf PBR; Bildfehler aus U5 behoben
Fortsetzung des angefangenen U5.3-Stands vom 2. Oktober.

- Fünf neue Sätze aus bake_pbr.py (metal, cloth, hide, bone, wood) für
  Türme, Ancients, Grotte und die Schlundkrone. Ringborkes Rinde (RB_Bark)
  auf ihren eigenen UVs mit dem 4k-Satz (Rauigkeit zu ORM gepackt),
  Normalen im Tangentenraum des Meshes. Aufnahmen aller drei Lanes.
- Befund: Seit U5 war die Welt halb so hell und ohne Grün (Mid-Lane
  Helligkeit 0,27, Grün 0 %). Ursachen und Korrekturen:
  - Die PBR-Albedos wurden über die Godot-Farben multipliziert (Rasen
    etwa x0,05). Jetzt teilt der Shader jede Karte durch ihren Mittel-
    wert; die Godot-Farbe bleibt der Durchschnitt, die Karte liefert
    Struktur. Ebenso die Rauigkeit, wo das Material eine eigene hat.
  - Normal- und ORM-Karten waren als sRGB-Farbe importiert. Jetzt
    Normalkarte bzw. linear.
  - bake_pbr.py verzerrte alle Muster 10:1 (Regenstreifen). Stein, Erde,
    Laub, Wasser und die neuen Sätze ohne Maserung neu gebacken.
  - Der Treffer-Flash ersetzte die Grundfarbe aller Materialplätze; im
    Nahkampf waren die Armeen weiß und der Boss gelb. Jetzt Tönung der
    eigenen Farbe je Platz, wenig Emission, 16 Stufen.
  - Nebel 0,0085 verschleierte die Kartenansicht zu 35-50 %; jetzt 0,0045.
  Ergebnis Mid-Lane: Helligkeit 0,41-0,44, Grün 31-39 % (U3: 0,45 / 27 %).
- Tests: EditMode 29/29, PlayMode 13/13, Verify 718/0, Kerntests .NET
  457/457, Fingerabdrücke unverändert (DCE95C96556F3A1A, 7B8E43AEFC0D60C5).
- Leistung: A/B mit einem U5.2-Player unter gleicher Last, kein messbarer
  Unterschied (91,4 gegen 93,8 fps Karte, 124,9 gegen 125,3 fps Mid).
- Messwerkzeug tools/port/png_stats.py; Doku U5-VISUAL (U5.3),
  PORT-STATUS, PORT-QA; Bilder screenshots/u5.3/ als JPEG.

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

11 KiB
Raw Blame History

Port-QA

Je Meilenstein: Tests, Bild, Leistung, bekannte Unterschiede, Commit.

U1 · C#-Simulation

Punkt Ergebnis
Tests content 75/75, core 91/91, m2 73/73, golden 157/157, determinism 6/6 = 402/402; dreimal in getrennten Prozessen; Protokoll logs/u1/core-tests.json
Golden-Parität 19 Szenarien, 120 Snapshots, 51.221 Werte; größte Abweichung 0 in allen Kategorien (Toleranzen siehe U1-RULES.md)
Bild screenshots/u1/replay-start_three_lanes-t10.png, replay-boss_cycle-marching.png, replay-grotto_contested-t15.png: Godot-Positionen (Punkte) und C#-Positionen (Ringe) decken sich (31/31, 35/35, 15/15)
Leistung (Mac M5) Simulationsschritt bei 120 Einheiten: Godot 1,587 ms, C#/.NET 8 0,259 ms; Bot-Partien pro Runde: 648 ms zu 36 ms (logs/u1/sim-bench-*.json)
Bekannte Unterschiede technische Repräsentation (Klassen statt Dictionaries, stabile Sortierung, 32-Bit-int, kein ungenutzter Zufallsgenerator); Referenzfehler R1 bewusst übernommen
Offen erledigt in U1.5: Lauf im Unity-Editor, Mono-Leistung. Weiter offen: Kerntests auf Windows 11 und Fedora 44
Commit Zweig luneraria/u1 (4d6ed17)

Hinweis: Die Projektdateien des .NET-Harness (tools/dotnet/*/*.csproj) fehlten im U1-Commit, weil .gitignore alle *.csproj ausschloss. Sie sind seit U1.5 eingecheckt.

U1.5 · Unity-Integrationsprüfung

Punkt Ergebnis
Umgebung Unity 6000.3.20f1 (6.3 LTS), Personal-Lizenz, URP 17.3.0, Editor-Mono 6.13.0, Standalone-Backend Mono, API-Level .NET Standard 2.1
Tests Unity Test Runner (EditMode): 402/402 in Release und Debug, dazu 2 Integrationstests; .NET 8 weiter 402/402. Protokolle logs/u1_5/editmode-results-*.xml, core-tests-*.json
Golden in Unity 51.221 Werte, Abweichung 0 in allen Kategorien und Bereichen (Gold, HP, Positionen, Türme, Ancients, Wellen, Helden, Boss, Gewinner, …)
Float-Befund Mono rechnet float32-Zwischenwerte doppelt genau. Das beeinflusste eine Zielentscheidung (mirror_match Runde 7: +4,8 s Kampfdauer). Behoben durch explizite Rundung in Vec2; .NET-Ergebnisse byteidentisch zu vorher
Bild keines; U1.5 hat keine sichtbare Szene. Nachweis sind der Schritt-Trace (tools/port/trace_diff.py) und die Float-Probe (logs/u1_5/float-probe-*.json)
Leistung (Editor-Benchmark) Schritt mit 120 Einheiten: Editor Release 0,51 ms, Debug 1,00 ms; .NET 8 0,24–0,26 ms; Godot 1,60 ms (logs/u1_5/sim-bench-*.json)
Bekannte Unterschiede R1 bewusst übernommen; F1 (Mono-Float) behoben (KNOWN-BEHAVIOR-DIFFERENCES.md)
Offen IL2CPP- und Player-Läufe unter Windows 11 und Fedora 44 (Build-Module fehlen, Installation nach Freigabe)
Commit Zweig luneraria/u1.5

U2 · Unity-Spielwelt

Punkt Ergebnis
Tests Blender-Pipeline 176/176 und Unity-Verifier 128/128 (9 Assets). Test Runner EditMode 11/11: Kern 402 Prüfungen, 2 Integrationstests, 4 Bildratentests. PlayMode 2/2: Szene bei echten Bildraten, Vertical Function Test
Parität Bot-Partie Seed 2 (9 Runden) und Seed 9 ab Runde 21 in der sichtbaren Szene mit demselben Fingerabdruck wie der reine Kern; ebenso bei 30, 60, 120 fps, unbegrenzt, mit Rucklern und bei 8× Tempo
Bild screenshots/u2a/ (Assets), u2b/ (Karte mit Godot-Kameraeinstellungen; Vergleich mit g2/nachher), u2d/ (14 Schlüsselmomente der Partien)
Leistung macOS-Player (M5, 1080p, VSync aus) mit 116 Einheiten: 161–199 fps; Hauptthread 1,3 ms, Render-Thread 1,3 ms, Simulation unter 0,1 ms. Ausreißer beim Present (p95 18–26 ms) offen für U5
Bekannte Unterschiede keine Verhaltensunterschiede. Darstellung vereinfacht: Platzhaltermodelle für Einheiten, Materialien, Effekte, Debug-Anzeige statt HUD (U2-WORLD.md)
Offen Windows-/Linux-Player (Build-Module); Leistungsspitzen (Batch-Import inzwischen erledigt, siehe unten)
Commits luneraria/u2: U2A 49cb4af, U2B 8a72cb1, U2C 3871b3e, U2D 323cc3a

Batch-Import aller Modelle (nach U2D)

Punkt Ergebnis
Tests Blender-Pipeline 1.616/1.616 und Unity-Verifier 1.247/1.247 (86 Modelle); zwei Exportläufe byteidentisch. Test Runner EditMode 11/11, PlayMode 2/2 mit allen Modellen
Parität Vertical Function Test mit allen Modellen: Seed 2 DCE95C96556F3A1A (12.690 Schritte), Seed 9 ab Runde 21 7B8E43AEFC0D60C5 (4.195 Schritte), beide gleich dem Kern; Szene bei 30, 60, 120 fps und unbegrenzt gleich
Bild screenshots/u2a-batch/<Gruppe>.png (Kontaktbögen aller Modelle), screenshots/u2a-batch/01-… bis 14-… (Partie mit allen Modellen)
Leistung macOS-Player mit allen Modellen, 116 Einheiten: 158–160 fps (Mid-Lane 205–207). Hauptthread 2,5 ms, Render-Thread 3,2 ms, etwa doppelt so viel wie mit dem Platzhalter. Present-Ausreißer kürzer (p95 18 statt 24 ms). Player 228 MB
Befund Projekt liegt in iCloud Drive; Konfliktkopien im Build-Cache machten den Player unbrauchbar. LunePlayerBuild fängt das ab (U2-WORLD.md)
Bekannte Unterschiede keine Verhaltensunterschiede; starre Figuren ohne Godots prozedurale Gliederbewegung
Offen Draw Calls messen (U5); Windows-/Linux-Player (Build-Module)
Commit luneraria/u2: Batch-Import 3ca38a8 (Modelle direkt in Git)

U3 · G3-HUD portieren

Punkt Ergebnis
Tests EditMode 23/23 (Kern 402 Prüfungen, Sichtmodell, Bildraten-Logik). PlayMode 13/13: Verify A–I 718 Prüfungen, 0 Fehler (Port von verify_g3 715/715 plus Teil I), Szene bei echten Bildraten, Vertical Function Test, Capture, UI-Toolkit-Probe. Bildwerkzeuge und Spieltest sind Explicit. Protokolle logs/u3/, Summen tools/out/hud-verify-*.txt
Parität Bot-Partie Seed 2 DCE95C96556F3A1A (12.690 Schritte), Seed 9 ab Runde 21 7B8E43AEFC0D60C5 (4.195 Schritte), beide unverändert gleich dem Kern
Bild screenshots/u3/motive-1920x1080/ (14 G3-Motive), dieselben als JPEG in motive-1280x720/, motive-2560x1080/, motive-2560x1440/ (Nachtrag), pruefung/ (Teile B–F), aufloesungen/ (1152×720 … 2560×1440), spieltest/ (Wellen 1–8)
Leistung macOS-Player mit HUD, 116 Einheiten: 169 fps (Übersicht) und 218 fps (Mid nah). HUD-Skripte 0,090 bzw. 0,078 ms je Bild; Simulation 0,09/0,04 ms, Ansichten 0,31/0,33 ms. Ausreißer beim Present (p95 10–13 ms) im Rahmen der U2D-Streuung. Rohdaten logs/u3/player-benchmark-macos.json
Bekannte Unterschiede Godots deklarierte Schriftgewichte werden in der Referenz nie angewendet (String-Schlüssel „wght“); Port zeigt wie G3 Regular 400. Kein Hauptmenü, kein Grottenlicht. Details U3-UI.md und KNOWN-BEHAVIOR-DIFFERENCES.md
Nachtrag (7. Oktober 2026) Spieltest über die echte Oberfläche: Wellen 1–8 gespielt, Ende in der Planung von Welle 9 (logs/u3/playtest-log.txt). Tooltip-Wertzeilen ohne Umbruch wie Godots GridContainer. Die im U3D-Commit genannten Motivsätze in drei weiteren Auflösungen nachgeholt (vom U3-Stand e2aadcb). Befund für U4: Startbildschirm nicht in der Szene eingebunden
Offen Hauptmenü und Netzwerk (U4); Schriftgewichte, Grottenlicht und weitere Darstellung (U5); Windows-/Linux-Player (Build-Module)
Commits luneraria/u3: U3A 4dee9b1, U3B/U3C 2b86c0d, U3D 66867f3; Nachtrag luneraria/u3-nachtrag = 527f7c5 (auf U5.2)

U4 · Netzwerk

Punkt Ergebnis
Tests Protokoll NetSuite 43/43 (Port von test_lune_net.gd), Mehr-Runden-Loopback NetRoundsSuite 12/12 (Port von net_rounds.py, In-Prozess mit LuneLoopback), LuneWireTests Round-trip. EditMode 29/29, PlayMode 13/13, Kerntests .NET 457/457 (402 + 43 + 12)
Parität Bot-Partien unverändert DCE95C96556F3A1A, 7B8E43AEFC0D60C5; Mindestumfang M4 erfüllt (Ready, private Planung, Bot-Übernahme, Wiedereinstieg, Snapshots, Revanche, Disconnect, sechs Plätze)
Bild Startbildschirm LuneMainMenu (Offline/Hosten/Beitreten); Partiefenster unverändert U3
Leistung keine eigenen Netz-Messungen; Rahmen 20/s wie in der Referenz (LuneNet.FrameInterval 0,05 s), 13 Floats je Einheit
Bekannte Unterschiede TCP statt ENet (Rahmen auf demselben Socket, Verwerfen über Serial); Zwei-Prozess-Loopback als In-Prozess-Test; vereinfachtes Hauptmenü
Offen Windows-/Linux-Player (Build-Module); Internetpartie über mehrere Rechner; optional unzuverlässiger Rahmenkanal
Commits luneraria/u4 769e622

U5 · Visuelle Neuausrichtung (Vertical Slice)

Punkt Ergebnis
Tests EditMode 29/29, PlayMode 13/13, Kerntests .NET 457/457. Keine Regeländerung; Fingerabdrücke der Bot-Partien unverändert
Parität Golden 51.221 Werte unverändert, 0 Abweichungen; Darstellung liest nur
Bild screenshots/u5/mid-lane-*.png (Übersicht, Türme, Ancient, Grotte, Weitwinkel); Vergleich mit ../saumwacht-godot/docs/luneraria/screenshots/g3/vorher-1920x1080/ und zwischenstand-1920x1080/
Leistung macOS-Player mit PBR+Nebel+VFX, 116 Einheiten: 132 fps (Übersicht), 182 fps (Mid nah). HUD 0,088 bzw. 0,077 ms je Bild. Gegenüber U3 −20…−25 %
Kartenqualität entschieden und umgesetzt: Weg 2 (Stufen) — Zielqualität im Lankorridor (22 m), Randstufe (Farbe + Steinschicht) in Bergen und Kluft. Nachweis screenshots/u5/edge-mountains.png, lane-and-edge.png; Leistung logs/u5/player-benchmark-stufen.json (133 / 180 fps)
Bekannte Unterschiede Stufen statt flächiger Zielqualität (harte Grenze je Knoten); Figuren ohne Künstler-Sculpts; keine Decals/Partikel; LOD/Draw Calls offen
Offen restliche Zonen und Einheitenmodelle auf Zielqualität; Künstler-Sculpts; LOD und Atlanten
Commits luneraria/u5 2c1686b (Slice), luneraria/u5.2 7fa038a (Stufen)

U5.3 · Gebäude, Boss, Ringborke und Bildbefund

Punkt Ergebnis
Tests EditMode 29/29, PlayMode 13/13 (Verify A–I 718/0), Kerntests .NET 457/457
Parität Fingerabdrücke der Bot-Partien unverändert (DCE95C96556F3A1A, 7B8E43AEFC0D60C5); Darstellung liest nur
Bild screenshots/u5.3/ (JPEG): alle drei Lanes, Rand und Weitwinkel; die 14 Kampfmomente des Vertical Function Test mit Einheiten, Held und Boss; die 14 G3-Motive mit HUD. Messung mit tools/port/png_stats.py
Befund U5 war halb so hell und ohne Grün (Mid-Lane Helligkeit 0,27, Grün 0 %): doppelte Einfärbung durch die PBR-Albedos, Normal- und ORM-Karten als sRGB, 10:1-Streifen aus dem Backen, ein bleichender Treffer-Flash, Nebel 0,0085. Alle behoben; Mid-Lane jetzt 0,41–0,44 Helligkeit, 31–39 % Grün (U3: 0,45 / 27 %)
Leistung A/B mit einem U5.2-Player unter gleicher Last: 91,4 gegen 93,8 fps (Karte), 124,9 gegen 125,3 fps (Mid nah), also kein messbarer Unterschied. Rohdaten logs/u5.3/player-benchmark-u52-run*.json, -u53-run*.json
Bekannte Unterschiede keine im Verhalten; Einheitenmodelle weiter mit importierten Materialien, Sättigung unter Godot G3 (Look-Entscheidung)
Commits luneraria/u5.3

Ausblick

Nach der Entscheidung über die Kartenqualität folgen die restlichen Zonen, Einheitenmodelle und gegebenenfalls Künstler-Assets.