Verbesserte Leistung beim RIFT Client

Von am 30 September 2013 gepostet
Kategorien: Vom Dev Team, Updates.

RIFT 2.4 enthält einige der größten inhärenten Verbesserungen, die wir bisher vorgenommen haben. Unsere Software-Ingenieure haben hart daran gearbeitet, unseren Renderer sowohl für hochwertige als auch für preiswertere Systeme zu optimieren. Als Resultat sollte nun jeder eine anständige Verbesserung der Bildrate sehen und bei einigen sollte die Kinnlade nach unten klappen, so imposant sind die Verbesserungen. Spieler mit Radeon HD 6800 Serienkarten beispielsweise haben nach dem Patch von 2.4 eine Zunahme der durchschnittlichen Bildrate von sage und schreibe 17% zu sehen bekommen. Weiterlesen und mehr erfahren ….

Verbessertes Culling

Eine der ganz wichtigen Aufgaben einer Spiel-Engine ist es, zu selektieren, was genau gerendert werden soll. Und das ist eine komplexere Angelegenheit, als man gemeinhin annehmen möchte. Das Culling-System ist dafür verantwortlich zu identifizieren, welche Objekte und Bereiche an die Grafikkarte gesendet werden, um gerendert zu werden. Wenn das Culling-System diese Aufgabe richtig erfüllt, bedeutet das weniger Arbeit für die Global Processing Unit (GPU). Andererseits kann das Culling-System selbst zu einem Engpass werden, wenn es zu langsam arbeitet.

Es gibt unterschiedliche Arten, um Culling durchzuführen und alle haben in verschiedenen Situationen bestimmte Vorteile. Ein einfacher Frustum Culler schließt Objekte aus, die sich hinter und seitlich von euch befinden oder die zu weit entfernt sind. Weil dieses System einfach ist, läuft es sehr schnell. Allerdings schließt ein Frustum Culler nichts aus, das von einem anderen Objekt verdeckt wird, wie beispielsweise ein Monster, das sich auf der anderen Seite einer Mauer befindet. Die Grafikkarte eines Frustum Cullers zeichnet zuerst das Monster und dann die Mauer darüber, was mehr Arbeit für die GPU bedeutet.

Seit dem Launch von RIFT nutzen wir eine zweite Ressource, eine Culling-Bibliothek von Umbra Software. Es ist ein cleveres System, bei dem eine Vorauswahl durch die Grafikkarte stattfindet, um festzulegen, welche Objekte letztendlich gezeichnet werden sollen. Das ist gut, weil die Grafikkarte einen großen Teil der Arbeit übernimmt und weil sie in jeder Umgebung funktioniert, wie z.B. Wälder, Städte, Dungeons und Dimensionen. Allerdings kann auch hier das GPU-Culling selbst einen Engpass verursachen, da Spieler immer höhere Auflösungen verwenden. Außerdem haben die meisten Spieler heutzutage mindestens 4 CPU-Kerne, und RIFT hat mehrere Kerne nicht so gut genutzt, wie es möglich gewesen wäre.

Mit RIFT 2.4 haben wir für den Umbra 3 Culler Unterstützung ins Spiel gebracht: Das neue System benutzt mehrere CPU-Kerne anstelle der GPU, um zu ermitteln, welche Objekte gerendert werden sollen. Dadurch werden bei der GPU Kapazitäten frei, um das eigentliche Rendering vorzunehmen. Der größte Nachteil ist hier, dass der Umbra 3 Culler nur mit statischer Geometrie funktioniert, was wiederum zur Folge hat, dass er in Bereichen mit vielen dynamischen Objekten, wie z.B. Dimensionen, überhaupt nicht funktioniert. Zudem ist der neue Umbra Culler nicht unbedingt für alle Spieler schneller. Spieler mit einer älteren CPU, oder diejenigen, deren Grafikkarte keine Engpässe verursacht, sehen möglicherweise überhaupt keine verbesserte Leistung.

Um herauszufinden, welcher Culler der Beste für RIFT ist, haben unsere Ingenieure ein System im Spiel implementiert, das in gewissen Abständen Bilder mit allen drei Cullers (Frustum, Umbra und Umbra 3) rendert. Wir haben dieses System ursprünglich für unsere internen Vergleiche entwickelt, damit wir die verbesserte Leistung durch den Umbra 3 sehen konnten. Aber nach der Implementierung ist uns klar geworden, dass dadurch auch auf elegante Weise das Problem gelöst werden kann, herauszufinden, welcher Culler am besten für das Rendering einer bestimmten Szene auf einer bestimmten Hardware eines Spielers geeignet ist.

