Entwickler-Blog: Optimierung der Kluft

von Riot Aeon

Als wir uns zum ersten Mal hingesetzt hatten, um unsere Prioritäten für die Aktualisierung der Kluft festzulegen, wussten wir, dass die Leistung notwendigerweise eine unserer wichtigsten Herausforderungen darstellen würde. Denn: Was bringt eine schnieke Aktualisierung, wenn euer Toaster beim Laden von selbiger explodiert? Mit dieser Überlegung im Hinterstübchen haben wir uns das Ziel gesetzt, dafür zu sorgen, dass die Aktualisierung der Kluft der Beschwörer auf den Rechnern der Spieler mindestens ebenso gut laufen wird wie die bisherige Kluft. Seit wir die Aktualisierung angekündigt haben, haben wir an der Optimierung gearbeitet und möchten uns jetzt die Zeit nehmen, die neuesten Einzelheiten mit euch zu besprechen.


Ingenieurskunst

Wenn ein Spieler daran denkt, wie ein Spiel mit der eigenen Ausrüstung klarkommt, hat er meistens die technische Seite des Spiels im Blick. In Wirklichkeit schließt die Leistung eine enge Zusammenarbeit zwischen Künstlern und Ingenieuren ein, die darauf abzielt, Wege zu finden, Kunst auf effiziente Weise zu implementieren. Bei der Aktualisierung der Kluft der Beschwörer arbeiteten unsere Ingenieure daran, den Künstlern die Werkzeuge und Informationen an die Hand zu geben, welche sie benötigten, um eine Umgebung zu schaffen, die sowohl künstlerisch als auch leistungsmäßig attraktiv ist.

Das Ziel des künstlerischen Teams, die optische Wiedergabetreue zu erhöhen, während die Leistung derer vor der Aktualisierung gleichen soll, bedeutete, dass sie eine Reihe höchst optimierter Funktionen benötigten, die es ihnen dann erlauben würden, eine handgemalte Karte zu erstellen. Das lief letztlich darauf hinaus, dass das Ingenieurteam von Grund auf einen neuen Hochleistungs-Renderer hinbasteln musste.

Grob gesagt ist ein Renderer dafür verantwortlich, Spielgeometrie auf euren Bildschirm zu bringen, und der neue Renderer für die Kluft vereinfacht diesen Prozess auf eine Art und Weise, die zu höherer Leistung führt, besonders auf älteren Grafikkarten. Zudem erlaubt er es uns, die Spezifikationen, wie die Grafikkarte eines bestimmten Rechners die Umgebung rendert, feiner einzustellen, und es gilt: Abstimmung = Geschwindigkeit = Leistung. Außerdem haben wir durch den Renderer mehr Kontrolle über die Texturformate der Karte, wodurch wir die Speichernutzung der Grafikkarte verringern können.


Weniger ist mehr

Abgesehen von der Optimierung in ingenieurtechnischer Hinsicht suchten unsere Künstler auch noch kreative Wege, bei der Leistung zu sparen. Einer der ersten Aspekte, den wir da in den Blick nahmen, war die Anzahl der Polygone, besonders der Dschungelkreaturen. Wir wissen, dass die meisten von euch das wissen, aber als Erinnerung: Ein Polygon ist eine Reihe von Punkten im Raum, die sich zusammenfügen, um eine Oberfläche zu bilden.

Genauer gesagt geht es um Dreiecke, die einfachste Form der Polygone. Oft werden mehrere Dreiecke genutzt, um in Spielen komplexe Oberflächen zu bilden, und die Anzahl dieser Polygone auf dem Bildschirm ist ein guter Indikator dafür, wie viel Arbeit eure Grafikkarte leisten muss. In diesem Fall haben Rechner mit weniger Leistung sehr zu knabbern, wenn die Anzahl der Dreiecke hoch geht. Wir haben ganz bewusst versucht, die Zahl der Dreiecke (und Polygone allgemein) niedrig zu halten, während wir diese Aktualisierung entwickelt haben, wodurch wir bei der Leistung ordentlich einsparen konnten.

