Sehr lange Ladezeiten bei Games

Für allgemeine Fragen zur Programmierung, welche nicht! direkt mit Lazarus zu tun haben.
Antworten
Mathias
Beiträge: 6210
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Sehr lange Ladezeiten bei Games

Beitrag von Mathias »

Was ich mich schon vielmal gefragt habe, wieso gibt es Games, welche sehr lange Ladezeiten haben ?
Die betrifft auch viele PS3 und PS4 Games.

Wen ich mit Lazarus eine OpenGL-Animation programmiere, macht es flutsch an das Zeugs läuft.

Am schlimmsten ist es, da geht es eine Ewigkeit, bis ein Level geladen ist, da spielt man kurz un ist tot. und dann geht es wieder ein Schaltjahr bis alles neu geladen ist, dabei ist schon alles im Speicher.

Weis einer von euch was die Hauptursache für lange Ladezeiten ist ?
An der SSD kann es kaum liegen. Oder auch die CPUs sind unterdessen superschnell.

Auch bei sehr einfachen Android-Games geht, geht es zT. sehr lange,
Zuletzt geändert von Mathias am So 17. Dez 2023, 13:31, insgesamt 1-mal geändert.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6217
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Sehe lange Ladezeiten bei Games

Beitrag von af0815 »

Du hast hier keine nativen Anwendungen sondern die Games werden normalerweise mit Game-Engines bzw. Frameworks erstellt. Daher wird das Laden auch darüber gehen und wenn das geladen wird, so wird es sicher auch gleich entsprechend Katalogisiert und Einsortiert, das im Spiel selbst die maximalste Geschwindigkeit erreicht wird. Also Optimierung nicht auf Ladezeit sondern auf Abrufzeit im Game. Daher wundert es mich nicht.

Solche Effekte kannst du auch sehen, wenn du auf einem SQL-Server buchst. Viele kleine Buchungen nacheinander sind zwar zB. von einem CSV gleich in in einem Rutsch gelesen, wenn du dann mit hunderttausend von Einzelbuchungen arbeitest und dabei jedes mal vielleicht die Transaktionsgeschichte mit Sperrungen der Tabelle verwendest, wird es auch sehr langsam. Da kann man auch einiges optimieren :-), wenn das aber über ein Framework geht, so ist man in seinen Gestaltungsmöglichkeiten auch beschränkt und man ist abhängig auf was das Framework optimiert ist.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

hum4n0id3
Beiträge: 301
Registriert: So 5. Mai 2019, 15:23

Re: Sehe lange Ladezeiten bei Games

Beitrag von hum4n0id3 »

Bau doch einfach mal statt nur einer OpenGL-Animation einen ganzen Level in der Qualität eines PS3 oder PS4 Games nach und vergleiche dann.

Warf
Beiträge: 1913
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: Sehe lange Ladezeiten bei Games

Beitrag von Warf »

Mathias hat geschrieben:
Do 14. Dez 2023, 08:57
Am schlimmsten ist es, da geht es eine Ewigkeit, bis ein Level geladen ist, da spielt man kurz un ist tot. und dann geht es wieder ein Schaltjahr bis alles neu geladen ist, dabei ist schon alles im Speicher.
Das nennt sich Hotloading oder Pipelining. Spiele Assets und Level sind so groß das nicht alles in den Speicher passt, stattdessen werden die Assets für Sachen in der umgebung nachgeladen bevor sie angezeigt werden müssen, und sachen die zu weit weg sind werden aus dem Speicher geschmissen.
Stell dir einfach vor, du hast einen Sichtbarkeitsradius von 100 metern, dann wird alles was im Umkreis von 150 metern ist geladen, sodass du in der Zeit in der du 50 Meter läufst dann die nächsten 50 Meter nachladen kannst. (Oft werden auch dinge wie Flure oder Aufzüge benutzt um das innere von Häusern nachzuladen, gibt da ne ganze Menge tricks um es so aussehen zu lassen als würde es nicht laden müssen)

Wenn du jetzt neu startest, weil dein Character gestorben ist und du zum letzten Speicherpunkt zurückgesetzt wirst, sind all die Dinge die an diesem Speicherpunkt waren schon lange nicht mehr im Speicher und es ist im Grunde so als würdest du einen kompletten "Kaltstart" machen.
Mathias hat geschrieben:
Do 14. Dez 2023, 08:57
Weis einer von euch was die Hauptursache für lange Ladezeiten ist ?
An der SSD kann es kaum liegen. Oder auch die CPUs sind unterdessen superschnell.
Wenn ich mir mal Anschaue Baldurs Gate 3 hat ~130 GB Festplattenspeicher gebraucht, das meiste davon ist Grafik. Moderne Spiele haben Problemlos 4k Texturen und Hochauflösende Modelle. Das ist einfach ne ganze Menge an Daten.
Mathias hat geschrieben:
Do 14. Dez 2023, 08:57
Auch bei sehr einfachen Android-Games geht, geht es zT. sehr lange,
Smartphone Speicher ist auch Grundsätzlich verhältnissmäßig langsam weil die eingebaute Hardware, besonders außerhalb von Flagship Geräten, einfach nicht unbedingt die beste ist. Grade bei Mittel bis Niedrigpreisigen Geräten ist der Speicher gerne mal einen Faktor 10-20 langsamer als eine gute SSD für den PC. Bei den Flagship/Premium Geräten (800€ aufwärts) sollte das hingegen vergleichbar mit PC SSD performance sein, allerdings ist selbst da ein Unterschied was Caching angeht. Mein PC mit 48 GB RAM kann natürlich viel mehr Daten cachen als mein Smartphone mit nur 8GB

