Spike: Wie viele Gegner und Projektile trägt Bevy 0.19 in 2D? #4
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Part of #1
Ein Wegwerf-Beispiel (
examples/perf_spike.rs), das das Budget misst, bevor wir Architektur darauf bauen.Aufbau: N Gegner bewegen sich radial auf die Mitte zu, der Turm feuert mit fester Rate, Projektile fliegen, Treffer entfernen Gegner. Kein Gameplay, keine UI.
Messen: Frametime bei N = 100 / 500 / 2000 / 10000, mit Sprites, im Release-Profil. Wo kippt es unter 60 fps? Was dominiert — Spawning, Kollision oder Rendering?
Ergebnis: eine Tabelle als Kommentar in diesem Ticket, plus ein Satz Empfehlung: mit welcher Gegnerzahl planen wir, und braucht Kollision eine räumliche Struktur oder reicht naives O(n·m)?
Fertig, wenn die Zahl im Ticket steht. Der Spike-Code ist kein Teil des Slice — er bleibt unter
examples/liegen oder fliegt raus.Spike: Wie viele Gegner und Projektile tragt Bevy 0.19 in 2D?to Spike: Wie viele Gegner und Projektile trägt Bevy 0.19 in 2D?Erledigt in
40a19f3.examples/perf_spike.rsliegt aufslice/frontier, der vollständige Messbericht steht im Ticket-Verlauf.Ergebnis: unter 60 fps kippt es bei ~70 000 Sprites; Rendering dominiert mit 96–98 %, die gesamte Gameplay-Logik kostet bei 10 000 Gegnern 0,114 ms von 16,67 ms. Kollision ist mit 1,5–6,5 ns pro Paartest exakt linear in n·m — naiv reicht bis ~5·10⁵ Paartests/Frame, danach Uniform Grid.
Entschieden: Obergrenze 10 000 gleichzeitige Gegner, steigend über den Run (siehe Decisions in #1). Nicht die gemessenen 70 000, weil die Messung für untexturierte, gleichfarbige Sprites ohne UI und Audio gilt.
Zwei Befunde, die über das Ticket hinausgehen und in #1 dokumentiert sind: der nächste Perf-Hotspot ist nicht die Kollision, sondern
tower_firemit seinem O(n)-Zielscan sobald es mehrere Türme gibt — und Gegner-gegen-Gegner-Kollision wird bei dieser Gegnerzahl zur offenen Architekturfrage (Stapeln zulassen oder Spatial Grid mit weicher Separation).Der Spike bleibt als
examples/liegen, damit die Messung nach dem Wechsel auf echte Texturen wiederholbar ist.