Wähle deine Cookie-Einstellungen
Wir nutzen Cookies und ähnliche Tools zur Bereitstellung unserer Dienste, um zu verstehen, wie Kunden unsere Dienste nutzen, damit wir sie entsprechend verbessern können und zur Anzeige von Werbung.
Es gab ein Problem beim Speichern deiner Cookie-Einstellungen.
Zurück zu den Neuigkeiten

Hinter den Kulissen: Leistung

J Brian Smith

Hallo Leute! Ich bin J Brian und ich leite die grundlegende Technologieentwicklung für das Crucible-Team. Eines der Dinge, für die unser Team verantwortlich ist, ist die Leistung des Spiels.

 

In der Regel meint man damit, wie responsiv und flüssig sich das Spiel anfühlt. Leistungsprobleme können jedoch viele verschiedene Formen annehmen und viele verschiedene Ursachen haben. Zunächst wollen wir uns einige der wichtigsten Komponenten für die Leistung eines Spiels ansehen und berichten, woran wir seit Mai gearbeitet haben. Danach sprechen wir über unsere weiteren Schritte hin in eine bessere, leistungsstärkere Zukunft!

 


Framerate

Praktisch alle Spieler wissen: Mehr Bilder pro Sekunde (Frames per second oder kurz FPS) sind besser.  Probleme mit der Framerate können sich als konstant niedere Framerate ausdrücken, aber auch als Framerateeinbrüche (wenn ein einzelnes Frame viel länger braucht als vorherige). Unser Ziel ist es, dass Crucible auf Rechnern, die unsere empfohlenen Systemanforderungen erfüllen, bei „hohen“ Grafikeinstellungen konstant mit 60 FPS läuft.Auf High-End-Hardware sollte das Spiel noch viel schneller laufen und auf Hardware, die gerade die Mindestanforderungen erfüllt, sollte es bei „niedrigen“ Grafikeinstellungen zumindest mit konstanten 30 FPS laufen. Aktuell sind wir bei empfohlenen Spezifikationen die meiste Zeit bei 60 FPS, aber die Framerate fällt noch zu häufig zeitweise oder für einzelne „schlechte“ Frames unter diesen Wert.

 

In der Entwicklung sehen wir uns meist die „Framezeit“ statt der Framerate an. Um 60 FPS zu erreichen, darf jedes einzelne Bild maximal 16,5 Millisekunden brauchen. Unsere Arbeit dreht sich also darum, die Simulation und Darstellung der einzelnen Frames zu beschleunigen. Wir haben bereits über ein Dutzend Mikrooptimierungen für die Framerate durchgeführt und konnten seit Erscheinen die Framezeit auf Rechnern mit der empfohlenen Konfiguration um über 15 % reduzieren. Somit haben wir die kritische Schwelle überschritten, bei der die Mehrzahl unserer Frames weniger als 16,5 Millisekunden braucht. Die meisten dieser Verbesserungen haben wir erreicht, indem wir die Kernsysteme und den Engine-Code, der unsere Spiellogik und das Rendering ausführt, effizienter gemacht haben oder Teile unseres Codes, die unnötigerweise auf die Nutzung eines CPU-Kerns gleichzeitig beschränkt waren, so umgeschrieben haben, dass sie freie CPU-Kerne besser nutzen können.

 

Desynchronisation

 

Wenn der Status der Spielwelt in eurem Client (also die auf euren Rechnern ausgeführte Kopie des Spiels) und auf dem Server exakt derselbe ist, sind sie synchron – sie sind sich bezüglich des Status der Welt also „einig“. Eine Desynchronisation tritt auf, wenn sich Client und Server zu einem beliebigen Zeitpunkt bezüglich des Status der Welt uneins sind. Wenn das passiert, schickt der Server eine Korrektur an den Client und zwingt ihn, die Version des Servers hinsichtlich des Status der Welt zu übernehmen (der Server ist diesbezüglich stets die maßgebliche Autorität). Eine solche Korrektur bewirkt, dass sich die Welt aus eurer Perspektive in irgendeiner Weise unnatürlich verändert. Du oder andere Spieler werden dabei möglicherweise an einen anderen Ort „teleportiert“, eine vermeintlich ausgeführte Fähigkeit kann plötzlich unwirksam sein oder umgekehrt eine Fähigkeit „wie von Geisterhand“ ausgeführt werden, oder ein anderer Wert im Spiel kann sich auf unnatürliche Weise ändern. Wenn diese Desynchronisation für mehrere Frames hintereinander auftritt, fühlt sich das besonders schlecht an und kann zu Problemen mit Framerate und Bandbreite führen.

 

