Wunderwaffe oder Rohrkrepierer: Was kann DirectX 12 wirklich?
Geht es nach Microsoft und den Herstellern von Grafikkarten, so soll die Spielentwicklung mit DirectX 12 zu höherer Leistung und mehr Kontrolle über die Hardware führen. Doch ein Entwickler von AAA-Spielen für den PC erzählte auf der Game Developers Conference 2017 eine andere Geschichte.
Nachdem Microsoft auf den letzten drei Ausgaben der Game Developers Conference in San Francisco für das neue Grafik-API DirectX 12 getrommelt hatte, standen in diesem Jahr einige Sessions von Entwicklern auf dem Programm, die über ihre Erfahrungen mit der neuesten DirectX-12-Ausgabe berichteten. Mehr Kontrolle, mehr Leistung bei größerer Hardwarenähe hatten die Microsoft-Entwickler versprochen. Doch wie sieht die Wirklichkeit aus? Darüber berichtete Jurjen Katsman, Studio Head und Technical Director des Studios Nixxes. Sein Studio arbeitet seit 1999 an PC-Umsetzungen und ist stolz auf deren Qualität. Zu den jüngsten Projekten gehören Deus Ex: Mankind Divided und Rise of the Tomb Raider.
DirectX 12: Nachlieferung per Patch
Windows 10 ist seit dem 29. Juli 2015 auf dem Markt - und damit auch DirectX 12. Jurjen Katsman war zunächst begeistert darüber, "denn wir hatten mit DirectX 11 am Ende viele Probleme". Rise of the Tomb Raider fühlte sich wie ein ideales erstes Projekt für das neue API an, doch an den Start ging das Action-Adventure am 28. Januar 2016 nur mit DirectX 11. Erst am 9. März folgte ein DirectX-12-Patch, am 8. Juli gar erst Support für mehrere Grafikkarten und Async Compute. Na gut, dafür würde es bei Deus Ex: Mankind Divided besser laufen, oder? Pustekuchen: Das Spiel erschien am 23. August 2016, erst über zwei Wochen später, am 8. September, unterstützte es DirectX 12. Und noch einmal mehr als fünf Wochen beziehungsweise drei Monate zogen ins Land, bevor es mit mehreren AMD- und Nvidia-Karten in einem PC funktionierte.
Warum? "Die Programmierung in DirectX 12 scheint einfach zu sein, ist aber verdammt schwer", gibt Katsman frei heraus zu. "Selbst die gleiche Geschwindigkeit wie DirectX 11 zu erreichen ist nicht einfach - und in manchen Fällen ist uns das bis heute nicht gelungen". Und wenn man nicht einmal an den Vorgänger herankommt, ist es deutlich schwerer, noch mehr Leistung aus dem Nachfolger herauszukitzeln - was die Patch-Lage für die beiden Spiele erklärt.
Unausgereifte Grafiktreiber
Nennenswerte Steigerungen der Bildwiederholfrequenz gelangen den Entwicklern nur mit Multi-GPU-Systemen, jedenfalls bei Rise of the Tomb Raider. Bei Deus Ex: Mankind Divided überredeten die Programmierer auch Single-GPU-PCs zu immerhin fünf bis zehn Prozent mehr Leistung. "Das scheint auf den ersten Blick toll zu sein, aber der Weg dorthin war kein leichter - und Benchmark-Ergebnisse erzählen nicht die ganze Geschichte", sagt Jurjen Katsman.
Die meisten Probleme haben dann nicht wir, sondern die Treiber-Programmierer behoben.
Zu den technischen Hürden und Problemen gehörten unausgereifte Tools, fehlende GPU-Debugger, Abstürze der Grafikchips und natürlich die Treiber. "Die Treiber ließen sich bestenfalls mit unausgereift beschreiben", erinnert sich Katsman. "Wir haben oft mit unseren AMD- und Nvidia-Kontakten telefoniert. Die meisten Probleme haben dann nicht wir, sondern die Treiber-Programmierer behoben - aber das hat eine Menge Zeit verschlungen und die Entwicklung verlangsamt". Zeitraubend ebenfalls die Tatsache, dass es auf AMD- und Nvidia-Karten zu unterschiedlichen Fehlern kam und das Team dadurch alle nur erdenklichen Hardware-Kombinationen testen musste. "Aber sollten wir erwarten, jeden PC, den man sich vorstellen kann, zu testen?" fragt Jurjen Katsman. "Das ist komplett unrealistisch".
Tücken der Pipeline- und Speicherverwaltung
Oft beobachtete, lange Ladezeiten von DirectX-12-Spielen werden laut Jurjen Katsman durch die Erstellung der Grafik-Pipelines und Shader verursacht. Die Lösung der Programmierer: Sie berechneten sie im Voraus, nicht erst in dem Moment, in dem sie im Spiel benötigt werden - und packten diese Cache-Pipelines dann auf die DVD beziehungsweise das Download-Paket des Spiels. Außerdem empfiehlt Katsman seinen Kollegen, zur Pipeline-Erstellung alle CPU-Kerne einzusetzen - wenn möglich alle acht Threads.
Der schwierigste Teil der DirectX-Programmierung? "Die Speicherverwaltung, ganz klar", so Jurjen Katsman. "Hier entstehen die größten Leistungseinbrüche". Im Vergleich zur Programmierung von Xbox One und PlayStation 4 - "ein Kinderspiel" - hat das Nixxes-Team noch nicht die ideale Vorgehensweise erreicht - und damit auch noch nicht den Anschluss an oder gar das Übertreffen von DirectX 11. "Auch der kleinste Index Buffer belegt 64 KByte", sagt Katsman. "Kombiniert deswegen so viele mit der gleichen Lebensdauer, wie ihr könnt, um sie nicht mittendrin austauschen zu müssen und dadurch Zeit zu verlieren. Wenn wir dann hören: 'Dann nutzt nicht so viel Speicher', ist das ein lausiger Vorschlag. Es sollte möglich sein, den Spielern die gleichen Optionen und die gleiche Leistung wie mit DirectX 11 zu liefern". Durch das Zwischenspeichern von Ressourcen im RAM des Computers vermieden die Entwickler weitere Einbrüche der Bildwiederholfrequenz. In Zukunft würde sich Jurjen Katsman mehr Kontrolle über die Ressourcen wünschen. "Sobald wir mehrere Ressourcen erstellt haben, wird es zu einem Ratespiel, wie viel Rechenbudget wir dafür benötigen".
Zwei Grafikkarten: Vorteil DirectX12
Einer der Hauptvorteile von DirectX 12 ist Async Compute: das Umarrangieren von Rechenaufgaben, um alle GPU- beziehungsweise CPU-Kerne so gut wie möglich zu beschäftigen und Leerlaufzeiten zu eliminieren. Die Beherrschung dieser Technik dauerte eine Weile und kann gute Ergebnisse bringen, so Jurjen Katsman - "auch, wenn wir die auf Nvidia-Karten zunächst nicht erwartet haben. Einige der dazugewonnenen Rechenzyklen werden allerdings wieder von den neuen Command-List-Funktionen aufgefressen, also ist es nicht immer klar, wann Async Compute am wirkungsvollsten eingesetzt werden soll".
DirectX 12 punktet außerdem bei Spielern, in deren PCs mehrere Grafikkarten stecken. "Doch das ist nur eine kleine, wenngleich lautstarke Gruppe", gibt Katsman zu bedenken. Immerhin: "Bei DirectX 11 war der Aufwand dafür deutlich größer und schwerer zu kontrollieren". Alternate Frame Rendering ist nach den Ergebnissen des Nixxes-Teams die beste Methode, um den Bildaufbau mit zwei Karten zu beschleunigen.
Wunsch und Wirklichkeit
Ein Problem des jahrelangen DirectX-12-Hypes: "Die Spieler erwarten riesige Geschwindigkeitssteigerungen und sind enttäuscht, wenn ihre Spiele nicht 30 Prozent schneller laufen - oder ein Spiel nicht den Speicher von zwei 4-GByte-Karten zu 8 GByte addiert", sagt Jurjen Katsman. "Doch DirectX 11 hat die GPU schon sehr gut gesteuert - das wird sich über Nacht nicht wie durch Zauberhand verbessern. Deswegen kann DirectX 12 manchen Spielern sinnlos vorkommen". Demgegenüber stehen natürlich Microsoft, AMD, Nvidia und auch viele Entwickler: "Sie alle wollen DirectX 12 als Wunderwaffe verkaufen", sagt Katsman. "Wir müssen die Erwartungen aber auf ein realistischeres Maß zurückschrauben".
Und so lange AMD und Nvidia ihren Treibern Tricks unterjubeln, mit denen sie ihre Karten gut dastehen lassen, werden sie es auch machen.
Etwaige Leistungszuwächse durch DirectX 12 können von höheren Rechenkosten leicht eliminiert werden - wie die Benchmarks mit High-End-Hardware, 4K-Auflösung und hohen Grafikqualitätseinstellungen zeigen: Beide erreichen Spitzenwerte von 111 Bildern pro Sekunde. Auch die durch Async Compute erzielten Leistungssteigerungen sind bestenfalls inkonsistent, so Jurjen Katsman. "Spielkonsolen haben alle identische Hardware - dort beobachtete Leistungssprünge lassen sich so nicht auf den PC übertragen". Und: "Mehrere Grafikkarten addieren nie ihren Speicher - auch, wenn die Leute 80 Prozent mehr Frames von einer zweiten Karte erwarten". Kann ein Programmierer mit DirectX 12 wirklich so direkt wie nie auf die Transistoren der Grafikkarte zugreifen? "Nein", antwortet Katsman. "Und so lange AMD und Nvidia ihren Treibern Tricks unterjubeln, mit denen sie ihre Karten gut dastehen lassen, werden sie es auch machen".
DirectX 12 - die Zukunft für PC-Spiele?
Lohnt sich der Aufwand für eine DirectX-12-Version eines Spiels? "Die Frage möchte ich lieber nicht beantworten", sagt Jurjen Katsman. "Es gibt keine Garantie dafür, dass die Spieler den Aufwand sehen, den man dafür betreibt. Aber ich bleibe positiv, denn manche schreiben in unseren Foren, dass die DirectX-12-Version bei ihnen besser läuft - wenn auch nur in bestimmten Gebieten etwa in Rise of the Tomb Raider". Katsman ist davon überzeugt, dass Async Compute der richtige Schritt ist, allerdings noch einige API-Verbesserungen benötigt, um wirklich deutliche Leistungsverbesserungen zu zeigen. 30 Prozent mehr Leistung auf aktueller Hardware ist für ihn jedoch Wunschdenken. "Hätte man mir zu Beginn gesagt, dass wir nur auf zehn Prozent kommen, wäre ich nicht so begeistert gewesen - aber zehn Prozent sind besser als nichts".
Programmierer müssen sich am Ende des Tages fragen: "Lohnt sich der Mehraufwand von DirectX 12? Löst er alle Entwicklungsprobleme und bringt er den Spielern das, was sie sich erhoffen?". Jurjen Katsman mahnt: "Unterschätzt den Aufwand nicht und startet früh genug damit, DirectX 12 zu implementieren - nicht erst ganz zum Schluss, und schon gar nicht als Patch. Die Spiele, die am besten ankommen, werden nur in einer DirectX-12-Fassung ausgeliefert - nicht mit beiden APIs".
3D-Programmierer Tiago Rodrigues von Ubisoft Montreal stimmt Katsman ein wenig später zu: Er kam mit seinem Team zu ähnlichen Ergebnissen und sieht die Entwicklung in DirectX12 vor allem als eine Methode, um die Architektur von Spiele-Engines zu verbessern. Außerdem erleichtere sie die Portierung auf andere APIs wie Vulkan und bringt mit Asynch Computer oder Shader Model 6 doch noch einige neue Features, die in Zukunft hilfreich sein werden: "Reine Leistungssteigerung ist nicht das einzige Ziel", gibt Rodrigues zu.
30% mehr Performance bei gleicher Hardware sind auch auf Seiten der GPU keine Unmöglichkeit, einen so großen Spielraum wie bei der CPU hat man dagegen nicht.
Ähnlich sieht es auch bei DX12, bloß verwenden fast alle bisherigen Umsetzungen die simpelste Form von DX12.
Wurde wohl oft mal eben so implementiert um es wenigstens auf der Featureliste zu haben.
Man muss dem Ganzen noch etwas Zeit geben. Der Aufwand, bzw. die Einarbeitungszeit um die Funktionen zu implementieren die dem Entwickler vorher abgenommen wurden und jetzt freigelegt sind ist schon enorm (z.b. Speicherverwaltung).
Die Menge Experten auf dem Gebiet mit umfangreichem Wissen ist wahrscheinlich überschaubar und es gibt noch ein Mangel an Lehrgängen und Fachliteratur zu den Low Level APIs.
Versuche mich selber grad in Vulkan einzuarbeiten und es ist schon gewaltig wie viel Aufwand man betreiben bzw. wie viel Zeilen Code man schreiben muss um überhaupt erstmal ein Dreieck zeichnen zu können.^^
Sicher ist die Kritik zu hart aber man merkte eben keine Steigerung, obwohl sie eigentlich mehr Erfahrung hätten haben müssen, als so ziemlich jedes andere Programmiererteam.
Die Engine und den eigentlichen Spielcode hat Nixxes nicht selber geschrieben und sie müssen stets die Arbeit anderer als Grundlage verwenden und sich dort zurechtfinden.
Rise of the Tomb Raider und Deus Ex verwenden unterschiedliche Engines, wer bei Nixxes genau dafür zuständig war, weiß ich nicht, ebenso wenig wie hoch das Budget ausfiel und die Zeiteinteilung zwischen der DX11- und DX12-Version.
Es ist allerdings ziemlich offensichtlich, dass die Implementierung von DX12/Vulkan für jedes Studio eine Herausforderung darstellt und ohne eine starke Anpassung der Engine auch selten gute Ergebnisse zu Tage fördert.
Allerdings würde ich es bevorzugen, wenn sich Vulcan durchsetzt. DirectX bedeutet immer eine Abhängigkeit von Microsoft und damit Windows.