Dank dieses Systems kann RIFT automatisch den Culler, den es benutzt, anpassen, während du dich durch die Welt bewegst. Zum Beispiel funktioniert Umbra 3 sehr gut in der Sturmbucht, da sich dort viele Mauern und Gebäude befinden – insbesondere mit neuerer Hardware. Der ursprüngliche Umbra Culler funktioniert besser in bestimmten Teilen der offenen Welt und mit bestimmten GPU/CPU-Kombinationen.

Überraschenderweise ist der super-einfache Frustum Culler manchmal der Schnellste von allen! Das zeigt auch, dass es manchmal schwierig ist, vorauszusehen, wo der Engpass auftritt. Einige Leute erhalten ihre höchste Bildrate, wenn das Spiel nicht lange im Weg ist und einfach nur Polygone an die Grafikkarte sendet.

Pixel-Granularität

Moderne Monitore werden immer größer! Die Auflösung 1920×1080 ist weit verbreitet und so manch einer gibt sich auch damit nicht mehr zufrieden. Bildschirme mit hoher Auflösung sind klasse für deine Benutzeroberfläche, weil dadurch der Text gestochen scharf und somit einfacher zu lesen ist. Aber so kommt natürlich Vieles dazu, was zusätzlich im Spiel gerendert werden muss (die Landschaft, dein Charakter, andere Spieler und Monster etc.) Wenn dein Bildschirm doppelt so breit ist, muss auch die doppelte Anzahl an Pixeln gerendert werden und dadurch verringert sich deine Bildrate. Und ob du es glaubst oder nicht, diese zusätzlichen Pixel bringen bei einem 3-D-gerenderten Bild nicht unbedingt viel. Auch wenn das menschliche Auge Text und feine Linien mit geringer Auflösung sehr gut wahrnehmen kann, tut es sich um einiges schwerer, ein Bild mit niedriger Auflösung zu registrieren.

“Nun denn”, sprachen da unsere für das Rendering zuständigen Ingenieure eines Tages, “was wäre denn, wenn wir das Beste aus beiden Welten hätten? Was wäre, wenn wir die Benutzeroberfläche in einer hohen Auflösung wiedergeben, damit all dort gestochen scharf und gut leserlich ist. Und den Rest könnten wir mit einer niedrigeren Auflösung rendern, um die Bildrate zu verbessern!”

Und das haben wir tatsächlich auch gemacht. Es gibt einen neuen Schieberegler namens “Pixel-Granularität” im Einstellungen-Menü unter Grafik Erweitert. Der Standardwert ist 100, was bedeutet, dass die Welt im Spiel in der vollständigen Auflösung wiedergegeben wird. Ihr könnt die Auflösung auf 50 heruntersetzen. Ab diesem Wert wird der Bildschirm (außer dem UI) zunächst in der halben Auflösung und dann wieder in höherer Auflösung gerendert.

Wer aber ein Hightech-Gerät mit allen Schikanen besitzt und für Gamer, die Dual-Grafikkarten besitzen, nur ein müdes Lächeln übrig hat, der sollte die Pixel-Granularität bei 100 belassen. Wer sich aber nichts sehnlicher wünscht als eine schnellere Bildrate, der sollte es einfach mal ausprobieren. Die meisten Devs in unserem Team sind sich einig, dass man die Pixel-Granularität bis auf 75 oder 80 heruntersetzen kann, ohne dass die Qualität zu sehr darunter leidet, während die Bildrate immer noch eine ganz nette Steigerung erhält.

Ihr glaubt mir nicht? Dann schauen wir uns doch mal ein paar Screenshots an. Sie wurden im BMP-Format mit kompletter Auflösung gemacht, damit sie exakt anzeigen, was ich auf meinem Bildschirm habe.

Hier haben wir einen Teil von Sturmbucht, der in Ultra-Einstellungen mit Pixel-Granularität 100 eingestellt ist. Sieht gut aus und die Bildrate beträgt ansehnliche 41 Bilder pro Sekunde. Die Latenz beträgt 0 Millisekunden, aber das ist nur der Fall, weil es sich um einen internen Server handelt, der nur ein paar Meter von meinem Schreibtisch entfernt steht. :)


Pixel-Granularität 100

Und das hier ist derselbe Ort, der nur Augenblicke später mit einer Pixel-Granularität 75 wiedergegeben wird. Meine Frage lautet: Würdet ihr euch über die verringerte Qualität beschweren? Würdet ihr das überhaupt bemerken? Ich nicht. Aber mit Sicherheit würde ich es merken, wenn die Bildrate sich um satte 15% von 41 auf 47 Bilder pro Sekunde verbessern würde.

Pixel-Granularität 75

So, und jetzt machen wir den Härtetest mit 50, nur damit ihr mal seht, wie es aussieht. Hier findet eine merkliche Verringerung der Qualität statt. Sogar mein geschultes Ingenieurs-Auge registriert das. Aber es findet eben auch eine Steigerung der Bildrate um 22% im Vergleich zur Version mit der optimalen Qualität statt, nämlich bis zu 50 Bilder pro Sekunde.