Aufgrund des Wesens der Datenübertragung über das Internet und von Niedriglatenz-Netzwerksynchronisierungsmodellen werden wir diese Fälle nie ganz vermeiden können, aber wir können sie reduzieren. Wir haben eine Reihe von Situationen gefunden, wo eine einzige Desynchronisation aufgrund eines verlorenen Internetpakets oder eines Logikfehlers eine Kette von Dutzenden Desynchronisationen hintereinander auslösen konnte. Durch Behebung mehrerer dieser Fehler konnten wir unsere gesamte Desynchronisationsrate gegenüber dem Erscheinen um über die Hälfte reduzieren.

 

Arbeitsspeicher

Wenn das Spiel den Arbeitsspeicher (RAM) oder das Video-RAM eures Systems fast zur Gänze nutzt, bricht die Leistung dramatisch ein, vor allem dann, wenn auch noch andere Programme und Systeme Ressourcen belegen. Wenn wir weniger Arbeitsspeicher verbrauchen, stößt das Spiel weniger wahrscheinlich an diese Grenzen, läuft flüssiger und kann möglicherweise sogar auf einer breiteren Palette an Hardware gespielt werden.

 

Unser Ziel ist es, die Arbeitsspeichernutzung im Vergleich zum Erscheinen um 3 GB zu reduzieren (was eine ganze Menge ist, wenn man bedenkt, dass das Spiel auf Rechnern mit 8 GB RAM läuft). Mit der Version vom 12. August haben wir den Arbeitsspeicherverbrauch bereits um 2,6 GB reduziert. Das Schwierigste dabei war, viel besseren Mess- und Berichtscode in unsere Engine zu integrieren, um Entwicklern detaillierte Daten dazu zu geben, was genau all den Arbeitsspeicher verbraucht. Bewaffnet mit akkuraten Daten darüber, welche Systeme und Inhalte welchen Arbeitsspeicher verbrauchten, konnten wir über ein halbes Dutzend wichtige Bereiche des Spiels sowohl hinsichtlich Code als auch Inhalt optimieren, um den Arbeitsspeicherverbrauch deutlich zu reduzieren, ohne dass die Spielerfahrung darunter leidet. Das verbessert die Spielerfahrung auf Geräten am unteren Ende des unterstützten Hardwarespektrums deutlich.

 

Bandbreite

Die meisten Internetverbindungen schwanken während eines Matches. Wenn das Spiel zu einem bestimmten Zeitpunkt mehr Daten senden oder empfangen muss, als eure Internetverbindung in diesem Moment übertragen kann, gehen Daten verloren und es kommt zu Desynchronisation und höherer Latenz. Indem wir die vom Spiel genutzte Bandbreite reduzieren, können wir dafür sorgen, dass solche Probleme seltener auftreten.

 

Eine unserer bisher wichtigsten Optimierungen in diesem Bereich betraf einige wenige Kernsysteme, die für die Synchronisierung ihrer Daten viel mehr Bandbreite gebraucht haben als nötig.

 


Fortschritte nachverfolgen

Damit kennt ihr nun die vier Faktoren, die einen Großteil der für Spieler spürbaren Leistung ausmachen: Framerate, Desynchronisation, Arbeitsspeicher und Bandbreite. Aber woher wissen wir, ob unsere Änderungen funktionieren?

 

Ohne konsequente Messung unserer Leistungsdaten ist es sehr schwer, zu wissen, ob wir tatsächlich Fortschritte erzielen! Wir haben die Leistung während der Entwicklung genau gemessen und arbeiten weiter daran, unser Verständnis sämtlicher Leistungsszenarien im gesamten Spiel zu verbessern. Es gibt drei grundlegende Wege, wie wir Leistungsveränderungen über die Zeit nachverfolgen:

 

  • Wir haben unsere Testautomatisierung verbessert, die automatisch Tests durchführt und Dutzende Male pro Tag detaillierte Daten zur Leistung des Spiels sammelt, um diese regelmäßiger und korrekter zu beschreiben. Mit diesen Daten sehen wir sofort, wenn neue Probleme auftauchen, und können die Wirksamkeit neuer Optimierungen überprüfen.

 

  • Wir ergänzen die automatisierten Daten durch tägliche manuelle Leistungstests. In diesen spielt unser Qualitätssicherungsteam das Spiel mit speziellen Tools und Code, der die Leistung aufzeichnet, um sicherzustellen, dass wir auch Daten aus echten Spielszenarien sammeln, die unseren automatischen Tests (die absichtlich jedes Mal unter exakt denselben Bedingungen testen) möglicherweise entgehen würden.

 

  • Zu guter Letzt sammeln wir noch auf übergeordneter Ebene Leistungsdaten aus „echten“ Spielen auf einer internen Webseite, um die tatsächliche Erfahrung der Spieler mit unseren Erwartungen aus den internen Tests abzugleichen.

 


