Frage zur Gameloop und Entity Iterationen

Design Patterns, Erklärungen zu Algorithmen, Optimierung, Softwarearchitektur
Forumsregeln
Wenn das Problem mit einer Programmiersprache direkt zusammenhängt, bitte HIER posten.
Antworten
Andy16823
Beiträge: 24
Registriert: 18.06.2014, 17:22

Frage zur Gameloop und Entity Iterationen

Beitrag 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
Benutzeravatar
Schrompf
Moderator
Beiträge: 5114
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas
Wohnort: Dresden
Kontaktdaten:

Re: Frage zur Gameloop und Entity Iterationen

Beitrag 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.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Matthias Gubisch
Establishment
Beiträge: 498
Registriert: 01.03.2009, 19:09

Re: Frage zur Gameloop und Entity Iterationen

Beitrag 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
Bevor man den Kopf schüttelt, sollte man sich vergewissern einen zu haben
Benutzeravatar
Krishty
Establishment
Beiträge: 8336
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Frage zur Gameloop und Entity Iterationen

Beitrag 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.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Andy16823
Beiträge: 24
Registriert: 18.06.2014, 17:22

Re: Frage zur Gameloop und Entity Iterationen

Beitrag 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.
antisteo
Establishment
Beiträge: 938
Registriert: 15.10.2010, 09:26
Wohnort: Dresdem

Re: Frage zur Gameloop und Entity Iterationen

Beitrag 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.
http://fedoraproject.org/ <-- freies Betriebssystem
http://launix.de <-- kompetente Firma
In allen Posts ist das imo und das afaik inbegriffen.
Antworten