A Technische Analyse der Grafikwiedergabe In Cities: Skylines 2 hat man herausgefunden, warum die Leistung so schlecht ist. Vereinfacht ausgedrückt versucht das Spiel, die Stadtlandschaften mit einer erschreckenden Anzahl von Polygonen zu zeichnen, wobei nur wenige Systeme vorhanden sind, um die Menge zu reduzieren, wenn sie nicht benötigt wird. Das sollte in einem modernen Spiel nicht passieren, aber der jüngste Zusammenbruch deutet auch darauf hin, dass auch Veränderungen innerhalb von Unity daran schuld sind.
Noch bevor das Spiel herauskam, warnte Entwickler Colossal Order potenzielle Kunden, dass die Leistung von Cities: Skylines 2 „nicht den von uns angestrebten Benchmark erreicht“ habe.
Und als die Fortsetzung von City Management endlich erschien, stellte sich heraus, dass der Entwickler keine Witze gemacht hatte und die einzige Möglichkeit, auch nur annähernd eine anständige Bildrate zu erreichen, darin bestand, die meisten Grafikeinstellungen auf niedrig oder ganz auszuschalten. Der erste Patch für das Spiel hat der Sache ein wenig geholfen, aber Tatsache bleibt, dass es als Simulations-Management-Spiel wirklich nicht so GPU-abhängig sein sollte, wie es ist.
Die vollständige Antwort auf dieses Rätsel habe ich am Wochenende in einer Kurzfassung erfahren Reddit-Beitrag. Es enthält zwei Dinge: Einen Link zu a technische Analyse des Spiels, einschließlich einer Phase des Dekompilierens und Renderns von Softwaretools und einer hervorragenden Diskussion der Ergebnisse. Die Aufschlüsselung erfolgte durch den Softwareentwickler Paavo Huhtala, der das Innenleben des Spiels mit einem feinen Zahnkamm erforschte.
Es ist eine lange und dichte Lektüre, insbesondere wenn Sie nicht viel über das Rendern wissen, aber das Hauptproblem besteht darin, dass die Stadtlandschaften mit gezeichnet werden Weg zu viele Polygone. Und ich meine, um mehrere Größenordnungen zu viel. Wie klingen 25.000 Eckpunkte (Ecken eines Dreiecks) für ein einfaches Wäscheleinenmodell?
Wenn Sie einen Anhaltspunkt benötigen, nehmen Sie die in Cyberpunk 2077 verwendeten Kleidungsmodelle. Einige von ihnen verwenden eine enorme Anzahl von Polygonen und ich habe eines mit bis zu 29.500 gesehen. Aber das ist Dreiecke und diese werden gemeinsame Ecken haben, da sie „zusammengenäht“ sind. Die tatsächliche Anzahl von Eckpunkte für diese Jacke könnte es nur 8.000 sein.
Es ist so viel los in der Cities: Skylines 2-Engine, die in einem einzigen Frame fast 7.000 Draw-Calls und über 50.000 API-Calls (Anfragen des Spiels über DirectX) durchführt. Nun, diese Zahlen für sich genommen und in keinem Kontext bedeuten nicht viel, aber sie sind im Großen und Ganzen enorm und weisen darauf hin, dass das Spiel viel zu viel von der GPU verlangt.
Die Aufnahme einer zufälligen Szene im Stadtbild von Cyberpunk 2077 zeigt beispielsweise, dass zum Rendern des Frames weniger als 10.000 API-Aufrufe erforderlich sind. Nun kann man diese beiden Spiele nicht direkt vergleichen, da sie sehr unterschiedlich sind, und Stadtsimulationsspiele werden wahrscheinlich mehr Anrufe tätigen als jeder Shooter, da sich die Welt so sehr verändert und es viele interagierende Modelle gibt. Aber trotzdem sind 50.000 … nun ja, ein viel!
Normalerweise würden so viele Aufrufe ein Spiel stark an die CPU binden, aber das ist bei Cities: Skylines 2 nicht der Fall. Das liegt daran, dass es noch mehr Probleme gibt, die die GPU völlig beanspruchen. Viele der verwendeten Hochpolygonmodelle verfügen über keine sogenannten LOD-Versionen (Level of Detail).
Dies sind vereinfachte Versionen der Originalobjekte, die aus weniger Dreiecken bestehen und verwendet werden, wenn das Objekt weit von der Kamera entfernt ist. Mit anderen Worten: Es macht keinen Sinn, alle komplizierten Details aufzubewahren, wenn man sie nicht sehen kann.
Erinnern Sie sich an die 29.500-Polygon-Jacke, die ich zuvor erwähnt habe? Es wird im eigentlichen Spiel nie wirklich verwendet, da LOD-Versionen dieser Größenordnung diesen Wert deutlich senken. Aus der Ferne betrachtet wird das Kleidungsstück lediglich durch ein paar Dreiecke dargestellt und man erkennt es nicht, weil es auf dem Monitor nur ein paar Pixel sind.
Die Entwickler gaben offen zu, dass dies zu Leistungsproblemen führte und dass dies rechtzeitig behoben werden würde. Anscheinend wird die Entscheidung, Modelle mit hoher Polygonzahl zu verwenden, „in der Zukunft des Projekts relevant werden“, was auch immer das bedeutet.
Für die Frame-Analyse stellte Huhtala fest, dass 36 Millionen Dreiecke für mehrere Rendering-Durchläufe verarbeitet werden mussten. Obwohl viele davon nicht auf dem Bildschirm sichtbar sind, handelt es sich dennoch um eine übermäßig hohe Zahl, die nur dann größer wird, wenn sich die Stadt im Laufe des Spiels ausdehnt.
Es kommt jedoch noch schlimmer. Es scheint, dass Cities: Skylines 2 Objekte, die nicht besonders gut sichtbar sind, nicht besonders gut aussortiert und in Kombination mit der zum Erstellen von Schatten verwendeten Methode nicht auswählt (vier separate Rendering-Durchgänge nur für Schatten) wird eine Menge Zeit für die Verarbeitung von Daten verschwendet, die völlig unnötig ist. Fast drei Viertel aller Draw-Anrufe und die Hälfte der Frame-Zeit in der Analyse dienten lediglich der Erstellung der Schatten!
Aus diesem Grund schneidet das Spiel viel besser ab, wenn Sie die Detailstufen auf niedrig einstellen, Schatten deaktivieren und alles andere, was auf Geometrie basiert. Es sieht also so aus, als ob die Entwickler wirklich ein Chaos angerichtet haben und dass sie die volle Verantwortung dafür tragen sollten, nicht wahr? Na ja, vielleicht auch nicht.
Huhtalas Analyse geht über die bloße Untersuchung eines Rendering-Frames hinaus. Die Verwendung eines Dekompilierungstools, um einen Blick darauf zu werfen, wie das Spiel Unity (das Engine-Paket, mit dem das Spiel erstellt wurde) verwendet, zeigt eine Reihe von Problemen auf, die etwas außerhalb der Kontrolle der Entwickler lagen.
Cities: Skylines 2 scheint zwei Hauptfunktionen von Unity intensiv zu nutzen: PUNKTE Und HDRP. Ersteres ist eine komplexe, aber leistungsstarke Sammlung von Softwarepaketen, die es theoretisch ermöglichen, dass Spiele äußerst komplex und reich an Objektinteraktionen sind. Letzteres ist die High-Definition-Rendering-Pipeline der Engine und wird benötigt, wenn Sie die neuesten Grafikfunktionen in Ihrem Spiel nutzen möchten.
Sie müssen jedoch nicht wirklich verstehen, was sie tun, da das eigentlich nicht das Problem ist. Kolossale Ordnung begann mit der Arbeit auf Skylines 2 im Jahr 2018, eine ganze Weile bevor DOTS veröffentlicht wurde. Sogar HDRP war damals noch nicht vollständig bereit oder ganz sicher nicht an seinen aktuellen Stand heran. Huhtala weist darauf hin, dass die Entwickler eine Menge Code selbst schreiben mussten, einfach weil Unity entweder nicht über das Nötige verfügte oder der Status der neuen Softwarefunktionen zu diesem Zeitpunkt erhebliche handgefertigte Lösungen erforderte.
Ich persönlich bin der Meinung, dass es so aussieht, als ob der Entwickler mit dem Zeitpunkt, zu dem sich die Dinge unter der Haube von Unity veränderten, sehr unglücklich war, sich aber dennoch für diesen Weg entschieden hat, obwohl er wusste, dass er eine Menge Programmierarbeit leisten musste um durch die Systemänderungen zu navigieren.
Vielleicht hatte Colossal Order gehofft, dass Unity alle Änderungen schnell durchsetzen und genug Zeit gehabt hätte, sich mit allem richtig auseinanderzusetzen. Es sieht jedoch so aus, als ob man sich einfach mit dem begnügen musste, was es hatte, und am Ende einige schlechte Entscheidungen bei den Rendering-Techniken getroffen hat.
Aber unabhängig davon ist das Endergebnis, dass das Spiel wirklich schlecht läuft, da es von einem Team erstellt wurde, das einen Entwicklungsweg gewählt hat, bei dem Software verwendet wurde, die noch nicht vollständig fertig war. Zumindest hätten die Entwickler nicht viel Erfahrung damit gehabt, weil es so neu war.
Wenn es darum geht, Spiele für mehrere Plattformen und Genres zu entwickeln, Unity ist typischerweise der Motor der Wahl für Hunderttausende Projekte. Das heißt aber nicht, dass es einfach zu bedienen ist, und in seiner jetzigen Form ist es eher ein ziemlich komplexes System. Der Hersteller von Unity betont, dass, wenn man schon lange Spiele entwickelt, Der Wechsel zu DOTS ist eine große Veränderung.
Cities: Skylines 2 könnte das Spiel werden, das es sein sollte, und das alles wird mit der Zeit vergessen sein. Aber im Moment erinnert es uns daran, dass es schwierig ist, riesige und komplexe Spiele zu entwickeln hart und kann schwer schief gehen, wenn man frühzeitig die falschen Entscheidungen trifft.