PascalDragon
Beiträge: 834
Registriert: Mi 3. Jun 2020, 07:18
OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
CPU-Target: Aarch64 bis Z80 ;)
Wohnort: München

Re: Sehe lange Ladezeiten bei Games

Beitrag von PascalDragon »

Und dann kommt auch noch hinzu, dass Spiele schon relativ lange auf Shader setzen und diese müssen auch erstmal kompiliert werden, damit sie zur Hardware passen.
FPC Compiler Entwickler

Mathias
Beiträge: 6210
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Sehe lange Ladezeiten bei Games

Beitrag von Mathias »

Da kann man auch einiges optimieren :-), wenn das aber über ein Framework geht, so ist man in seinen Gestaltungsmöglichkeiten auch beschränkt und man ist abhängig auf was das Framework optimiert ist.
Das Framework könnte echt ein Problem sein. Ich könnte mir vorstellen, das solche in Java oder gar Python geschrieben sind.
Was mir bei den Games auffällt, ist gibt bei der Ladezeit recht grosse Unterschiede, auch wen die Grafik auf gleich hohem Niveau ist.
Und dann kommt auch noch hinzu, dass Spiele schon relativ lange auf Shader setzen und diese müssen auch erstmal kompiliert werden, damit sie zur Hardware passen.
Dies kann ich mir sehr schlecht vorstellen, die Shader sind sehr schnell kompiliert. Besonders wen sie schon als SPRIV vorkompiliert sind, geht dies sehr schnell.
Ich habe sogar ein Shader-Demo, da ist der Fragment-Shader über 100KB gross, und dies ist für einen shader schon fast gigantisch. Es wird eine komplette 3D-Stadt gerechnet, bei der man durchfliegt. Kaum ist F9 gedrückt und schon läuft es.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Warf
Beiträge: 1913
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: Sehe lange Ladezeiten bei Games

Beitrag von Warf »

Mathias hat geschrieben:
Fr 15. Dez 2023, 17:39
Das Framework könnte echt ein Problem sein. Ich könnte mir vorstellen, das solche in Java oder gar Python geschrieben sind.
Was mir bei den Games auffällt, ist gibt bei der Ladezeit recht grosse Unterschiede, auch wen die Grafik auf gleich hohem Niveau ist.
Die typischen engines wie unity, Godot, unreal und co sind alle in C++ geschrieben und extrem optimiert. Die verwenden für assets so genannte Pipelines in denen wenn du das Spiel kompiliert die Texturen etc. In optimierte Formate für die engine überführt um Ladezeiten weiter zu minimieren (z.b. Texturen zusammen führen zu tilemaps)

Dazu kommen jede Menge an caching und indexing, in denen Jahre an Entwicklung und Optimierung stecken.
Die Performance die diese engines bereitstellen ist soweit optimiert das man das als Einzelentwickler vermutlich bei weitem nicht so gut bauen kann.

Wenn Spiele lange laden heißt das eigentlich eins von zwei Dingen, entweder ist es einfach eine massive Datenmenge, moderne spiele benutzen problemlos 4GB an GPU Speicher nur für Texturen, und bei 300 MB/s was so eine SSD kann, dauert das allein schon 14 Sekunden.

Was man bei Indy games oft sieht ist die andere Alternative, das die engine nicht richtig benutzt wird, assets werden zum falschen Zeitpunkt geladen, die Pipeline wird nicht effizient genutzt, etc.

Aber grade bei größeren Titeln ist es nicht technische Unfähigkeit, ich glaube du unterschätzt einfach die gigantische Datenmenge die da verarbeiten wird. Wir reden hier von gigabytes allein an Texturen, die Modelle, Animationen, Sounds und Videos noch gar nicht mit einberechnet

Mathias
Beiträge: 6210
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Sehe lange Ladezeiten bei Games

Beitrag von Mathias »

Aber grade bei größeren Titeln ist es nicht technische Unfähigkeit, ich glaube du unterschätzt einfach die gigantische Datenmenge die da verarbeiten wird. Wir reden hier von gigabytes allein an Texturen, die Modelle, Animationen, Sounds und Videos noch gar nicht mit einberechnet
Nur komisch, wie schon gesagt, es ist von Games zu Games recht unterschiedlich, obwohl man keinen grossen Grafik-Unterschied merkt.
Mir ist dies bei PS4-MARVEL-Avengers aufgefallen. Die Charakterien, welche sehr detailliert sind, gibt es eine Klapf und bewegen sich über den Bildschirm, während der Rest geladen wird. Die Landschaft sieht eher karg lich aus.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Antworten