Pilot für eine generierte Figur: der Kohlenbeißer g01 kommt als Meshy-Ergebnis in den Port und ersetzt dort das Phase-4-Modell. Eine Figur genügt, um Pipeline, Bild und Leistung zu bewerten; Anatomie, Gesichter und Haare bleiben Künstler-Sculpts oder lizenzierte Packs (Vorgabe vom 1. Oktober). - Meshy-Pipeline unter tools/meshy/: API-Client (meshy.py, Ledger, Schlüssel nie geloggt) und Blender-Generator (build_figure.py) aus den unveränderten Downloads in assets-source/meshy/g01/. Export über den Manifest-Eintrag kohlenbeisser mit "replaces": "g01"; LuneUnitLibraryBuilder hängt die Figur zusätzlich unter der Godot-ID ein. - UV-Material AI_Kohlenbeisser (Familie authored): die Karten der Figur selbst, Lava-Glut aus der Albedo-Alpha (Meshy 7.1 ohne Emission-Map) mit _Glow 1,25. - Schatten ohne Normalen-Versatz (LuneShadowBias, _ShadowNormalScale 0): die UV-Naht-Kopien tragen geknickte Normalen; URP ApplyShadowBias zog helle Nähte durch den Schatten. Die Figur wirft nur mit Tiefen-Bias. - GPU-Batched-Skinning (PlayerSettings.meshDeformation, LuneProjectSetup): 35 Meshy-Kohlenbeißer kosteten mit CPU-Skinning rund 1 ms Haupt- und 1,7 ms Render-Thread je Bild. - LuneBenchmark: -luneBenchmarkRound und -luneBenchmarkArmy (Figuren-Stress). LuneAssetPreview: LUNE_ONLY für Vorher/Nachher, Trefferframe aus der Kontaktzeit des Manifests. FigureViewsTests (Explicit) für die vier Spielmomente der Figur. - Tests: EditMode 29/29, PlayMode 14/14 (6 Explicit), Verify 718/0, Player-Selbsttest 30/30, Kerntests 457/457, Fingerabdrücke unverändert (DCE95C96556F3A1A, 7B8E43AEFC0D60C5). - Leistung (A/B im selben Fenster, 35x g01): Meshy -21 % Mid (109,7 zu 138,8) und -13 % Karte (91,7 zu 105,6) gegenüber Phase-4. GPU-Skinning hebt Mid um 7-27 % und entlastet Haupt- und Render-Thread. Standard-Partie ab Runde 21 ohne g01 im Bild: drei Varianten bis 6 %. - Doku: U5-VISUAL (U5.5), PORT-QA, PORT-STATUS, KNOWN-BEHAVIOR-DIFFERENCES; Bilder screenshots/u5.5/ und u5.5-gpu/, Rohdaten logs/u5.5/. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
8 KiB
8 KiB
Port-Status · Champions of Luneraria in Unity
Stand: 9. Oktober 2026 (U5.5-pilot).
Referenz ist der Godot-Stand luneraria/g3 (1b540f2) in ../saumwacht-godot; er wird nicht mehr verändert. Engine: Unity 6.3 LTS (6000.3.20f1), Renderer URP. HDRP ist ausgeschlossen, bis ein Vergleich mit einer echten Szene etwas anderes nahelegt.
Zielplattformen sind Fedora 44 und Windows 11; macOS ist die Entwicklungsplattform.
| Meilenstein | Zustand | Nachweis |
|---|---|---|
| U1 · C#-Simulation | fertig (Referenzmeilenstein, luneraria/u1 = 4d6ed17): 402/402 Prüfungen, Golden-Parität mit Godot |
U1-RULES.md |
| U1.5 · Unity-Integrationsprüfung | fertig: Kern im Unity-Editor 402/402 (Release und Debug), Golden bitgleich nach expliziter float32-Rundung in Vec2, Editor-Benchmark |
U1.5-UNITY.md |
| U2 · Unity-Spielwelt | fertig: U2A Blender→FBX-Pipeline (9 Assets geprüft), U2B G1-Karte mit Materialsystem, U2C fester Takt und Ansichten (bildratenunabhängig nachgewiesen), U2D vollständige Bot-Partien sichtbar und gleich dem Kern; danach Batch-Import aller 86 Modelle, Einheiten mit eigenen Modellen | U2-WORLD.md |
| U3 · G3-HUD portieren | fertig (luneraria/u3): UI Toolkit, Sichtmodell mit Privatsphäre, menschlicher Sitz, alle HUD-Bereiche, Eingabe und Befehle, Prüfung 718/0, 14 G3-Motive, Spieltest, Leistung mit HUD |
U3-UI.md |
| U4 · Netzwerk | fertig (luneraria/u4 = 769e622): LuneSession (Protokoll 4), TCP-Transport, Startbildschirm Host/Join, 43+12 Prüfungen, Mindestumfang M4. Nachtrag (luneraria/u4-nachtrag, in U5.3 zusammengeführt): Startbildschirm in der Szene, „Menü“ führt dorthin zurück |
U4-NETWORK.md |
| U5 · Visuelle Neuausrichtung (Vertical Slice Mid-Lane) | fertig (luneraria/u5 = 2c1686b, Stufen luneraria/u5.2): 6 PBR-Sätze, Surface-Shader mit Albedo/Normal/ORM, Stufen Lane/Rand, Hit- und Turm-VFX, 133/180 fps. U5.3 (luneraria/u5.3 = 07fa457): Gebäude, Boss und Ringborkes Rinde auf PBR (11 Sätze); Bildfehler aus U5 behoben (doppelte Einfärbung, Datenkarten als sRGB, Streifen, bleichender Treffer-Flash, Nebel), Helligkeit und Grün wieder auf U3-Niveau U5.4 (luneraria/u5.4 = 4883d95): Surface-Materialien für alle 146 Figurenmaterialien (Metalle metallisch, Randlicht, Struktur in den Porträts), SSAO (abschaltbar), Leistung −13 % Karte / −16 % Mid U5.5-pilot (luneraria/u5.5-pilot): Meshy-Figur für den Kohlenbeißer g01 (Pipeline tools/meshy/, UV-Material mit Lava-Glut, Schatten ohne Normalen-Versatz), GPU-Batched-Skinning, Figuren-Stress −21 % Mid / −13 % Karte gegenüber Phase-4 |
U5-VISUAL.md |
QA je Meilenstein: PORT-QA.md.
Bekannte Verhaltensunterschiede, auch die bewusst übernommenen Referenzfehler: KNOWN-BEHAVIOR-DIFFERENCES.md.
Offene Voraussetzungen
- Build-Module für die Zielplattformen fehlen: Windows Build Support (Mono) und Linux Build Support (Mono), optional Linux IL2CPP und Linux Dedicated Server. Installation nur nach Freigabe (Details in U1.5-UNITY.md).
- Kerntests und Player auf Windows 11 und Fedora 44 stehen deshalb aus; gemessen ist bisher der macOS-Player.
Entscheidungen
- Regelkern ohne Unity (
Luneraria.Core,noEngineReferences). Unity wird Adapter und Präsentation. - Verhaltensgleichheit statt Bitgleichheit. Verglichen wird mit dokumentierten Toleranzen; gemessen wurde auf dem Mac trotzdem Abweichung 0, in .NET 8 und im Unity-Editor.
- Explizite float32-Rundung in
Vec2(U1.5). Unitys Mono rechnet float32-Zwischenwerte doppelt genau. Das änderte in einem Szenario eine Zielentscheidung, deshalb ist eine Toleranz hier nicht begründbar. Die Casts erzwingen Godots float32-Semantik auf jeder Laufzeit; Regeln und .NET-Ergebnisse bleiben unverändert. - Tabellen einmal aus Godot erzeugt (
tools/port/gen_content.py); danach istContentData.csdie gepflegte Quelle. - Referenzfehler R1 im Bot-Gedächtnis ist bewusst übernommen (Parität) und für eine spätere Bot-Phase vorgemerkt.
- Geplante Helden (Lucy, Ghaliga, Siegfried, Feena) stehen im Datenmodell, sind aber inaktiv, bis eine Heldenphase ihre Regeln umsetzt.
- Assets: Blender-Quellen und Generatoren sind die Quelle. Ein zentraler, reproduzierbarer Blender-Export erzeugt FBX für Unity; GLB nur, wo keine bessere Quelle existiert (U2A).
- Prozedurale Welt gebacken (U2B): Gelände und Vegetation der G1-Karte hängen an Godots Rauschen und Zufallsgenerator; ein Godot-Werkzeug backt die Welt aus dem Referenzgenerator, Unity baut daraus die Szene. U5 bekommt eine neue Weltquelle.
- Koordinaten: Unity = (−x, Höhe, y) der Kartenpunkte; FBX-Pipeline, Welt und Kamera nutzen dieselbe Umrechnung, das Bild entspricht Godots.
- Host-Schleife (U2C): fester Takt mit Akkumulator; die Bildrate bestimmt nur die Zahl der Schritte je Bild. Nachweis über Fingerabdrücke der Partie.
- Schriftgewichte wie in G3 (U3D): Die Referenz deklariert Gewichte, wendet sie aber nie an (String-Schlüssel „wght“ wird von Godot ignoriert). Der Port zeigt wie G3 Regular 400. Die Stilrollen bleiben getrennt, damit U5 echte Gewichte vergeben kann.
- Netzwerk über TCP (U4): Die Referenz nutzt ENet; der Port nutzt TCP mit
LuneWire(Nachrichten) und binären Kampfrahmen. Späte Rahmen werden über die Serial verworfen wie beiunreliable_ordered. Offline ist ein lokaler Host mit Bot-Plätzen (LuneSession.HostOffline). - PBR-Texturen aus Blender (U5):
tools/blender/bake_pbr.pybackt nahtlose Albedo-/Normal-/ORM-Sätze (Torus-Mapping). Der Surface-Shader legt sie triplanar über die Godot-Weltfarben. - PBR-Karten als Struktur um die Godot-Farben (U5.3): Albedo und Rauigkeit der gebackenen Sätze werden durch ihren Mittelwert geteilt. Die Godot-Farben und -Rauigkeiten bleiben der Durchschnitt, die Karten liefern Struktur; Normal- und ORM-Karten importieren als Daten (nicht sRGB).
- SSAO standardmäßig an (U5.4, Entscheidung 9. Oktober 2026): Umgebungsverdeckung nach den opaken Objekten in halber Auflösung; in den Optionen abschaltbar. Kostet auf dem M5 9–13 % Bildrate.
- Stufen statt flächiger Zielqualität (U5.2, Entscheidung 2. Oktober 2026): Der Lankorridor (22 m um Mittellinien, Gebäude und Grotte) trägt die vollen PBR-Sätze; Berge, Kluft und ferner Hintergrund behalten Farbe + Steinschicht (
LuneZones, Surface_Quality,TerrainEdge). Gebäude, Einheiten, Wege und Wasser bleiben Lane-Stufe. - Modelle direkt in Git (1. Oktober 2026): Auch die Modelle des Batch-Imports liegen wie die U2A-Modelle im Repository, ohne Git LFS. Keine Datei ist größer als 40 MB; das Repository wächst auf etwa 240 MB.
- Projektort außerhalb von iCloud Drive (1. Oktober 2026): Der Arbeitsordner
TowerDefensezieht von~/Documents/Projektenach~/Developer. iCloud Drive synchronisierte~/Documentsund legte Konfliktkopien an, die einen Player unbrauchbar machten (U2-WORLD.md, Batch-Import). Der Schutz inLunePlayerBuildbleibt.
Arbeitsweise
- Ein Zweig je Meilenstein:
luneraria/u1,luneraria/u1.5,luneraria/u2, … Pilotzweige tragen einen Suffix (luneraria/u5.5-pilot). Nach jedem Meilenstein kommen Tests, Bild, Leistung, bekannte Unterschiede und ein Commit. - Werkzeuge:
tools/run_core_tests.sh(Kern mit .NET).- Unity Test Runner: EditMode (Kern, Integration, Bildraten-Logik) und PlayMode (Szene bei echten Bildraten, Vertical Function Test).
CoreBatch,LuneAssetVerifier,LuneWorldBuilder,LuneWorldCapture,LunePlayerBuildim Batchmodus.tools/blender/export_fbx.sh(Assets) mit dem Manifest austools/blender/make_manifest.py,tools/godot-golden/world_export.gd(Weltbake).LUNE_EVIDENCE=<Ordner>leitet die Nachweise der PlayMode-Tests nachdocs/port/logs/<Ordner>unddocs/port/screenshots/<Ordner>um; ohne die Variable schreiben sie in die Ordner ihres Meilensteins.tools/godot-golden/run_godot.sh(Godot-Referenz).tools/dotnet/Luneraria.Core.BenchundCoreBatch.Benchmark(Leistung).