Seite 1 von 1
Frage zur Gameloop und Entity Iterationen
Verfasst: 08.12.2024, 18:42
von Andy16823
Hallo, ich würde gerne fragen wie man eine Gameloop am besten gestaltet. Aktuell habe ich es so, dass die Szene zuerst geupdated wird und dann anschließend das ganze gerendert wird. Nun ist das so, dass dies ja mindestens 2 Iterationen der Entitys sind. Einmal eine für das Update und dann eine für das Rendern. Kommt nun noch der Shadowpass hinzu, dann sind das 3 Iterationen. Bei kleinen Szenen ist das sicher kein Problem aber wie verhält sich das mit größeren Szenen. Angenommen ich habe 2000 Entitys in der Szene dann wären das im besten fall 4000 Iterationen / frame aber wahrscheinlich eher 6000
Re: Frage zur Gameloop und Entity Iterationen
Verfasst: 08.12.2024, 19:06
von Schrompf
Ja, und das ist kein Problem. Für den Moment machst Du es genau so, denn Dein Rendern sollte sich besser nicht mit dem Update mischen. Das macht Dir das Leben einfacher.
Später, mit sagen wir 200k Entities, hast Du eine separate Render-Szene, die Du aus den Entity-Updates heraus updatest, wenn nötig. Und wo die Grafikkarte dann das eigentliche Iterieren über die Entities macht, indem Du zum Beispiel eine Gruppe Entities als einen Stapel Instanzen renderst. Oder Du machst IndirectDrawCalls, die gleich noch das Frustum Culling machen. Gibt dann viele Methoden, wie die CPU nur noch Gruppen von Dingen behandelt und das Kleinklein dann die Grafikkarte macht.
Das ist aber alles ehrlich ein Ding für später. 2000 sind nix. Ich hab bei Splatter paar tausend Entities und hau die einfach raus in x Passes für Schatten, Deferred, Sonstwas, bei 250+ fps. Ich hab beim DungeonCrawler jetzt paar tausend einzelne DrawCalls mit DX9 und ohne Rücksicht auf Texturwechsel, bei 150fps.
Re: Frage zur Gameloop und Entity Iterationen
Verfasst: 08.12.2024, 20:52
von Matthias Gubisch
Wenns knapp wird kannst du:
wie Schrompf schon gesagt hat schauen das beim rendern das meiste die GPU macht, und auf dinge die auf der CPU laufen einfach mehr threads packen.
Aber ganz ehrlich, solange du auf Desktop unterwegs bist sollte erst ab mehreren 10tsd entities der Fall sein.
Update und rendern mischen möchtest du nicht. Da verlierst du mehr als du gewinnst und hast noch eine deutlich komplexere game loop
Re: Frage zur Gameloop und Entity Iterationen
Verfasst: 08.12.2024, 21:04
von Krishty
Ich habe Performance-Probleme erst ab 40.000 Entities gespürt. Dann, wie Schrompf sagte, Draw Calls auf die GPU verschoben. Hat stark geholfen, aber auch das Programm deutlich verkompliziert.
Also mach erstmal wie gehabt weiter und kümmer dich drum, falls es zum Problem wird.
Re: Frage zur Gameloop und Entity Iterationen
Verfasst: 08.12.2024, 21:34
von Andy16823
ok :) vielen dank, dann kann ich das ja so lassen. Ich habe ja mehrere Layer und da könnte ich evtl eine eigenschaft einfügen ob diese geupdated werden sollen. So könnte man einfach statische Entitys überspringen.
Re: Frage zur Gameloop und Entity Iterationen
Verfasst: 09.12.2024, 11:42
von antisteo
Ich würde fast schon Animations- und Renderpass von der Spiellogik entkoppeln.
Beispiel: Spiellogik läuft zwischen 2 und 20 Ticks / s durch (2 für ein Strategiespiel, 20 für was anderes)
Für Egoshooter will ich mal probieren, dass die Tastaturanschläge mit Millisekunden-Timestamps versehen sind und dann synchron auf dem Server nach Timestamp sortiert exakt in die Simulation einfließen. Der Spieltakt könnte dann ~10 Ticks/s betragen und alles dazwischen wird nur animiert.