Konzeptphase. Interne Planungsfassung, Stand 04.11.2026. Pocket Planet ist noch in Entwicklung – Inhalte, Zahlen und Abläufe können sich ändern.
Grundsatz: Budgets zuerst, Inhalte danach. Jedes Ticket mit Grafik- oder Simulationsanteil nennt, welches Budget es berührt, und wird auf dem schwachen Referenzgerät gemessen.
12.1 Referenzgeräte
| Rolle | Gerät [Vorschlag] | Warum | Ziel |
|---|---|---|---|
| Schwach (Mindestziel) | Samsung Galaxy A13 (4G, Exynos 850, Mali-G52 MP1, 3–4 GB) | millionenfach verbreitet, schwache GPU, typisches Einsteigergerät | 30 fps stabil auf „Niedrig“ |
| Mittel | Google Pixel 6a oder Samsung Galaxy A54 | verbreitete Mittelklasse | 30 fps „Mittel“, 60 fps optional |
| Stark | aktuelles Pixel/Galaxy S | Referenz für „Hoch“ | 60 fps „Hoch“ |
| iOS (nach MVP) | iPhone SE 2/3 oder iPhone XR | ältestes realistisch unterstütztes Gerät | 30 fps |
| Emulator | Android-Studio-Emulator x86_64 | Funktionstests, nicht für Messungen | – |
[Annahme] Mindest-Android: 8.0 (API 26). Godot erlaubt 7.0, aber Geräte unter 8 mit OpenGL ES 3 sind selten und schwer zu testen. Entscheidung in 17, F6.
12.2 Budgets (messbar)
| Messgröße | Niedrig (A13) | Mittel | Hoch |
|---|---|---|---|
| Bildrate | ≥ 30 fps, 1 %-Low ≥ 25 | ≥ 30 (60 opt.) | ≥ 60 |
| Frametime Ø | ≤ 25 ms (Reserve gegen Drosselung) | ≤ 25 / 14 ms | ≤ 14 ms |
| Draw Calls | ≤ 90 | ≤ 130 | ≤ 180 |
| Sichtbare Dreiecke | ≤ 180 k | ≤ 300 k | ≤ 600 k |
| Requisiten-Instanzen sichtbar | ≤ 2 500 | ≤ 5 000 | ≤ 9 000 |
| Partikel gleichzeitig | ≤ 600 (3 Emitter) | ≤ 1 500 (6) | ≤ 3 000 (6) |
| VRAM Texturen | ≤ 120 MB | ≤ 180 MB | ≤ 260 MB |
| RAM gesamt (PSS) | ≤ 380 MB | ≤ 500 MB | ≤ 700 MB |
| Zyklus Simulation | ≤ 4 ms (Worker-Thread) | ≤ 2 ms | ≤ 1 ms |
| Offline 12 h nachrechnen | ≤ 1,5 s | ≤ 0,8 s | ≤ 0,4 s |
| Kaltstart bis bedienbar | ≤ 6 s | ≤ 4 s | ≤ 3 s |
| Download-Größe (AAB, arm64-Split) | ≤ 120 MB | ||
| Akku 30 min aktiv | ≤ 8 % | ≤ 6 % | ≤ 6 % |
| Temperatur | kein Drosseln unter 30 fps in 30 min |
Draw-Call-Aufteilung (Niedrig): Planet 1 · Ozean 1 · Atmosphäre 1 · Wolken 1 · Requisiten ≈ 40 (Assets × sichtbare LOD) · Effekte ≤ 8 · UI ≤ 30 · Hintergrund 1 · Reserve 7.
12.3 Maßnahmen
| Bereich | Maßnahme |
|---|---|
| Geometrie | Planet = 1 Mesh, Verformung im Vertex-Shader; Requisiten per MultiMesh; LOD1 + Ausblenden nach Zoomstufe; Smart-low-poly-Budgets (08) |
| Texturen | ETC2/ASTC, 512²-Standard, Mipmaps, PBR-Kanäle reduziert, UI ohne Rastergrafik (StyleBoxFlat) |
| Shader | keine Schleifen über Lichter, keine dynamischen Branches im Fragment-Shader der Requisiten, Noise vorgebacken statt berechnet, Qualitäts-Defines je Stufe |
| Licht | 1 Richtungslicht, keine Echtzeitschatten auf Niedrig/Mittel, Emission statt Punktlichter |
| Partikel | CPUParticles3D auf Niedrig, Emitter nur in sichtbarer Zoomstufe, Pool statt Neuerzeugung |
| Simulation | Packed Arrays, dünne Populationen, dirty-Regionen, Worker-Thread, Makroschritte offline |
| Rendering-Takt | Energiesparmodus: ohne Eingabe für 10 s → 20 fps (Engine.max_fps), Shader-Zeit läuft weiter; bei Eingabe sofort zurück. Im Menü/Chronik ohne Planet 30 fps |
| Auflösung | Renderauflösung 75/90/100 % (3D-Skalierung), UI immer in voller Auflösung |
| Speicher | Musik/Ambience streamen, Requisiten-Modelle einmal laden, Chronik-Bilder bei Bedarf laden und freigeben |
| Start | Shader-Vorwärmung während des Logos (eine unsichtbare Szene mit allen Materialien), keine großen synchronen Ladevorgänge im ersten Frame |
12.4 Adaptive Qualität
- Erststart: GPU-Name aus
RenderingServer.get_video_adapter_name()gegen Liste indata/gpu_tiers.json(Mali-G52/G57, Adreno 5xx, PowerVR → Niedrig). Unbekannt → 5-s-Kurztest (Kamerafahrt über Testplanet) → Stufe nach gemessener Frametime. - Laufend: Liegt die Frametime 5 s lang über 110 % des Budgets, zuerst Renderauflösung −10 % (bis 65 %), dann eine Stufe tiefer. Hoch wird nur über die Einstellungen wieder gewählt (kein Pendeln).
- Thermik: Bei
OS.get_thermal_state()[Annahme: Verfügbarkeit in 4.7 prüfen] ≥ „schwer“ → 30-fps-Deckel und Partikel halbieren. - Spieler kann die Stufe jederzeit selbst wählen; Anzeige „automatisch (Mittel)“.
12.5 Testverfahren
| Test | Wie | Wann | Grenzwert |
|---|---|---|---|
| Kamerafahrt-Benchmark | tests/bench_orbit.gd: fester Seed, Epoche-5-Testplanet mit Stadt, 60 s Pfad über alle Zoomstufen | jede Woche + vor jedem Release, auf A13 | Budgets 12.2 |
| Simulations-Benchmark | tests/bench_sim.gd: 1 000 Zyklen + 72 Makroschritte | jedes Sim-Ticket | ≤ 4 ms / ≤ 1,5 s |
| Dauerlauf | 30 min Zeitraffer auf A13, Logging von FPS und Temperatur | vor Release | keine Drosselung < 30 fps |
| Speicher | adb shell dumpsys meminfo de.bridgeroyale.app nach 10 min | vor Release | PSS-Budget |
| Akku | 30 min, Bildschirm 50 %, Flugmodus | vor Release | ≤ 8 % |
| Profiling | Godot-Profiler (Remote-Debug), Perfetto (laut Release-Berichten in 4.7 unterstützt), Android GPU Inspector für GPU-Spitzen | bei Grenzwertverletzung | – |
Ergebnisse als JSON nach artifacts/bench/<datum>-<gerät>.json. tools/bench-report.mjs vergleicht mit dem letzten Lauf und markiert Rückschritte > 10 %.