Außerdem haben wir uns die Anzahl der „Bones“ angesehen, wobei ihr euch „Bones“ als die Gelenke in einem Skelett vorstellen müsst. Sie haben, wenn sie sich bewegen oder rotieren, Einfluss auf die Dinge um sie herum. Im Falle von Computergrafiken erlaubt ein Bone die Artikulation (oder Animation) der Geometrie um ihn herum. So können die Bones bei einem Dschungelmonster an verschiedenen Punkten sitzen, damit seine Bewegung oder seine Angriffe animiert werden können. Wie ihr euch wahrscheinlich denken könnt, gilt auch hier: weniger Bones = bessere Leistung. Also haben wir bei der Aktualisierung abermals auf eine Minimierung der Anzahl der Bones in den beweglichen Elementen der Umgebung geachtet.

Diese beiden Verbesserungen haben auch noch eine andere Möglichkeit der Leistungsoptimierung offenbart. Wir stellten fest, dass Kartenelemente wie Türme und Vasallen beim „Verformen“ (z.B. bei der Bewegung ihrer Polygone als Reaktion auf Bewegung der Bones) sehr ineffektiv waren und viel mehr Bone-Polygon-Verbindungen aufwiesen, als dies unter Zuhilfenahme der neuen Architektur der Aktualisierung nötig wäre. Das Zurechtstutzen der Anzahl der Bones und Polygone, von dem wir sprachen, führte so dazu, dass wir auch die Anzahl der mit einzelnen Polygonen verbundenen Bones zusammenstrichen, womit wir bei einem Vorgang, der sonst sehr ressourcenintensiv ist, beträchtliche Einsparungen bei der Leistung erzielten.


Kleiner als die Summe seiner Teile

Ein weiterer großer Schritt in Richtung Leistungsoptimierung war das Implementieren eines Prozesses namens „Atlassing“. Dieser Prozess verbindet „Texturing“ (das Zeichnen der bemalten Oberfläche eines Modells) mit „UV-Mapping“ (dem Projizieren der Textur auf ein 3D-Modell) auf eine Art und Weise, welche die Leistung noch etwas verbessert.

Die UV-Koordinaten eines Modells legen fest, wie es die Textur liest und welche Teile der Textur auf welcher Oberfläche erscheinen. Normalerweise ist der Raum zwischen den UV-Koordinaten recht groß und ein Modell und seine Texturen sehen etwa so aus:

Beim Atlassing werden mehrere Texturen zu einer größeren Textur vereint, die wir dann stauchen oder dehnen können, was davon abhängt, wie detailreich wir sie haben möchten. Was natürlich von unschätzbarem Wert ist, wenn es bei den Texturen darum geht, wertvolle Speichernutzung einzusparen. Anstatt beispielsweise fünf Texturen von 1024x1024 zu laden, können wir einfach eine Textur von 2048x2048 nutzen und bei der Leistung ein bisschen sparen.


Und auch all die kleinen Dinge

Wir hoffen, wir konnten euch einen kleinen Einblick in die Dinge gewähren, die unter der Kühlerhaube ablaufen werden, sobald das neue Aussehen der Kluft auf die Liveserver kommt. Was wir oben beschrieben haben, deckt natürlich nicht all unsere Bemühungen zur Leistungsoptimierung ab – da gibt es von Änderungen an der Einfärbung der Charaktere, Verbesserungen am Nebel des Krieges über Rationalisierung des Navigationsnetzes bis hin zu schlichten Fehlerbehebungen einiges. Wir waren recht fleißig und hielten überall nach Möglichkeiten der Optimierung Ausschau. Von Beginn an gehörte die Kompatibilität mit schwächeren Rechnern zu unseren Hauptzielen bei der Aktualisierung und wir werden auch weiter daran arbeiten und weitere Feinabstimmungen vornehmen, während wir uns der offenen Beta nähern – und natürlich auch darüber hinaus.


2 years ago

Suchwörter: 
DevBlog