Wie es weitergeht

Nachdem wir nun beschrieben haben, was zu hoher Leistung beiträgt, wie es derzeit mit diesen Faktoren in Crucible aussieht und wie wir sie messen, bleibt für heute nur mehr eines: der Blick in die Zukunft! Hier sind einige der Dinge, an denen wir gerade arbeiten, unterteilt in die oben eingeführten Kategorien:

 

Framerate

In unseren internen Tests auf Systemen mit empfohlener Konfiguration brauchen etwa 10 % unserer Frames immer noch 19 ms (ihr wisst ja, das Ziel sind maximal 16,5 ms) und 1 % der Frames brauchen circa 23 ms. Wir gehen davon aus, dass wir künftig noch weitere CPU-Kerne nutzen können, was die grundlegende Framezeit reduzieren wird, besonders auf leistungsstärkeren PCs mit mehr CPU-Kernen. Wir werden außerdem Situationen, die zu „schlechten Frames“ führen, genauer analysieren, um deren spezifische Ursachen besser zu beheben. Und zu guter Letzt arbeiten wir daran, die Arbeitslast für jedes einzelne Frame besser zu verteilen.

 

Unser langfristiges Ziel sind konstante 144 FPS auf leistungsstärkerer Hardware. Kurz- bis mittelfristig konzentrieren wir uns hauptsächlich darauf, auf Rechnern mit den empfohlenen Spezifikationen konstante 60 FPS zu erreichen. Der so erzielte Leistungsgewinn wird sich auch sofort in einer höheren Framerate auf leistungsstärkerer Hardware niederschlagen.

 

Desynchronisation

In den nächsten Monaten werden wir daran arbeiten, die aktuelle Anzahl an Desynchronisationen um mehr als die Hälfte zu reduzieren. Sie sollten dann nur noch selten auftreten, und das sollte das Spielgefühl insgesamt spürbar verbessern, besonders in heftigen Kämpfen. Diese Optimierungen ergeben sich aus Verbesserungen der Vorhersagelogik in Fällen, wo die vorhandene Vorhersage notwendig, aber fragil ist, sowie in der Entfernung unnötiger Vorhersagelogik.

 

Arbeitsspeicher

Wie bereits erwähnt, haben wir uns das Ziel gesetzt, den Arbeitsspeicherverbrauch von Crucible um 3 GB zu senken, wovon wir 2,6 GB schon realisiert haben. Wir denken, dass wir durch weitere geplante Code- und Inhaltsoptimierungen (insbesondere bei der Art, wie Geometrie in den Arbeitsspeicher geladen wird) dieses Ziel im nächsten Monat erreichen können.

 

Bandbreite

In unserer nächsten Version werden wir eine schnelle Komprimierungstechnologie einsetzen, um die Bandbreitennutzung um weitere satte 30 % zu reduzieren. Damit werden wir konstant unser Ziel erreichen, weniger als 300 kbit/s Download-Bandbreite zu nutzen (und die meiste Zeit sogar noch deutlich weniger).

 

Damit werden wir die Bandbreitenoptimierung fürs Erste weitgehend abgeschlossen haben. Wir werden uns jedoch auch ansehen, inwieweit wir die vom Spiel verwendete Upload-Bandbreite optimieren können. Wir nutzen insgesamt weniger Upload- als Download-Bandbreite, aber Erstere ist bei manchen Internetverbindungen geringer, deshalb kann es sich auszahlen, sie weiter zu optimieren, wenn sich die Gelegenheit ergibt.


 

Vielen Dank für euer Interesse und dass ihr Crucible spielt! Wir wissen, dass die Leistung ein entscheidender Punkt für die Spielerfahrung in einem kompetitiven Mehrspieler-Shooter ist. Wir werden in dieser Hinsicht nie vollkommen zufrieden sein und stets nach neuen Wegen suchen, um die Leistung im Spiel weiter zu verbessern. Wenn ihr euch dafür interessiert und Anmerkungen zu bestimmten Spielsituationen habt, bei denen es Probleme zu geben scheint, teilt sie uns bitte mit – der Discord-Kanal „#bugg reports“ ist der ideale Ort dafür.


V2