Pixel-Granularität 50

Wie ihr den Schieberegler einstellt, hängt letztendlich von eurer Hardware und euren Vorlieben ab. Aber ich schlage vor, dass ihr mal ein bisschen herumprobiert – auch wenn ihr das nur tut, um zu erfahren, wie Simon Ffinch den “Magischen Blitzbuff für das Bildraten-Schieberding” zu nennen pflegt.

Verbesserungen bei günstiger Hardware

Wir haben auch jede Menge Mühe in die Leistungsverbesserung bei Hardware, die nicht die optimale Qualität besitzt, gesteckt. Den Löwenanteil hierbei machen Korrekturen und Anpassungen aus, die nicht so ohne Weiteres ersichtlich sind, damit auch bei geringeren Einstellungen die Qualität stimmt. Aber wir haben auch ein paar Angleichungen an den grafischen Schiebereglern für bestimmte Details vorgenommen, damit die Anzahl der Polygone, die deine Hardware rendern muss, geringer ist. Und das kann dann eben mehr Bilder pro Sekunde zur Folge haben.

Hier ist ein Bild von der Farm zur Alten Weide in der Freimark, das mit den minimalen Qualitäts-Einstellungen von vorher aufgenommen wurde:

Standard-Distanz

Und hier ist derselbe Ort, wenn ich die niedrigsten Einstellungen für Sichtweite, Objektentfernung und Objektdetails wähle:

Geringste Distanz

Klar, die Geeks unter euch, die sich ihren Superrechner nach 2011 zugelegt haben, rümpfen bei diesen beiden Bildern wahrscheinlich nur die Nase. Aber wer ein älteres Modell besitzt, für den könnte es durchaus von Interesse sein, dass sich die Bildrate um sagenhafte 18% verbessert hat. Ja, ihr bekommt jetzt nicht diesen schönen Panoramablick in die Ferne und Erdrisse sehen bei Weitem nicht so cool aus ohne die wirbelnden Steine, aber wenn man Dinge aus der Nähe betrachtet, sehen sie so cool wie vorher aus. Und natürlich kann man das mit dem Schieberegler für Pixel-Granularität kombinieren, um sogar noch bessere Ergebnisse zu erzielen.

Zusammenfassung

Das einzige, was wir bei diesen Verbesserungen nicht tun wollten, war, über das zu sprechen, was wir euch noch nicht bieten können. Deshalb haben wir auf Live-Daten von RIFT 2.4 gewartet, bevor wir die Neuigkeiten stolz verkünden. Aber um wirklich zu beweisen, dass wir die Leistung von RIFT verbessert haben, haben wir extensiv Daten vor und nach dem Patch gesammelt – und zwar von echten Live-Spielern, die ihre Hardware live benutzen und nicht die Eckdaten von unseren internen Systemen:

  • Spieler aller Qualitätsstufen haben eine durchschnittliche Erhöhung der Geschwindigkeit von 5% erlebt.
  • Spieler, deren Qualitätseinstellungen sich auf das Minimum beliefen, haben insgesamt eine Erhöhung der Geschwindigkeit von 11% erlebt und von beinahe 20% in der offenen Welt.
  • Spieler mit mittleren Qualitätseinstellungen sahen eine Steigerung der Bildrate um 10% in der offenen Welt.
  • Spieler, deren Qualitätseinstellungen auf “Hoch” gesetzt waren, erlebten eine verbesserte Bildrate von ca. 11% im Eisengrab, Hammerhall, Finsteren Tiefen und der Tiefschlagmine.
  • Spieler, deren Qualitätseinstellung “Hoch” oder “Ultra” betrug, haben eine Steigerung von 5 – 6% in der Sturmbucht erlebt.
  • Spieler auf allen Qualitätsstufen haben in den Kriegsfronten im Durchschnitt eine Steigerung von 8% erlebt.

Wie ihr sehen könnt, haben wir unsere Verbesserungen in mehreren Bereichen vorgenommen. Und da wir die Standardeinstellungen der Schieberegler nicht verändert haben, hat sich das auch nicht negativ auf die Grafikqualität ausgewirkt, als wir RIFT 2.4 designt haben. Da Spieler außerdem gerne an ihren Einstellungen herumtüfteln, erwarten wir auch, dass die durchschnittliche Bildrate sich weiterhin verbessern wird.

Und wie immer, es erwartet euch noch mehr. Es ist unsere niemals endende Quest, dass wir immer auf der Suche nach neuen Wegen sind, wie wir euer Spielerlebnis in RIFT verbessern können.

Chris “Aahz” Swiedler
Engineering Development Director

Stichworte: