Variable Rate Shading: DirectX-12-Erweiterung für Intel Ice Lake & Nvidia Turing
Microsoft hat zur GDC 2019 ein neues Feature für seine Low-Level-API DirectX 12 angekündigt: Variable Rate Shading. Spieler könnten die Funktion bereits von Nvidias Turing-Grafikkarten kennen, die diese schon früher über herstellereigene Erweiterungen zur Verfügung stellen. Microsoft vereinheitlicht den Ansatz und unterstützt das Ganze herstellerübergreifend. Intels Ice Lake wird explizit angesprochen.
Nvidia hat mit der Turing-Generation verschiedene Adaptive-Shading-Funktionen eingeführt, mit denen sich unterschiedliche Oberflächen mit verschiedenen Shading-Faktoren versehen lassen. Die Shading-Rate bestimmt die Anzahl der Samples für die Farbinformationen. Im klassischen 1×1-Raster wird jeder Pixel einzeln "geshadet". Alternativ können Turing-GPUs den gleichen Pixel-Shader auf vier (2×2) oder 16 Bildpunkte (4×4) anwenden. Krumme Kombinationen (1×2/2×1, 2×4/4×2) sind ebenso möglich.
Eine einheitliche Wand ohne aufwendige Farbverläufe könnte so beispielsweise mit der niedrigsten Shading-Rate dargestellt werden, während ein Regal mit Gegenständen darauf mit der gewohnten Präzision berechnet würde, ohne dass der Spieler einen Unterschied sieht. Intel plant, die gleiche Funktion unter dem Namen Coarse Pixel Shading einzuführen. AMD beherrscht sie noch nicht, könnte sie aber mit Navi bringen - konkrete Informationen gibt es keine.
DirectX 12 bekommt Variable Rate Shading
Bisher setzte Nvidia auf eine herstellereigene Software-Lösung, um das Adaptive-Shading umzusetzen. Vielleicht litt die Unterstützung seitens der Spieleentwickler auch darunter: Wolfenstein 2 ist der einzige größere Titel, der die Funktion nutzt. Für eine steigende Verbreitung könnte in Zukunft Microsoft sorgen, der eine einheitliche, herstellerunspezifische Lösung in DirectX 12 integriert hat, um die Shading-Präzision dynamisch anpassen zu können - hier Variable Rate Shading genannt.
Microsoft spricht von einem Tier-1- und Tier-2-Support in Hardware. In ersterem Fall kann die Shading-Rate lediglich pro Draw-Call angepasst werden. Schickt die CPU solche zum Beispiel zum Rendern von Wasser an die GPU, wird das gesamte Wasser mit gleich vielen Samples gerendert. Tier 2 ermöglicht die Anpassung innerhalb von Draw-Calls. Entwickler könnten zum Beispiel zusätzlich zur allgemein eingestellten Shading-Rate des Wassers einen Filter einsetzen, der Ränder erkennt, und die Präzision dort erhöhen. Firaxis hat Variable Rate Shading in Civilization 6 ausprobiert, das durch die großen einheitlichen Flächen für das Feature prädestiniert erscheint. Mit einer Tier-1-Umsetzung stieg die Framerate um 20 Prozent, sorgte aber bei den feinen Details auf dem Land für Artefakte. Mit Tier 2 samt Randerkennung war immer noch ein Plus von 14 Prozent drin, dann allerdings mit einem kaum sichtbaren Unterschied zum Original. In Städte hereingezoomt wird der Leistungsvorteil geringer ausfallen.
Microsoft spricht indes eine kommende Intel-Session auf der GDC 2019 an, in der Variable Rate Shading anhand eines Ice-Lake-Prozessors in Form einer Vorserien-CPU demonstriert werden soll.

Die Vulkan Extension ist prinzipiell erstmal eher Nvidias Ding, ich wäre langfristig dafür, dass sich dann alle drei Hersteller die Implementierung von MS zur Gemüte führen, denn Vulkan wird sich ja am PC eh nicht durchsetzen, jedenfalls darf man davon ausgehen.
Und dass sich Vulkan nicht durchsetzt ist wenn dann etwas, von was ich ausgehen muss, als dass ich das darf.
Zu sagen dass jeder Hersteller erstmal sein eigenes Ding machen soll, was den Markt stark fragmentiert und man als Nutzer dann immer gucken muss welches Spiel, welche Features der Hersteller unterstützt, macht für mich keinen Sinn. Das wäre dann wie anfang der 90er Jahre wo die einen Sachen nur im Softwaremodus unterstützt wurden, andere nur in D3D, wieder andere in OpenGL und wieder andere Dinge in Glide.
Auch haben die Hersteller noch immer Freiraum in der Implementierung, da sie das Feature in ihren Treibern und Hardware umsetzen müssen. Das Spiel schickt über die API ja nur die Anfrage, dass ein Cluster aus 16x16 Pixeln einen Shaderpass haben möchte und es liegt dann am Treiber diese Anfrage gescheit für die Hardware zu übersetzen.
Und das es in die Standards übernommen wird hat den Vorteil das es eben eine Standard gibt anhand dessen man sich richten kann.
Oder muss ich da an GL_AMD_vertex_shader_tessellator erinnern?
Die Vulkan Extension ist prinzipiell erstmal eher Nvidias Ding, ich wäre langfristig dafür, dass sich dann alle drei Hersteller die Implementierung von MS zur Gemüte führen, denn Vulkan wird sich ja am PC eh nicht durchsetzen, jedenfalls darf man davon ausgehen.